talloc: use the system pytalloc-util for python3 as well
authorAndrew Bartlett <abartlet@samba.org>
Mon, 6 Mar 2017 06:25:13 +0000 (19:25 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 10 Mar 2017 06:31:10 +0000 (07:31 +0100)
This involves installing a .pc file for the python3 library as well

To get the .pc file generated and installed is quite a mission, we
have to rework the talloc build system to ensure that the second 'env'
created for EXTRA_PYTHON has everything set up on it, the
TALLOC_VERSION in particular.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Incorportaing fixes by Petr Viktorin <pviktori@redhat.com>

Signed-off-by: Petr Viktorin <pviktori@redhat.com>
buildtools/wafsamba/pkgconfig.py
buildtools/wafsamba/samba_python.py
buildtools/wafsamba/wafsamba.py
lib/talloc/pytalloc-util.pc.in
lib/talloc/wscript

index 25cec781bc045a53eb18adba8657079ba7dcd994..999bad474a38c570db12c61d3726c25730ef9156 100644 (file)
@@ -38,16 +38,20 @@ def subst_at_vars(task):
     return 0
 
 
-def PKG_CONFIG_FILES(bld, pc_files, vnum=None):
+def PKG_CONFIG_FILES(bld, pc_files, vnum=None, extra_name=None):
     '''install some pkg_config pc files'''
     dest = '${PKGCONFIGDIR}'
     dest = bld.EXPAND_VARIABLES(dest)
     for f in TO_LIST(pc_files):
-        base=os.path.basename(f)
+        if extra_name:
+            target = f.split('.pc')[0] + extra_name + ".pc"
+        else:
+            target = f
+        base=os.path.basename(target)
         t = bld.SAMBA_GENERATOR('PKGCONFIG_%s' % base,
                                 rule=subst_at_vars,
                                 source=f+'.in',
-                                target=f)
+                                target=target)
         bld.add_manual_dependency(bld.path.find_or_declare(f), bld.env['PREFIX'])
         t.vars = []
         if t.env.RPATH_ON_INSTALL:
@@ -58,7 +62,7 @@ def PKG_CONFIG_FILES(bld, pc_files, vnum=None):
             t.env.PACKAGE_VERSION = vnum
         for v in [ 'PREFIX', 'EXEC_PREFIX', 'LIB_RPATH' ]:
             t.vars.append(t.env[v])
-        bld.INSTALL_FILES(dest, f, flat=True, destname=base)
+        bld.INSTALL_FILES(dest, target, flat=True, destname=base)
 Build.BuildContext.PKG_CONFIG_FILES = PKG_CONFIG_FILES
 
 
index 057a0176e155d3ba3052a85741254cecaeaeae46..bba059edf986b8fdae6fe6a123992f1ca80dc8b5 100644 (file)
@@ -75,6 +75,8 @@ def _check_python_headers(conf, mandatory):
         conf.env['PYTHON_SO_ABI_FLAG'] = abi_pattern % ''
     else:
         conf.env['PYTHON_SO_ABI_FLAG'] = ''
+    conf.env['PYTHON_LIBNAME_SO_ABI_FLAG'] = (
+        conf.env['PYTHON_SO_ABI_FLAG'].replace('_', '-'))
 
 
 def SAMBA_PYTHON(bld, name,
index 4a47dbffe02cf78396ec50790a34b9829d66a834..137cb0e4330ab86a5631630ee40374ac116bc1ee 100644 (file)
@@ -144,7 +144,7 @@ def SAMBA_LIBRARY(bld, libname, source,
     '''define a Samba library'''
 
     if pyembed and bld.env['IS_EXTRA_PYTHON']:
-        public_headers = pc_files = None
+        public_headers = None
 
     if private_library and public_headers:
         raise Utils.WafError("private library '%s' must not have public header files" %
@@ -225,7 +225,7 @@ def SAMBA_LIBRARY(bld, libname, source,
         if vnum is None and soname is None:
             raise Utils.WafError("public library '%s' must have a vnum" %
                     libname)
-        if pc_files is None and not bld.env['IS_EXTRA_PYTHON']:
+        if pc_files is None:
             raise Utils.WafError("public library '%s' must have pkg-config file" %
                        libname)
         if public_headers is None and not bld.env['IS_EXTRA_PYTHON']:
@@ -328,7 +328,10 @@ def SAMBA_LIBRARY(bld, libname, source,
         t.link_name = link_name
 
     if pc_files is not None and not private_library:
-        bld.PKG_CONFIG_FILES(pc_files, vnum=vnum)
+        if pyembed and bld.env['IS_EXTRA_PYTHON']:
+            bld.PKG_CONFIG_FILES(pc_files, vnum=vnum, extra_name=bld.env['PYTHON_SO_ABI_FLAG'])
+        else:
+            bld.PKG_CONFIG_FILES(pc_files, vnum=vnum)
 
     if (manpages is not None and 'XSLTPROC_MANPAGES' in bld.env and
         bld.env['XSLTPROC_MANPAGES']):
index b87c94edf20c5325d3cde598bfa914bd478ed815..06f83e26aa43b3eafd0364c1603673742c2de63b 100644 (file)
@@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@
 
-Name: pytalloc-util
+Name: pytalloc-util@PYTHON_SO_ABI_FLAG@
 Description: Utility functions for using talloc objects with Python
 Version: @TALLOC_VERSION@
-Libs: @LIB_RPATH@ -L${libdir} -lpytalloc-util@PYTHON_SO_ABI_FLAG@
+Libs: @LIB_RPATH@ -L${libdir} -lpytalloc-util@PYTHON_LIBNAME_SO_ABI_FLAG@
 Cflags: -I${includedir}
 URL: http://talloc.samba.org/
index 7f9bad743555b442be30a91bf50cb361bfa0de18..af939104a173208a0e9206b721a514d5b752a655 100644 (file)
@@ -48,20 +48,24 @@ def configure(conf):
 
     conf.env.disable_python = getattr(Options.options, 'disable_python', False)
 
-    if not conf.env.standalone_talloc:
-        if conf.CHECK_BUNDLED_SYSTEM_PKG('talloc', minversion=VERSION,
-                                     implied_deps='replace'):
-            conf.define('USING_SYSTEM_TALLOC', 1)
-        if conf.CHECK_BUNDLED_SYSTEM_PKG('pytalloc-util', minversion=VERSION,
-                                     implied_deps='talloc replace'):
-            conf.define('USING_SYSTEM_PYTALLOC_UTIL', 1)
-
     conf.env.TALLOC_COMPAT1 = False
     if conf.env.standalone_talloc:
         conf.env.TALLOC_COMPAT1 = Options.options.TALLOC_COMPAT1
+        conf.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig'
+        conf.env.TALLOC_VERSION = VERSION
 
     conf.CHECK_XSLTPROC_MANPAGES()
 
+    conf.CHECK_HEADERS('sys/auxv.h')
+    conf.CHECK_FUNCS('getauxval')
+
+    conf.SAMBA_CONFIG_H()
+
+    conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
+
+    # We need to set everything non-python up before here, because
+    # SAMBA_CHECK_PYTHON makes a copy of conf and we need it set up correctly
+
     if not conf.env.disable_python:
         # also disable if we don't have the python libs installed
         conf.SAMBA_CHECK_PYTHON(mandatory=False, version=(2,4,2))
@@ -70,20 +74,32 @@ def configure(conf):
             Logs.warn('Disabling pytalloc-util as python devel libs not found')
             conf.env.disable_python = True
 
-    conf.CHECK_HEADERS('sys/auxv.h')
-    conf.CHECK_FUNCS('getauxval')
+    if not conf.env.standalone_talloc:
+        if conf.CHECK_BUNDLED_SYSTEM_PKG('talloc', minversion=VERSION,
+                                     implied_deps='replace'):
+            conf.define('USING_SYSTEM_TALLOC', 1)
 
-    conf.SAMBA_CONFIG_H()
+        using_system_pytalloc_util = True
+        if not conf.CHECK_BUNDLED_SYSTEM_PKG('pytalloc-util', minversion=VERSION,
+                                             implied_deps='talloc replace'):
+            using_system_pytalloc_util = False
 
-    conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
+        # We need to get a pytalloc-util for all the python versions
+        # we are building for
+        if conf.env['EXTRA_PYTHON']:
+            name = 'pytalloc-util' + conf.all_envs['extrapython']['PYTHON_SO_ABI_FLAG']
+            if not conf.CHECK_BUNDLED_SYSTEM_PKG(name, minversion=VERSION,
+                                                 implied_deps='talloc replace'):
+                using_system_pytalloc_util = False
+
+        if using_system_pytalloc_util:
+            conf.define('USING_SYSTEM_PYTALLOC_UTIL', 1)
 
 
 def build(bld):
     bld.RECURSE('lib/replace')
 
     if bld.env.standalone_talloc:
-        bld.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig'
-        bld.env.TALLOC_VERSION = VERSION
         private_library = False
 
         # should we also install the symlink to libtalloc1.so here?