diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 144 |
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 + |