[Jppy-commit] r313 - in jppy/trunk: . jpilot_plugins
jppy-commit@zanu.org.uk
jppy-commit@zanu.org.uk
Wed Jun 4 01:24:37 BST 2008
Author: nicholas
Date: 2008-06-04 01:24:37 +0100 (Wed, 04 Jun 2008)
New Revision: 313
Modified:
jppy/trunk/ChangeLog
jppy/trunk/SConstruct
jppy/trunk/jpilot_plugins/jppy.c
Log:
Try to tidy up library linking. Especially avoid linking python modules to libpython.
Modified: jppy/trunk/ChangeLog
===================================================================
--- jppy/trunk/ChangeLog 2008-04-18 13:29:13 UTC (rev 312)
+++ jppy/trunk/ChangeLog 2008-06-04 00:24:37 UTC (rev 313)
@@ -1,3 +1,11 @@
+2008-06-04 Nicholas Piper <nicholas@zanu.org.uk>
+
+ * SConstruct: Avoid linking python modules to the python library
+ (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=445379)
+
+ * jpilot_plugins/jppy.c (plugin_startup): Put dlopen() back -
+ seems to be needed for init_pygobject() to work
+
2008-4-18 martin f. krafft <madduck@madduck.net>
* Remove libpython dependency (Ubuntu bug #184505, Debian bug
Modified: jppy/trunk/SConstruct
===================================================================
--- jppy/trunk/SConstruct 2008-04-18 13:29:13 UTC (rev 312)
+++ jppy/trunk/SConstruct 2008-06-04 00:24:37 UTC (rev 313)
@@ -37,11 +37,10 @@
opts.Add(PackageOption('rpathoverride','Link with an rpath','no'))
opts.Add(BoolOption('test','Do you want to run the tests?','yes'))
opts.Add(BoolOption('profile','Do you want compile with profiling?','no'))
+opts.Add('python_version','Python library version', sys.version[0:3])
env = Environment(options=opts,
CCFLAGS=['-g'],
-# '-DPYTHON_SHARED_LIB=\\"${python_version}\\"'],
- LINKFLAGS=['-L$pisock_library'],
CPPPATH=['${mx_datetime_includes}',
'${pisock_includes}',
'${python_includes}',
@@ -93,6 +92,9 @@
if not config.CheckPKG('pygtk-2.0 >= 2.4.0'):
print 'pygtk-2.0 >= 2.4.0 not found.'
Exit(1)
+
+env.ParseConfig('pkg-config --cflags --libs glib-2.0')
+env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
#standard stuff
for hdr in [['Python.h','mx/mxDateTime.h']]:
@@ -100,15 +102,6 @@
print "You need '%s' to compile this program" % hdr
Exit(1)
-if not config.CheckLibWithHeader('libpisock',
- 'pi-socket.h','C','pi_socket_connected(0);'):
- print "You need libpisock to compile this program"
- Exit(1)
-
-env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
-env.ParseConfig('pkg-config --cflags --libs glib-2.0')
-env.ParseConfig('pkg-config --cflags --libs pygtk-2.0')
-
vars = distutils.sysconfig.get_config_vars('CC', 'CXX', 'OPT', 'BASECFLAGS',
'CCSHARED', 'LDSHARED', 'SO')
for i in range(len(vars)):
@@ -144,35 +137,52 @@
env['jpilot_plugin_prefix'][1:])
######### Jpilot
+jpilotEnv = env.Clone()
+jpilotConfig = jpilotEnv.Configure()
+if not jpilotConfig.CheckLibWithHeader('libpisock',
+ 'pi-socket.h','C','pi_socket_connected(0);'):
+ print "You need libpisock to compile this program"
+ Exit(1)
+jpilotConfig.Finish()
jpilot_sources = ['log', 'libplugin', 'utils', 'prefs',
'plugins', 'sync', 'japanese', 'cp1250',
'russian', 'password', 'category', 'otherconv']
# a bit of a hack. Scons doesn't support shared objects in static libraries.
-libjpilot = env.StaticLibrary(target='jpilot_src/jppy_jpilot',
- source = ["jpilot_src/%s.c" % x for x in jpilot_sources],
- CCFLAGS="$CCFLAGS -fPIC")
+libjpilot = jpilotEnv.StaticLibrary(target='jpilot_src/jppy_jpilot',
+ source = ["jpilot_src/%s.c" % x for x in jpilot_sources],
+ CCFLAGS="$CCFLAGS -fPIC")
libjpilot[0].attributes.shared = True
######### Jppy
-jppymodule = env.SharedLibrary(target = 'jppy/__jpilotmodule',
- source = ['python_module_src/jpilot.i',
- 'python_module_src/move_into_libpisock.c',
- 'python_module_src/jpilot_helpers.c',
- libjpilot] +
- glob.glob("python_module_src/pytype*.c") +
- ["libversit_src/%s" % x for x in ["vcc.y",
- "vobject.c",
- "vcaltmp.c"]],
- SHLIBPREFIX="",
- SHLIBSUFFIX=pyso_ext,
- SWIGFLAGS="-python -outdir ./jppy/")
+jppyEnv = jpilotEnv.Clone()
+jppyEnv.ParseConfig('pkg-config --cflags --libs pygtk-2.0')
+jppymodule = jppyEnv.SharedLibrary(target = 'jppy/__jpilotmodule',
+ source = ['python_module_src/jpilot.i',
+ 'python_module_src/move_into_libpisock.c',
+ 'python_module_src/jpilot_helpers.c',
+ libjpilot] +
+ glob.glob("python_module_src/pytype*.c") +
+ ["libversit_src/%s" % x for x in ["vcc.y",
+ "vobject.c",
+ "vcaltmp.c"]],
+ SHLIBPREFIX="",
+ SHLIBSUFFIX=pyso_ext,
+ SWIGFLAGS="-python -outdir ./jppy/")
######### Jpilot Plugins
pluginEnv = env.Clone(SHLIBSUFFIX=pyso_ext,
SHLIBPREFIX="lib")
pluginEnv.Append(CPPPATH=['#/jpilot_src'])
-pluginEnv.Append(CPPDEFINES='JPILOT_PLUGIN_PREFIX=\\"$jpilot_plugin_prefix\\"')
+pluginEnv.Append(CPPDEFINES=['JPILOT_PLUGIN_PREFIX=\\"$jpilot_plugin_prefix\\"',
+ 'PYTHON_SHARED_LIB=\\"libpython${python_version}.so\\"'])
+pluginConfig = pluginEnv.Configure()
+if not pluginConfig.CheckLibWithHeader("libpython%s" % env['python_version'],
+ 'Python.h','C','PyErr_Clear();'):
+ print "You need libpython%s.so to compile this program" % env['python_version']
+ Exit(1)
+pluginConfig.Finish()
+pluginEnv.Append(LINKFLAGS=distutils.sysconfig.get_config_var('LINKFORSHARED'))
jpilot_plugins = []
for source in glob.glob('jpilot_plugins/*.c'):
jpilot_plugins.append(pluginEnv.SharedLibrary(
Modified: jppy/trunk/jpilot_plugins/jppy.c
===================================================================
--- jppy/trunk/jpilot_plugins/jppy.c 2008-04-18 13:29:13 UTC (rev 312)
+++ jppy/trunk/jpilot_plugins/jppy.c 2008-06-04 00:24:37 UTC (rev 313)
@@ -207,28 +207,33 @@
jp_init();
jp_logf(JP_LOG_INFO, "jppy: Starting...\n");
-// if (!dlopen (PYTHON_SHARED_LIB, RTLD_NOW | RTLD_GLOBAL)) {
-// jp_logf(JP_LOG_FATAL, "\n%s\n", dlerror());
-// python_is_working = 0;
-// return 0;
-// }
-// jp_logf(JP_LOG_DEBUG, "jppy: Opened python library\n");
-
+ // we seem to have to do this, as well as just linking this plugin
+ // to the python library, otherwise init_pygobject() causes the
+ // plugin to stop-and-exit. If we only do this and don't link,
+ // then we get
+ // error [/usr/lib/jpilot/plugins/libjppy.so: undefined symbol: PyExc_ImportError]
+ if (!dlopen (PYTHON_SHARED_LIB, RTLD_NOW | RTLD_GLOBAL)) {
+ jp_logf(JP_LOG_FATAL, "\n%s\n", dlerror());
+ python_is_working = 0;
+ return 0;
+ }
+ jp_logf(JP_LOG_DEBUG, "jppy: Opened python library\n");
+
Py_SetProgramName("jpilot");
Py_Initialize();
PySys_SetArgv(1, python_argv);
jp_logf(JP_LOG_DEBUG, "jppy: Initialized python\n");
- init_pygobject();
- jp_logf(JP_LOG_DEBUG, "jppy: Initialized pygobject\n");
-
PyRun_SimpleString("import os");
PyRun_SimpleString("import sys");
jp_logf(JP_LOG_DEBUG, "jppy: Imported os, sys\n");
+ init_pygobject();
+ jp_logf(JP_LOG_DEBUG, "jppy: Initialized pygobject\n");
+
PyRun_SimpleString("sys.path.insert(0,'%s/.jpilot/python' % (os.getenv('JPILOT_HOME') or os.getenv('HOME')))");
snprintf(python_line, 254, "sys.path.insert(0,'%s')", JPILOT_PLUGIN_PREFIX);
PyRun_SimpleString(python_line);
More information about the Jppy-commit
mailing list