aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile144
1 files changed, 144 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..4d78c66
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,144 @@
+# The package path prefix, if you want to install to another root, set DESTDIR to that root
+PREFIX = /usr
+# The library path excluding prefix
+LIB = /lib
+# The resource path excluding prefix
+DATA = /share
+# The library path including prefix
+LIBDIR = ${PREFIX}${LIB}
+# The resource path including prefix
+DATADIR = ${PREFIX}${DATA}
+# The generic documentation path including prefix
+DOCDIR = ${DATADIR}/doc
+# The license base path including prefix
+LICENSEDIR = ${DATADIR}/licenses
+
+
+# The major version number of the current Python installation
+PY_MAJOR = $(shell python -V | cut -d ' ' -f 2 | cut -d . -f 1)
+# The minor version number of the current Python installation
+PY_MINOR = $(shell python -V | cut -d ' ' -f 2 | cut -d . -f 2)
+# The version number of the current Python installation without a dot
+PY_VER = ${PY_MAJOR}${PY_MINOR}
+# The version number of the current Python installation with a dot
+PY_VERSION = ${PY_MAJOR}.${PY_MINOR}
+
+
+# The directory for python modules
+PYTHONDIR = ${LIBDIR}/python${PY_VERSION}
+
+
+# The name of the package as it should be installed
+PKGNAME = python-bus
+
+
+# The installed pkg-config command
+PKGCONFIG ?= pkg-config
+# The installed cython command
+CYTHON ?= cython
+# The installed python command
+PYTHON = python${PY_MAJOR}
+
+
+# Libraries to link with using pkg-config
+LIBS = python${PY_MAJOR}
+
+
+# The C standard for C code compilation
+STD = c99
+# Optimisation settings for C code compilation
+OPTIMISE = -O2
+
+
+# Flags to use when compiling
+CC_FLAGS = $$(${PKGCONFIG} --cflags ${LIBS}) -std=${STD} ${OPTIMISE} -fPIC ${CFLAGS} ${CPPFLAGS}
+
+# Flags to use when linking
+LD_FLAGS = $$(${PKGCONFIG} --libs ${LIBS}) -lbus -std=${STD} ${OPTIMISE} -shared ${LDFLAGS}
+
+
+# The suffixless basename of the .py-files
+PYTHON_SRC = bus
+
+# The suffixless basename of the .py-files
+CYTHON_SRC = native_bus
+
+
+
+all: pyc-files pyo-files so-files
+
+pyc-files: $(foreach M,${PYTHON_SRC},src/__pycache__/${M}.cpython-${PY_VER}.pyc)
+pyo-files: $(foreach M,${PYTHON_SRC},src/__pycache__/${M}.cpython-${PY_VER}.pyo)
+so-files: $(foreach M,${CYTHON_SRC},bin/${M}.so)
+
+bin/%.so: obj/%.o
+ @mkdir -p bin
+ ${CC} ${LD_FLAGS} -o $@ $^
+
+obj/%.o: obj/%.c
+ ${CC} ${CC_FLAGS} -iquote"src" -c -o $@ $<
+
+obj/%.c: obj/%.pyx
+ if ! ${CYTHON} -3 -v $< ; then rm $@ ; false ; fi
+
+obj/%.pyx: src/%.pyx
+ @mkdir -p obj
+ cp $< $@
+
+src/__pycache__/%.cpython-$(PY_VER).pyc: src/%.py
+ ${PYTHON} -m compileall $<
+
+src/__pycache__/%.cpython-$(PY_VER).pyo: src/%.py
+ ${PYTHON} -OO -m compileall $<
+
+
+
+install: install-base
+
+install-all: install-base
+install-base: install-lib install-copyright
+install-lib: install-source install-compiled install-optimised install-native
+
+install-source: $(foreach M,$(PYTHON_SRC),src/$(M).py)
+ install -dm755 -- "$(DESTDIR)$(PYTHONDIR)"
+ install -m644 $^ -- "$(DESTDIR)$(PYTHONDIR)"
+
+install-compiled: $(foreach M,$(PYTHON_SRC),src/__pycache__/$(M).cpython-$(PY_VER).pyc)
+ install -dm755 -- "$(DESTDIR)$(PYTHONDIR)/__pycache__"
+ install -m644 $^ -- "$(DESTDIR)$(PYTHONDIR)/__pycache__"
+
+install-optimised: $(foreach M,$(PYTHON_SRC),src/__pycache__/$(M).cpython-$(PY_VER).pyo)
+ install -dm755 -- "$(DESTDIR)$(PYTHONDIR)/__pycache__"
+ install -m644 $^ -- "$(DESTDIR)$(PYTHONDIR)/__pycache__"
+
+install-native: $(foreach M,$(CYTHON_SRC),bin/$(M).so)
+ install -dm755 -- "$(DESTDIR)$(PYTHONDIR)"
+ install -m755 $^ -- "$(DESTDIR)$(PYTHONDIR)"
+
+install-copyright: install-license
+
+install-license: LICENSE
+ install -dm755 -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)"
+ install -m644 $^ -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)"
+
+
+
+uninstall:
+ -rm -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}/LICENSE"
+ -rmdir -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}"
+ -rm -- $(foreach M,${PYTHON_SRC},"${DESTDIR}${PYTHONDIR}/__pycache__/${M}.cpython-${PY_VER}.pyo")
+ -rm -- $(foreach M,${PYTHON_SRC},"${DESTDIR}${PYTHONDIR}/__pycache__/${M}.cpython-${PY_VER}.pyc")
+ -rm -- $(foreach M,${PYTHON_SRC},"${DESTDIR}${PYTHONDIR}/${M}.py")
+ -rm -- $(foreach M,${CYTHON_SRC},"${DESTDIR}${PYTHONDIR}/${M}.so")
+
+
+
+clean:
+ -rm -r obj bin src/__pycache__
+
+
+
+.PHONY: all pyc-files pyo-files so-files install install-all install-base \
+ install-lib install-source install-compiled install-optimised \
+ install-native install-copyright install-license uninstall clean
+