swig.mk: Fix multiple file location issues

This commit fixes multiple issues with locating Perl and Python directories and
files. It was driven by the need to have it work on Yocto, and isn't tested
anywhere else. It also fixes __pycache__/%.pyc issues from the Python 2 -> 3
transition.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2019-06-24 12:34:43 +00:00
commit 837f8f97bb

View file

@ -1,5 +1,4 @@
include $(MODDIR)/make/defs.mk include $(MODDIR)/make/defs.mk
include $(MODDIR)/make/py-defs.mk # for $(PYTHON)
include $(MODDIR)/make/defs-cpp.mk include $(MODDIR)/make/defs-cpp.mk
include $(MODDIR)/make/dev-utils.mk include $(MODDIR)/make/dev-utils.mk
@ -38,6 +37,7 @@ ifeq ($(SWIG_TARGET),php)
all: all:
$(SWIG_PHP_MODULE_INI_DIR)/%.ini: %.ini $(SWIG_PHP_MODULE_INI_DIR)/%.ini: %.ini
mkdir -p $(dir $@)
$(INSTALL) -p -o $(APACHE_CONFOWNER) -g $(APACHE_CONFGROUP) -m $(APACHE_CONFMODE) $< $@ $(INSTALL) -p -o $(APACHE_CONFOWNER) -g $(APACHE_CONFGROUP) -m $(APACHE_CONFMODE) $< $@
%.ini: %.ini:
@ -52,6 +52,8 @@ else ifeq ($(SWIG_TARGET),android)
else ifeq ($(SWIG_TARGET),python) else ifeq ($(SWIG_TARGET),python)
include $(MODDIR)/make/py-defs.mk # for $(PYTHON), $(PY_SITE_PACKAGES_PATH)
PYTHON_FULL_VERSION ?= $(basename $(lastword $(shell $(PYTHON) --version 2>&1))) PYTHON_FULL_VERSION ?= $(basename $(lastword $(shell $(PYTHON) --version 2>&1)))
PYTHON_MAJOR_VERSION ?= $(basename $(PYTHON_FULL_VERSION)) PYTHON_MAJOR_VERSION ?= $(basename $(PYTHON_FULL_VERSION))
PYTHON_MINOR_VERSION ?= $(patsubst .%,%,$(suffix $(PYTHON_FULL_VERSION))) PYTHON_MINOR_VERSION ?= $(patsubst .%,%,$(suffix $(PYTHON_FULL_VERSION)))
@ -59,23 +61,41 @@ else ifeq ($(SWIG_TARGET),python)
SWIG_LANG ?= python SWIG_LANG ?= python
SWIG_TARGET_EXT ?= py SWIG_TARGET_EXT ?= py
SWIG_OPTS ?= -python SWIG_OPTS ?= -python
SWIG_MODULE_TARGET_DIR = $(ENV_PREFIX)$(SYSTEM_LIBDIR)/python$(PYTHON_MAJOR_VERSION).$(PYTHON_MINOR_VERSION)/site-packages #SWIG_MODULE_TARGET_DIR = $(ENV_PREFIX)$(SYSTEM_LIBDIR)/python$(PYTHON_MAJOR_VERSION).$(PYTHON_MINOR_VERSION)/site-packages
SWIG_MODULE_TARGET_DIR = $(ENV_PREFIX)$(PY_SITE_PACKAGES_PATH)
SWIG_MODULE_SO ?= _$(SWIG_MODULE).so SWIG_MODULE_SO ?= _$(SWIG_MODULE).so
SWIG_CLEAN += $(wildcard *.pyc)
SWIG_PY_MODULE_PYC ?= $(patsubst %.py,%.pyc,$(SWIG_MODULE_TARGET)) ifneq ($(PYTHON_VERSION),3)
SWIG_CLEAN += $(wildcard *.pyc)
SWIG_PY_MODULE_PYC ?= $(patsubst %.py,%.pyc,$(SWIG_MODULE_TARGET))
else
SWIG_CLEAN += $(wildcard __pycache__)
SWIG_PY_MODULE_PYC ?= $(patsubst %.py,__pycache__/%.$(PY_CPYTHON_PREFIX).pyc,$(SWIG_MODULE_TARGET))
endif
SWIG_GENERATED_EXTRA += $(SWIG_PY_MODULE_PYC) SWIG_GENERATED_EXTRA += $(SWIG_PY_MODULE_PYC)
SWIG_INSTALLED_EXTRA += $(SWIG_MODULE_TARGET_DIR)/$(SWIG_PY_MODULE_PYC) SWIG_INSTALLED_EXTRA += $(SWIG_MODULE_TARGET_DIR)/$(SWIG_PY_MODULE_PYC)
BUILD_INCLUDE += $(shell pkg-config --cflags python2) BUILD_INCLUDE += $(shell pkg-config --cflags python$(PYTHON_VERSION))
BUILD_LDFLAGS += $(shell pkg-config --libs python2) $(shell php-config --ldflags --libs) BUILD_LDFLAGS += $(shell pkg-config --libs python$(PYTHON_VERSION))
INSTALL_LIBDIR = $(SWIG_MODULE_TARGET_DIR) INSTALL_LIBDIR = $(SWIG_MODULE_TARGET_DIR)
all: all:
ifneq ($(PYTHON_VERSION),3)
%.pyc: %.py %.pyc: %.py
python2 -m py_compile $< else
__pycache__/%.$(PY_CPYTHON_PREFIX).pyc: %.py
endif
$(PYTHON) -c "import py_compile; py_compile.compile(\"$<\", doraise=True)"
ifeq ($(PYTHON_VERSION),3)
$(SWIG_MODULE_TARGET_DIR)/__pycache__/%.$(PY_CPYTHON_PREFIX).pyc: __pycache__/%.$(PY_CPYTHON_PREFIX).pyc
mkdir -p $(dir $@)
else
$(SWIG_MODULE_TARGET_DIR)/%.pyc: %.pyc
endif
$(INSTALL) -p -m $(SWIG_TARGETMODE) -o $(SWIG_TARGETOWNER) -g $(SWIG_TARGETGROUP) $< $@
else ifeq ($(SWIG_TARGET),java) else ifeq ($(SWIG_TARGET),java)
@ -101,17 +121,19 @@ else ifeq ($(SWIG_TARGET),java)
else ifeq ($(SWIG_TARGET),perl) else ifeq ($(SWIG_TARGET),perl)
PERL ?= perl
SWIG_LANG ?= perl SWIG_LANG ?= perl
SWIG_TARGET_EXT ?= pm SWIG_TARGET_EXT ?= pm
SWIG_OPTS ?= -perl SWIG_OPTS ?= -perl
PERL_VERSION ?= $(patsubst v%,%,$(shell perl -e 'print $$^V;')) PERL_VERSION ?= $(patsubst v%,%,$(shell $(PERL) -e 'print $$^V;'))
PERL_BASE_DIR ?= $(ENV_PREFIX)$(firstword $(wildcard /usr/lib64/perl5 /usr/lib/perl5)) # /usr/lib/perl is a symlink to /usr/lib/perl5 for yocto, so give this a preference
PERL_CORE_DIR ?= $(firstword $(wildcard $(PERL_BASE_DIR)/$(PERL_VERSION)/$(ARCH)-linux-thread-multi/CORE/ $(PERL_BASE_DIR)/CORE)) PERL_BASE_DIR ?= $(firstword $(wildcard $(addprefix $(BUILD_LIBS_PREFIX),/usr/lib64/perl5 /usr/lib/perl /usr/lib/perl5 /usr/lib/perl-native/perl)))
PERL_CORE_DIR ?= $(firstword $(wildcard $(addprefix $(PERL_BASE_DIR)/,$(PERL_VERSION)/$(ARCH)-linux-thread-multi/CORE $(PERL_VERSION)/CORE CORE)))
PERL_VENDOR_DIR ?= $(PERL_BASE_DIR)/vendor_perl/$(PERL_VERSION)/$(ARCH)-linux-thread-multi PERL_VENDOR_DIR ?= $(PERL_BASE_DIR)/vendor_perl/$(PERL_VERSION)/$(ARCH)-linux-thread-multi
BUILD_INCLUDE += -I$(PERL_CORE_DIR) BUILD_INCLUDE += -I$(PERL_CORE_DIR)
SWIG_CLEAN += $(wildcard *.$(SWIG_TARGET_EXT)) SWIG_CLEAN += $(wildcard *.$(SWIG_TARGET_EXT))
INSTALL_LIBDIR = $(PERL_VENDOR_DIR)/auto/$(SWIG_MODULE) INSTALL_LIBDIR = $(ENV_PREFIX)$(PERL_VENDOR_DIR)/auto/$(SWIG_MODULE)
SWIG_MODULE_TARGET_DIR = $(PERL_VENDOR_DIR) SWIG_MODULE_TARGET_DIR = $(ENV_PREFIX)$(PERL_VENDOR_DIR)
else else
@ -171,11 +193,14 @@ $(SWIG_MODULE_WRAP_C): $(SWIG_INTERFACE_I)
$(SWIG_MODULE_SO): $(SWIG_OBJ) $(SWIG_MODULE_SO): $(SWIG_OBJ)
$(CXX) $^ -shared $(BUILD_LDFLAGS) -o $@ $(CXX) $^ -shared $(BUILD_LDFLAGS) -o $@
$(SWIG_MODULE_TARGET_DIR)/%: % $(SWIG_MODULE_TARGET_DIR):
mkdir -p $@
$(SWIG_MODULE_TARGET_DIR)/%: % | $(SWIG_MODULE_TARGET_DIR)
$(INSTALL) -p -o $(SWIG_TARGETOWNER) -g $(SWIG_TARGETGROUP) -m $(SWIG_TARGETMODE) $< $@ $(INSTALL) -p -o $(SWIG_TARGETOWNER) -g $(SWIG_TARGETGROUP) -m $(SWIG_TARGETMODE) $< $@
clean.generated: clean.generated:
$(RM) -f $(SWIG_MODULE_WRAP_C) $(SWIG_OBJ) $(SWIG_MODULE_SO) $(SWIG_MODULE_TARGET) $(SWIG_CLEAN) $(SWIG_WRAPPER_DEP_MK) $(RM) -rf $(SWIG_MODULE_WRAP_C) $(SWIG_OBJ) $(SWIG_MODULE_SO) $(SWIG_MODULE_TARGET) $(SWIG_CLEAN) $(SWIG_WRAPPER_DEP_MK)
include $(MODDIR)/make/rules.mk include $(MODDIR)/make/rules.mk
include $(MODDIR)/make/depend.mk include $(MODDIR)/make/depend.mk