From 837f8f97bb903cbb060b406f90c2183955696cc6 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Mon, 24 Jun 2019 12:34:43 +0000 Subject: [PATCH] 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 --- make/swig.mk | 53 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/make/swig.mk b/make/swig.mk index 381cfc2e..02d35348 100644 --- a/make/swig.mk +++ b/make/swig.mk @@ -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