# 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
# Filename extension for -OO optimised python files
ifeq ($(shell test $(PY_VER) -ge 35 ; echo $$?),0)
PY_OPT2_EXT = opt-2.pyc
else
PY_OPT2_EXT = pyo
endif
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}.$(PY_OPT2_EXT))
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).$(PY_OPT2_EXT): 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).$(PY_OPT2_EXT))
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}.$(PY_OPT2_EXT)")
-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