Merge pull request #207 from johan-hake/johanhake/fix-206-swig-relative-import
Fix issue with relative import when using single header file import [Python]
This commit is contained in:
commit
a06dff17ad
25 changed files with 193 additions and 1 deletions
|
|
@ -11,7 +11,8 @@ import_packages_subdirs = \
|
||||||
from_init2 \
|
from_init2 \
|
||||||
from_init3 \
|
from_init3 \
|
||||||
relativeimport1 \
|
relativeimport1 \
|
||||||
relativeimport1
|
relativeimport2 \
|
||||||
|
relativeimport3
|
||||||
|
|
||||||
check: build
|
check: build
|
||||||
if test "x$(SRCDIR)" != x; then \
|
if test "x$(SRCDIR)" != x; then \
|
||||||
|
|
|
||||||
25
Examples/python/import_packages/relativeimport3/Makefile
Normal file
25
Examples/python/import_packages/relativeimport3/Makefile
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
TOP = ../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
PY3 =
|
||||||
|
|
||||||
|
ifeq (,$(PY3))
|
||||||
|
PKG1DIR = "py2"
|
||||||
|
else
|
||||||
|
PKG1DIR = "py3"
|
||||||
|
endif
|
||||||
|
|
||||||
|
check: build
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' python_run
|
||||||
|
|
||||||
|
build:
|
||||||
|
cd $(PKG1DIR) && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT) -relativeimport' LIBS='$(LIBS)' build
|
||||||
|
|
||||||
|
static:
|
||||||
|
cd $(PKG1DIR) && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT) -relativeimport' LIBS='$(LIBS)' static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' python_clean
|
||||||
|
cd py2 && $(MAKE) clean
|
||||||
|
cd py3 && $(MAKE) clean
|
||||||
22
Examples/python/import_packages/relativeimport3/README
Normal file
22
Examples/python/import_packages/relativeimport3/README
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
This example tests the %import directive and -relativeimport swig option.
|
||||||
|
|
||||||
|
Use 'python runme.py' to run a test.
|
||||||
|
|
||||||
|
Overview:
|
||||||
|
---------
|
||||||
|
|
||||||
|
The example defines 2 different extension modules--each wrapping a separate C++
|
||||||
|
class.
|
||||||
|
|
||||||
|
pyX/pkg2/pkg3/foo.i - Pkg3_Foo class
|
||||||
|
pyX/pkg2/bar.i - Pkg2_Bar class derived from Pkg3_Foo
|
||||||
|
|
||||||
|
The code is processed by swig with -relativeimport flag. The runtime test
|
||||||
|
imports pyX.pkg2.bar module.
|
||||||
|
|
||||||
|
If everything works well, the module pyX.pkg2.bar shall load properly.
|
||||||
|
|
||||||
|
Unix:
|
||||||
|
-----
|
||||||
|
- Run make
|
||||||
|
- Run the test as described above
|
||||||
14
Examples/python/import_packages/relativeimport3/py2/Makefile
Normal file
14
Examples/python/import_packages/relativeimport3/py2/Makefile
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
TOP = ../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
cd pkg2 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' build
|
||||||
|
|
||||||
|
static:
|
||||||
|
cd pkg2 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' python_clean
|
||||||
|
cd pkg2 && $(MAKE) clean
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
TOP = ../../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='bar' INTERFACE='bar.i' python_cpp
|
||||||
|
cd pkg3 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' build
|
||||||
|
|
||||||
|
static:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='bar' INTERFACE='bar.i' python_cpp
|
||||||
|
cd pkg3 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' TARGET='bar' python_clean
|
||||||
|
cd pkg3 && $(MAKE) clean
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
#ifndef PY2_PKG2_BAR_HPP
|
||||||
|
#define PY2_PKG2_BAR_HPP
|
||||||
|
#include "../../py2/pkg2/pkg3/foo.hpp"
|
||||||
|
struct Pkg2_Bar : Pkg3_Foo {};
|
||||||
|
#endif /* PY2_PKG2_BAR_HPP */
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
%module(package="py2.pkg2") bar
|
||||||
|
%{
|
||||||
|
#include "../../py2/pkg2/bar.hpp"
|
||||||
|
%}
|
||||||
|
%import (module="foo", package="py2.pkg2.pkg3") "../../py2/pkg2/pkg3/foo.hpp"
|
||||||
|
%include "../../py2/pkg2/bar.hpp"
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
TOP = ../../../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='foo' INTERFACE='foo.i' python_cpp
|
||||||
|
|
||||||
|
static:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='foo' INTERFACE='foo.i' python_cpp_static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' TARGET='foo' python_clean
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef PY2_PKG2_PKG3_FOO_HPP
|
||||||
|
#define PY2_PKG2_PKG3_FOO_HPP
|
||||||
|
struct Pkg3_Foo {};
|
||||||
|
#endif /* PY2_PKG2_PKG3_FOO_HPP */
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
%module(package="py2.pkg2.pkg3") foo
|
||||||
|
%{
|
||||||
|
#include "../../../py2/pkg2/pkg3/foo.hpp"
|
||||||
|
%}
|
||||||
|
%include "../../../py2/pkg2/pkg3/foo.hpp"
|
||||||
14
Examples/python/import_packages/relativeimport3/py3/Makefile
Normal file
14
Examples/python/import_packages/relativeimport3/py3/Makefile
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
TOP = ../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
cd pkg2 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' build
|
||||||
|
|
||||||
|
static:
|
||||||
|
cd pkg2 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' python_clean
|
||||||
|
cd pkg2 && $(MAKE) clean
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
TOP = ../../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='bar' INTERFACE='bar.i' python_cpp
|
||||||
|
cd pkg3 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' build
|
||||||
|
|
||||||
|
static:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='bar' INTERFACE='bar.i' python_cpp
|
||||||
|
cd pkg3 && $(MAKE) SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' TARGET='bar' python_clean
|
||||||
|
cd pkg3 && $(MAKE) clean
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
#ifndef PY3_PKG2_BAR_HPP
|
||||||
|
#define PY3_PKG2_BAR_HPP
|
||||||
|
#include "../../py3/pkg2/pkg3/foo.hpp"
|
||||||
|
struct Pkg2_Bar : Pkg3_Foo {};
|
||||||
|
#endif /* PY3_PKG2_BAR_HPP */
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
%module(package="py3.pkg2") bar
|
||||||
|
%{
|
||||||
|
#include "../../py3/pkg2/bar.hpp"
|
||||||
|
%}
|
||||||
|
%import (module="foo", package="py3.pkg2.pkg3") "../../py3/pkg2/pkg3/foo.hpp"
|
||||||
|
%include "../../py3/pkg2/bar.hpp"
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
TOP = ../../../../../..
|
||||||
|
SWIG = $(realpath $(TOP)/../preinst-swig)
|
||||||
|
SWIGOPT =
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='foo' INTERFACE='foo.i' python_cpp
|
||||||
|
|
||||||
|
static:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SWIG='$(SWIG)' SWIGOPT='$(SWIGOPT)' \
|
||||||
|
LIBS='$(LIBS)' TARGET='foo' INTERFACE='foo.i' python_cpp_static
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' TARGET='foo' python_clean
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef PY3_PKG2_PKG3_FOO_HPP
|
||||||
|
#define PY3_PKG2_PKG3_FOO_HPP
|
||||||
|
struct Pkg3_Foo {};
|
||||||
|
#endif /* PY3_PKG2_PKG3_FOO_HPP */
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
%module(package="py3.pkg2.pkg3") foo
|
||||||
|
%{
|
||||||
|
#include "../../../py3/pkg2/pkg3/foo.hpp"
|
||||||
|
%}
|
||||||
|
%include "../../../py3/pkg2/pkg3/foo.hpp"
|
||||||
9
Examples/python/import_packages/relativeimport3/runme.py
Normal file
9
Examples/python/import_packages/relativeimport3/runme.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Test import of modules content from within __init__.py
|
||||||
|
print "Testing %module(package=...) with -relativeimport"
|
||||||
|
import sys
|
||||||
|
if sys.version_info < (3,0):
|
||||||
|
import py2.pkg2.bar
|
||||||
|
print " Finished importing py2.pkg2.bar"
|
||||||
|
else:
|
||||||
|
import py3.pkg2.bar
|
||||||
|
print " Finished importing py3.pkg2.bar"
|
||||||
|
|
@ -1880,6 +1880,7 @@ include_directive: includetype options string BEGINFILE {
|
||||||
Node *nint = new_node("import");
|
Node *nint = new_node("import");
|
||||||
Node *mnode = new_node("module");
|
Node *mnode = new_node("module");
|
||||||
Setattr(mnode,"name", mname);
|
Setattr(mnode,"name", mname);
|
||||||
|
Setattr(mnode,"options",$2);
|
||||||
appendChild(nint,mnode);
|
appendChild(nint,mnode);
|
||||||
Delete(mnode);
|
Delete(mnode);
|
||||||
appendChild(nint,firstChild($$));
|
appendChild(nint,firstChild($$));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue