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/py-defs.mk # for $(PYTHON)
include $(MODDIR)/make/defs-cpp.mk
include $(MODDIR)/make/dev-utils.mk
@ -38,6 +37,7 @@ ifeq ($(SWIG_TARGET),php)
all:
$(SWIG_PHP_MODULE_INI_DIR)/%.ini: %.ini
mkdir -p $(dir $@)
$(INSTALL) -p -o $(APACHE_CONFOWNER) -g $(APACHE_CONFGROUP) -m $(APACHE_CONFMODE) $< $@
%.ini:
@ -52,6 +52,8 @@ else ifeq ($(SWIG_TARGET),android)
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_MAJOR_VERSION ?= $(basename $(PYTHON_FULL_VERSION))
PYTHON_MINOR_VERSION ?= $(patsubst .%,%,$(suffix $(PYTHON_FULL_VERSION)))
@ -59,23 +61,41 @@ else ifeq ($(SWIG_TARGET),python)
SWIG_LANG ?= python
SWIG_TARGET_EXT ?= py
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_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_INSTALLED_EXTRA += $(SWIG_MODULE_TARGET_DIR)/$(SWIG_PY_MODULE_PYC)
BUILD_INCLUDE += $(shell pkg-config --cflags python2)
BUILD_LDFLAGS += $(shell pkg-config --libs python2) $(shell php-config --ldflags --libs)
BUILD_INCLUDE += $(shell pkg-config --cflags python$(PYTHON_VERSION))
BUILD_LDFLAGS += $(shell pkg-config --libs python$(PYTHON_VERSION))
INSTALL_LIBDIR = $(SWIG_MODULE_TARGET_DIR)
all:
ifneq ($(PYTHON_VERSION),3)
%.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)
@ -101,17 +121,19 @@ else ifeq ($(SWIG_TARGET),java)
else ifeq ($(SWIG_TARGET),perl)
PERL ?= perl
SWIG_LANG ?= perl
SWIG_TARGET_EXT ?= pm
SWIG_OPTS ?= -perl
PERL_VERSION ?= $(patsubst v%,%,$(shell perl -e 'print $$^V;'))
PERL_BASE_DIR ?= $(ENV_PREFIX)$(firstword $(wildcard /usr/lib64/perl5 /usr/lib/perl5))
PERL_CORE_DIR ?= $(firstword $(wildcard $(PERL_BASE_DIR)/$(PERL_VERSION)/$(ARCH)-linux-thread-multi/CORE/ $(PERL_BASE_DIR)/CORE))
PERL_VERSION ?= $(patsubst v%,%,$(shell $(PERL) -e 'print $$^V;'))
# /usr/lib/perl is a symlink to /usr/lib/perl5 for yocto, so give this a preference
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
BUILD_INCLUDE += -I$(PERL_CORE_DIR)
SWIG_CLEAN += $(wildcard *.$(SWIG_TARGET_EXT))
INSTALL_LIBDIR = $(PERL_VENDOR_DIR)/auto/$(SWIG_MODULE)
SWIG_MODULE_TARGET_DIR = $(PERL_VENDOR_DIR)
INSTALL_LIBDIR = $(ENV_PREFIX)$(PERL_VENDOR_DIR)/auto/$(SWIG_MODULE)
SWIG_MODULE_TARGET_DIR = $(ENV_PREFIX)$(PERL_VENDOR_DIR)
else
@ -171,11 +193,14 @@ $(SWIG_MODULE_WRAP_C): $(SWIG_INTERFACE_I)
$(SWIG_MODULE_SO): $(SWIG_OBJ)
$(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) $< $@
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/depend.mk