# To compile with the embedded python interpreter set # the variable ABC_PYTHON to point to the python executable # # Examples: # make ABC_PYTHON=/usr/bin/python # make ABC_PYTHON=/usr/bin/python2.5 # # To build the Python extension build the target pyabc # To create a package of ABC with embedded Python use the target pyabc.tgz ifdef ABC_PYTHON # get the directory containing this file ABC_PYTHON_FILES_PREFIX := $(CURDIR)/src/python ABC_SWIG := swig ABC_PYTHON_CONFIG := $(ABC_PYTHON)-config ABC_PYTHON_CFLAGS := $(shell $(ABC_PYTHON_CONFIG) --includes) -DABC_PYTHON_EMBED=1 ABC_PYTHON_LDFLAGS := $(shell $(ABC_PYTHON_CONFIG) --ldflags) CFLAGS += $(ABC_PYTHON_CFLAGS) CXXFLAGS += $(ABC_PYTHON_CFLAGS) LIBS += $(ABC_PYTHON_LDFLAGS) ABC_PYTHON_SRC := $(ABC_PYTHON_FILES_PREFIX)/pyabc_wrap.c SRC += $(ABC_PYTHON_SRC) GARBAGE += \ $(ABC_PYTHON_SRC) \ $(ABC_PYTHON_SRC:_wrap.c=.py) \ $(ABC_PYTHON_SRC:_wrap.c=.pyc) \ $(ABC_PYTHON_FILES_PREFIX)/build \ $(ABC_PYTHON_FILES_PREFIX)/dist \ pyabc.tgz ABC_PYABC_DIR ?= pyabc ABC_PYABC_TGZ ?= pyabc.tgz ABC_PYABC_EXTRA_BIN ?= ABC_PYABC_EXTRA_LIB ?= %_wrap.c %.py : %.i $(ABC_SWIG) -python -outdir $(<D) $< .PHONY: pyabc_extension_build pyabc_extension_build : lib$(PROG).a $(ABC_PYTHON_SRC) $(ABC_PYTHON_SRC:_wrap.c=.py) ( cd $(ABC_PYTHON_FILES_PREFIX) && rm -rf build/ ) ( cd $(ABC_PYTHON_FILES_PREFIX) && $(ABC_PYTHON) setup.py build ) .PHONY: pyabc_extension_install pyabc_extension_install : pyabc_extension_build ( cd $(ABC_PYTHON_FILES_PREFIX) && $(ABC_PYTHON) setup.py install --user ) .PHONY: pyabc_extension_bdist pyabc_extension_bdist : pyabc_extension_build ( cd $(ABC_PYTHON_FILES_PREFIX) && python setup.py bdist ) .PHONY: pyabc_tgz pyabc_tgz : $(ABC_PYABC_TGZ) $(ABC_PYABC_TGZ) : $(PROG) $(ABC_PYTHON_SRC:_wrap.c=.py) $(ABC_PYTHON_FILES_PREFIX)/abc.sh $(ABC_PYTHON_FILES_PREFIX)/package.py $(ABC_PYTHON) $(ABC_PYTHON_FILES_PREFIX)/package.py \ --pyabc_dir=$(ABC_PYABC_DIR) \ --abc=$(PROG) \ --abc_sh=$(ABC_PYTHON_FILES_PREFIX)/abc.sh \ --pyabc=$(ABC_PYTHON_FILES_PREFIX) \ --extra_bin="$(ABC_PYABC_EXTRA_BIN)" \ --extra_lib="$(ABC_PYABC_EXTRA_LIB)" \ --out=$@ \ $(ABC_PYTHON_OPTIONS) PYABC_INSTALL_TARGET ?= $(shell date +%Y-%m-%d_%H-%M.%N_${USER}) PYABC_INSTALL_TARGET := $(PYABC_INSTALL_TARGET) PYABC_INSTALL_DIR ?= /hd/common/pyabc/builds/pyabc_builds/ pyabc_install_target: pyabc_extension_bdist mkdir -p "$(PYABC_INSTALL_DIR)/$(PYABC_INSTALL_TARGET)" tar \ --directory="$(PYABC_INSTALL_DIR)/$(PYABC_INSTALL_TARGET)" \ --show-transformed-names \ --transform='s#^.*/##g' \ -xvzf "$(ABC_PYTHON_FILES_PREFIX)/dist/pyabc-1.0.linux-x86_64.tar.gz" find "$(PYABC_INSTALL_DIR)/$(PYABC_INSTALL_TARGET)/"* -type d | xargs rmdir echo "Installed at $(PYABC_INSTALL_DIR)/$(PYABC_INSTALL_TARGET)" endif