sssd/0096-BUILD-Add-possibility-...

533 lines
17 KiB
Diff

From 263ae7b08d8ecacd7de671a7f2e6041966b4aff4 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn@redhat.com>
Date: Tue, 10 Feb 2015 17:22:03 +0100
Subject: [PATCH 96/99] BUILD: Add possibility to build python{2,3} bindings
Resolves:
https://fedorahosted.org/sssd/ticket/2574
Reviewed-by: Stephen Gallagher <sgallagh@redhat.com>
---
Makefile.am | 196 ++++++++++++++++++++++++++++++++---------
configure.ac | 49 +++++++++--
contrib/sssd.spec.in | 4 +
src/conf_macros.m4 | 39 +++++---
src/tests/pyhbac-test.py | 22 ++++-
src/tests/pysss_murmur-test.py | 22 ++++-
6 files changed, 267 insertions(+), 65 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 697ec14bf6340961fa93612472a54d3f83edfd6c..027d627586aad212ce7f62d6e6b01b7da2ea2126 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -301,12 +301,22 @@ noinst_LTLIBRARIES =
pkglib_LTLIBRARIES =
-if BUILD_PYTHON_BINDINGS
-pyexec_LTLIBRARIES = \
- pysss.la \
- pyhbac.la \
- pysss_murmur.la \
- pysss_nss_idmap.la
+if BUILD_PYTHON2_BINDINGS
+py2exec_LTLIBRARIES = \
+ _py2sss.la \
+ _py2hbac.la \
+ _py2sss_murmur.la \
+ _py2sss_nss_idmap.la \
+ $(NULL)
+endif
+
+if BUILD_PYTHON3_BINDINGS
+py3exec_LTLIBRARIES = \
+ _py3sss.la \
+ _py3hbac.la \
+ _py3sss_murmur.la \
+ _py3sss_nss_idmap.la \
+ $(NULL)
endif
dist_noinst_SCRIPTS = \
@@ -2833,58 +2843,109 @@ sssd_pac_plugin_la_LDFLAGS = \
-avoid-version \
-module
-if BUILD_PYTHON_BINDINGS
+# python[23] bindings
pysss_la_SOURCES = \
$(SSSD_TOOLS_OBJ) \
src/python/pysss.c
-pysss_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(PYTHON_CFLAGS)
-pysss_la_LIBADD = \
- $(SSSD_INTERNAL_LTLIBS) \
- $(PYTHON_BINDINGS_LIBS) \
- $(PYTHON_LIBS)
pysss_la_LDFLAGS = \
-avoid-version \
-module
+_py2sss_la_SOURCES = $(pysss_la_SOURCES)
+_py2sss_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON2_CFLAGS)
+_py2sss_la_LIBADD = \
+ $(SSSD_INTERNAL_LTLIBS) \
+ $(PYTHON_BINDINGS_LIBS) \
+ $(PYTHON2_LIBS)
+_py2sss_la_LDFLAGS = $(pysss_la_LDFLAGS)
+
+_py3sss_la_SOURCES = $(pysss_la_SOURCES)
+_py3sss_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON3_CFLAGS)
+_py3sss_la_LIBADD = \
+ $(SSSD_INTERNAL_LTLIBS) \
+ $(PYTHON_BINDINGS_LIBS) \
+ $(PYTHON3_LIBS)
+_py3sss_la_LDFLAGS = $(pysss_la_LDFLAGS)
+
+
pyhbac_la_SOURCES = \
src/python/pyhbac.c \
src/util/sss_python.c
-pyhbac_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(PYTHON_CFLAGS)
-pyhbac_la_LIBADD = \
- $(PYTHON_LIBS) \
- libipa_hbac.la
pyhbac_la_LDFLAGS = \
-avoid-version \
-module
+_py2hbac_la_SOURCES = $(pyhbac_la_SOURCES)
+_py2hbac_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON2_CFLAGS)
+_py2hbac_la_LIBADD = \
+ $(PYTHON2_LIBS) \
+ libipa_hbac.la
+_py2hbac_la_LDFLAGS = $(pyhbac_la_LDFLAGS)
+
+_py3hbac_la_SOURCES = $(pyhbac_la_SOURCES)
+_py3hbac_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON3_CFLAGS)
+_py3hbac_la_LIBADD = \
+ $(PYTHON3_LIBS) \
+ libipa_hbac.la
+_py3hbac_la_LDFLAGS = $(pyhbac_la_LDFLAGS)
+
+
pysss_murmur_la_SOURCES = \
src/python/pysss_murmur.c \
src/util/murmurhash3.c
-pysss_murmur_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(PYTHON_CFLAGS)
-pysss_murmur_la_LIBADD = \
- $(PYTHON_LIBS)
pysss_murmur_la_LDFLAGS = \
-avoid-version \
-module
+_py2sss_murmur_la_SOURCES = $(pysss_murmur_la_SOURCES)
+_py2sss_murmur_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON2_CFLAGS)
+_py2sss_murmur_la_LIBADD = \
+ $(PYTHON2_LIBS)
+_py2sss_murmur_la_LDFLAGS = $(pysss_murmur_la_LDFLAGS)
+
+_py3sss_murmur_la_SOURCES = $(pysss_murmur_la_SOURCES)
+_py3sss_murmur_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON3_CFLAGS)
+_py3sss_murmur_la_LIBADD = \
+ $(PYTHON3_LIBS)
+_py3sss_murmur_la_LDFLAGS = $(pysss_murmur_la_LDFLAGS)
+
+
pysss_nss_idmap_la_SOURCES = \
src/python/pysss_nss_idmap.c
-pysss_nss_idmap_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(PYTHON_CFLAGS)
-pysss_nss_idmap_la_LIBADD = \
- $(PYTHON_LIBS) \
- libsss_nss_idmap.la
pysss_nss_idmap_la_LDFLAGS = \
-avoid-version \
-module
-endif
+
+_py2sss_nss_idmap_la_SOURCES = $(pysss_nss_idmap_la_SOURCES)
+_py2sss_nss_idmap_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON2_CFLAGS)
+_py2sss_nss_idmap_la_LIBADD = \
+ $(PYTHON2_LIBS) \
+ libsss_nss_idmap.la
+_py2sss_nss_idmap_la_LDFLAGS = $(pysss_nss_idmap_la_LDFLAGS)
+
+_py3sss_nss_idmap_la_SOURCES = $(pysss_nss_idmap_la_SOURCES)
+_py3sss_nss_idmap_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(PYTHON3_CFLAGS)
+_py3sss_nss_idmap_la_LIBADD = \
+ $(PYTHON3_LIBS) \
+ libsss_nss_idmap.la
+_py3sss_nss_idmap_la_LDFLAGS = $(pysss_nss_idmap_la_LDFLAGS)
+# end of python[23] bindings
if BUILD_CIFS_IDMAP_PLUGIN
cifs_idmap_sss_la_SOURCES = \
@@ -3046,17 +3107,51 @@ SSSSCONFIG_MODULES =
endif
all-local: ldb_mod_test_dir $(SSSDCONFIG_MODULES)
-if BUILD_PYTHON_BINDINGS
- cd $(builddir)/src/config; $(PYTHON) setup.py build --build-base $(abs_builddir)/src/config
+if BUILD_PYTHON2_BINDINGS
+ cd $(builddir)/src/config; \
+ $(PYTHON2) setup.py build --build-base $(abs_builddir)/src/config
+endif
+if BUILD_PYTHON3_BINDINGS
+ cd $(builddir)/src/config; \
+ $(PYTHON3) setup.py build --build-base $(abs_builddir)/src/config
endif
install-exec-hook: installsssddirs
-if BUILD_PYTHON_BINDINGS
+if BUILD_PYTHON2_BINDINGS
if [ "$(DESTDIR)" = "" ]; then \
- cd $(builddir)/src/config; $(PYTHON) setup.py build --build-base $(abs_builddir)/src/config install $(DISTSETUPOPTS) --prefix=$(PYTHON_PREFIX) --record=$(abs_builddir)/src/config/.files; \
+ cd $(builddir)/src/config; \
+ $(PYTHON2) setup.py build --build-base $(abs_builddir)/src/config \
+ install $(DISTSETUPOPTS) --prefix=$(PYTHON2_PREFIX) \
+ --record=$(abs_builddir)/src/config/.files2; \
else \
- cd $(builddir)/src/config; $(PYTHON) setup.py build --build-base $(abs_builddir)/src/config install $(DISTSETUPOPTS) --prefix=$(PYTHON_PREFIX) --root=$(DESTDIR) --record=$(abs_builddir)/src/config/.files; \
+ cd $(builddir)/src/config; \
+ $(PYTHON2) setup.py build --build-base $(abs_builddir)/src/config \
+ install $(DISTSETUPOPTS) --prefix=$(PYTHON2_PREFIX) \
+ --record=$(abs_builddir)/src/config/.files2 --root=$(DESTDIR); \
fi
+ cd $(DESTDIR)$(py2execdir) && \
+ $(LN_S) _py2sss.so pysss.so ; \
+ $(LN_S) _py2hbac.so pyhbac.so ; \
+ $(LN_S) _py2sss_murmur.so pysss_murmur.so ; \
+ $(LN_S) _py2sss_nss_idmap.so pysss_nss_idmap.so
+endif
+if BUILD_PYTHON3_BINDINGS
+ if [ "$(DESTDIR)" = "" ]; then \
+ cd $(builddir)/src/config; \
+ $(PYTHON3) setup.py build --build-base $(abs_builddir)/src/config \
+ install $(DISTSETUPOPTS) --prefix=$(PYTHON3_PREFIX) \
+ --record=$(abs_builddir)/src/config/.files3; \
+ else \
+ cd $(builddir)/src/config; \
+ $(PYTHON3) setup.py build --build-base $(abs_builddir)/src/config \
+ install $(DISTSETUPOPTS) --prefix=$(PYTHON3_PREFIX) \
+ --record=$(abs_builddir)/src/config/.files3 --root=$(DESTDIR); \
+ fi
+ cd $(DESTDIR)$(py3execdir) && \
+ $(LN_S) _py3sss.so pysss.so ; \
+ $(LN_S) _py3hbac.so pyhbac.so ; \
+ $(LN_S) _py3sss_murmur.so pysss_murmur.so ; \
+ $(LN_S) _py3sss_nss_idmap.so pysss_nss_idmap.so
endif
for doc in $(SSSD_DOCS); do \
$(MKDIR_P) $$doc $(DESTDIR)/$(docdir); \
@@ -3090,16 +3185,20 @@ install-data-hook:
fi
uninstall-hook:
- if [ -f $(abs_builddir)/src/config/.files ]; then \
- cat $(abs_builddir)/src/config/.files | xargs -iq rm -f $(DESTDIR)/q; \
- rm $(abs_builddir)/src/config/.files ; \
+ if [ -f $(abs_builddir)/src/config/.files2 ]; then \
+ cat $(abs_builddir)/src/config/.files2 | xargs -iq rm -f $(DESTDIR)/q; \
+ rm $(abs_builddir)/src/config/.files2 ; \
+ fi
+ if [ -f $(abs_builddir)/src/config/.files3 ]; then \
+ cat $(abs_builddir)/src/config/.files3 | xargs -iq rm -f $(DESTDIR)/q; \
+ rm $(abs_builddir)/src/config/.files3 ; \
fi
for doc in $(SSSD_DOCS); do \
rm -Rf $(DESTDIR)/$(docdir)/$$doc; \
done;
clean-local:
-if BUILD_PYTHON_BINDINGS
+if BUILD_PYTHON2_BINDINGS
if [ ! $(srcdir)/src/config/SSSDConfig/ipachangeconf.py -ef $(builddir)/src/config/SSSDConfig/ipachangeconf.py ]; then \
rm -f $(builddir)/src/config/SSSDConfig/ipachangeconf.py ; \
fi
@@ -3110,7 +3209,20 @@ if BUILD_PYTHON_BINDINGS
rm -f $(builddir)/src/config/SSSDConfig/*.pyc
- cd $(builddir)/src/config; $(PYTHON) setup.py build --build-base $(abs_builddir)/src/config clean --all
+ cd $(builddir)/src/config; $(PYTHON2) setup.py build --build-base $(abs_builddir)/src/config clean --all
+endif
+if BUILD_PYTHON3_BINDINGS
+ if [ ! $(srcdir)/src/config/SSSDConfig/ipachangeconf.py -ef $(builddir)/src/config/SSSDConfig/ipachangeconf.py ]; then \
+ rm -f $(builddir)/src/config/SSSDConfig/ipachangeconf.py ; \
+ fi
+
+ if [ ! $(srcdir)/src/config/SSSDConfig/ipachangeconf.py -ef $(builddir)/src/config/SSSDConfig/ipachangeconf.py ]; then \
+ rm -f $(builddir)/src/config/SSSDConfig/sssd_upgrade_config.py ; \
+ fi
+
+ rm -f $(builddir)/src/config/SSSDConfig/__pycache__/*.pyc
+
+ cd $(builddir)/src/config; $(PYTHON3) setup.py build --build-base $(abs_builddir)/src/config clean --all
endif
for doc in $(SSSD_DOCS); do \
rm -Rf $$doc; \
diff --git a/configure.ac b/configure.ac
index f72e448528edcffb855504a38a179c400f98ac42..e30405f3a17ffd2c9899b6eb17af85ec9bc15234 100644
--- a/configure.ac
+++ b/configure.ac
@@ -117,7 +117,8 @@ WITH_KRB5_PLUGIN_PATH
WITH_KRB5_RCACHE_DIR
WITH_KRB5AUTHDATA_PLUGIN_PATH
WITH_KRB5_CONF
-WITH_PYTHON_BINDINGS
+WITH_PYTHON2_BINDINGS
+WITH_PYTHON3_BINDINGS
WITH_CIFS_PLUGIN_PATH
WITH_SELINUX
WITH_NSCD
@@ -247,16 +248,52 @@ AM_CONDITIONAL([HAVE_PROFILE_CATALOGS], [test "x$HAVE_PROFILE_CATALOGS" != "x"])
AM_CONDITIONAL([HAVE_MANPAGES], [test "x$HAVE_MANPAGES" != "x"])
AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
-if test x$HAVE_PYTHON_BINDINGS != x; then
+if test x$HAVE_PYTHON2_BINDINGS = x1; then
+ AC_PATH_PROG(PYTHON2, python2)
+ PYTHON=$PYTHON2
AM_PATH_PYTHON([2.6])
- AM_PYTHON_CONFIG([python])
+ AM_PYTHON_CONFIG([python2])
AM_CHECK_PYTHON_HEADERS([],
- AC_MSG_ERROR([Could not find python headers]))
+ AC_MSG_ERROR([Could not find python2 headers]))
AM_CHECK_PYTHON_COMPAT
- AC_SUBST([PYTHON_CFLAGS])
- AC_SUBST([PYTHON_LIBS])
+
+ AC_SUBST([py2execdir], [$pyexecdir])
+ AC_SUBST([python2dir], [$pythondir])
+ AC_SUBST([PYTHON2_CFLAGS], [$PYTHON_CFLAGS])
+ AC_SUBST([PYTHON2_LIBS], [$PYTHON_LIBS])
+ AC_SUBST([PYTHON2_INCLUDES], [$PYTHON_INCLUDES])
+ AC_SUBST([PYTHON2_VERSION], [$PYTHON_VERSION])
+ AC_SUBST([PYTHON2_PREFIX], [$PYTHON_PREFIX])
+ AC_SUBST([PYTHON2_EXEC_PREFIX], [$PYTHON_EXEC_PREFIX])
+
+ SSS_CLEAN_PYTHON_VARIABLES
fi
+if test x$HAVE_PYTHON3_BINDINGS = x1; then
+ AC_PATH_PROG(PYTHON3, python3)
+ PYTHON=$PYTHON3
+ AM_PATH_PYTHON([3.3])
+ AM_PYTHON_CONFIG([python3])
+ AM_CHECK_PYTHON_HEADERS([],
+ AC_MSG_ERROR([Could not find python3 headers]))
+ AM_CHECK_PYTHON_COMPAT
+
+ AC_SUBST([py3execdir], [$pyexecdir])
+ AC_SUBST([python3dir], [$pythondir])
+ AC_SUBST([PYTHON3_CFLAGS], [$PYTHON_CFLAGS])
+ AC_SUBST([PYTHON3_LIBS], [$PYTHON_LIBS])
+ AC_SUBST([PYTHON3_INCLUDES], [$PYTHON_INCLUDES])
+ AC_SUBST([PYTHON3_VERSION], [$PYTHON_VERSION])
+ AC_SUBST([PYTHON3_PREFIX], [$PYTHON_PREFIX])
+ AC_SUBST([PYTHON3_EXEC_PREFIX], [$PYTHON_EXEC_PREFIX])
+
+ SSS_CLEAN_PYTHON_VARIABLES
+fi
+
+AM_CONDITIONAL([BUILD_PYTHON_BINDINGS],
+ [test x"$with_python2_bindings" = xyes \
+ -o x"$with_python3_bindings" = xyes])
+
if test x$HAVE_SELINUX != x; then
AM_CHECK_SELINUX
AM_CHECK_SELINUX_LOGIN_DIR
diff --git a/contrib/sssd.spec.in b/contrib/sssd.spec.in
index 66c209a4619b942ca262e4a4f2bd43731beae788..847b6cf2a36f5323cdfad77dd5ef5772b261c2b9 100644
--- a/contrib/sssd.spec.in
+++ b/contrib/sssd.spec.in
@@ -781,10 +781,12 @@ rm -rf $RPM_BUILD_ROOT
%files -n python-sss
%defattr(-,root,root,-)
%{python_sitearch}/pysss.so
+%{python_sitearch}/_py2sss.so
%files -n python-sss-murmur
%defattr(-,root,root,-)
%{python_sitearch}/pysss_murmur.so
+%{python_sitearch}/_py2sss_murmur.so
%files -n libsss_idmap
%defattr(-,root,root,-)
@@ -825,10 +827,12 @@ rm -rf $RPM_BUILD_ROOT
%files -n python-libsss_nss_idmap
%defattr(-,root,root,-)
%{python_sitearch}/pysss_nss_idmap.so
+%{python_sitearch}/_py2sss_nss_idmap.so
%files -n python-libipa_hbac
%defattr(-,root,root,-)
%{python_sitearch}/pyhbac.so
+%{python_sitearch}/_py2hbac.so
%files libwbclient
%defattr(-,root,root,-)
diff --git a/src/conf_macros.m4 b/src/conf_macros.m4
index 027490e524f321b9d444395e788aa7476dd916e9..ff49f84421ac6be8a2a5f5840283485ea16d671d 100644
--- a/src/conf_macros.m4
+++ b/src/conf_macros.m4
@@ -360,21 +360,38 @@ AC_DEFUN([WITH_KRB5_CONF],
AC_DEFINE_UNQUOTED([KRB5_CONF_PATH], ["$KRB5_CONF_PATH"], [KRB5 configuration file])
])
-AC_DEFUN([WITH_PYTHON_BINDINGS],
- [ AC_ARG_WITH([python-bindings],
- [AC_HELP_STRING([--with-python-bindings],
- [Whether to build python bindings [yes]]
- )
+AC_DEFUN([WITH_PYTHON2_BINDINGS],
+ [ AC_ARG_WITH([python2-bindings],
+ [AC_HELP_STRING([--with-python2-bindings],
+ [Whether to build python2 bindings [yes]])
],
[],
- with_python_bindings=yes
+ [with_python2_bindings=yes]
)
- if test x"$with_python_bindings" = xyes; then
- HAVE_PYTHON_BINDINGS=1
- AC_SUBST(HAVE_PYTHON_BINDINGS)
- AC_DEFINE_UNQUOTED(HAVE_PYTHON_BINDINGS, 1, [Build with python bindings])
+ if test x"$with_python2_bindings" = xyes; then
+ AC_SUBST([HAVE_PYTHON2_BINDINGS], [1])
+ AC_DEFINE_UNQUOTED([HAVE_PYTHON2_BINDINGS], [1],
+ [Build with python2 bindings])
fi
- AM_CONDITIONAL([BUILD_PYTHON_BINDINGS], [test x"$with_python_bindings" = xyes])
+ AM_CONDITIONAL([BUILD_PYTHON2_BINDINGS],
+ [test x"$with_python2_bindings" = xyes])
+ ])
+
+AC_DEFUN([WITH_PYTHON3_BINDINGS],
+ [ AC_ARG_WITH([python3-bindings],
+ [AC_HELP_STRING([--with-python3-bindings],
+ [Whether to build python3 bindings [yes]])
+ ],
+ [],
+ [with_python3_bindings=no]
+ )
+ if test x"$with_python3_bindings" = xyes; then
+ AC_SUBST([HAVE_PYTHON3_BINDINGS], [1])
+ AC_DEFINE_UNQUOTED([HAVE_PYTHON3_BINDINGS], [1],
+ [Build with python3 bindings])
+ fi
+ AM_CONDITIONAL([BUILD_PYTHON3_BINDINGS],
+ [test x"$with_python3_bindings" = xyes])
])
AC_DEFUN([WITH_SELINUX],
diff --git a/src/tests/pyhbac-test.py b/src/tests/pyhbac-test.py
index 0abc5703dedb2466b4d99718b5b524951b8af95c..83958d7bffcccea375c79166ee7dfca6f9956cff 100755
--- a/src/tests/pyhbac-test.py
+++ b/src/tests/pyhbac-test.py
@@ -6,10 +6,9 @@ import sys
import os
import copy
import sys
+import errno
-srcdir = os.getenv('builddir')
-if not srcdir:
- srcdir = "."
+srcdir = os.getenv('builddir') or "."
MODPATH = srcdir + "/.libs" #FIXME - is there a way to get this from libtool?
if sys.version_info[0] > 2:
@@ -41,6 +40,23 @@ class PyHbacImport(unittest.TestCase):
def testImport(self):
" Import the module and assert it comes from tree "
try:
+ cwd_backup = os.getcwd()
+
+ try:
+ os.unlink(MODPATH + "/pyhbac.so")
+ except OSError as e:
+ if e.errno == errno.ENOENT:
+ pass
+ else:
+ raise e
+
+ os.chdir(MODPATH)
+ if sys.version_info[0] > 2:
+ os.symlink("_py3hbac.so", "pyhbac.so")
+ else:
+ os.symlink("_py2hbac.so", "pyhbac.so")
+ os.chdir(cwd_backup)
+
import pyhbac
except ImportError as e:
print("Could not load the pyhbac module. Please check if it is compiled", file=sys.stderr)
diff --git a/src/tests/pysss_murmur-test.py b/src/tests/pysss_murmur-test.py
index 0b28f45e67cb4b033516a585867085dba7b412e6..faa8bb2d33b9d94d380b8f7045ba45aa06ac4793 100755
--- a/src/tests/pysss_murmur-test.py
+++ b/src/tests/pysss_murmur-test.py
@@ -23,10 +23,9 @@ import unittest
import sys
import os
import copy
+import errno
-srcdir = os.getenv('builddir')
-if not srcdir:
- srcdir = "."
+srcdir = os.getenv('builddir') or "."
MODPATH = srcdir + "/.libs" #FIXME - is there a way to get this from libtool?
def compat_assertItemsEqual(this, expected_seq, actual_seq, msg=None):
@@ -57,6 +56,23 @@ class PySssMurmurImport(unittest.TestCase):
def testImport(self):
" Import the module and assert it comes from tree "
try:
+ cwd_backup = os.getcwd()
+
+ try:
+ os.unlink(MODPATH + "/pysss_murmur.so")
+ except OSError as e:
+ if e.errno == errno.ENOENT:
+ pass
+ else:
+ raise e
+
+ os.chdir(MODPATH)
+ if sys.version_info[0] > 2:
+ os.symlink("_py3sss_murmur.so", "pysss_murmur.so")
+ else:
+ os.symlink("_py2sss_murmur.so", "pysss_murmur.so")
+ os.chdir(cwd_backup)
+
import pysss_murmur
except ImportError as e:
print("Could not load the pysss_murmur module. Please check if it is compiled", file=sys.stderr)
--
2.4.0