From: Andrew Bartlett Date: Mon, 6 Mar 2017 06:25:13 +0000 (+1300) Subject: talloc: use the system pytalloc-util for python3 as well X-Git-Tag: tdb-1.3.13~581 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f5cafee0c7a96396798d2b229ff3f9dced1d74f3;p=thirdparty%2Fsamba.git talloc: use the system pytalloc-util for python3 as well 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 Reviewed-by: Douglas Bagnall Incorportaing fixes by Petr Viktorin Signed-off-by: Petr Viktorin --- diff --git a/buildtools/wafsamba/pkgconfig.py b/buildtools/wafsamba/pkgconfig.py index 25cec781bc0..999bad474a3 100644 --- a/buildtools/wafsamba/pkgconfig.py +++ b/buildtools/wafsamba/pkgconfig.py @@ -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 diff --git a/buildtools/wafsamba/samba_python.py b/buildtools/wafsamba/samba_python.py index 057a0176e15..bba059edf98 100644 --- a/buildtools/wafsamba/samba_python.py +++ b/buildtools/wafsamba/samba_python.py @@ -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, diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 4a47dbffe02..137cb0e4330 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -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']): diff --git a/lib/talloc/pytalloc-util.pc.in b/lib/talloc/pytalloc-util.pc.in index b87c94edf20..06f83e26aa4 100644 --- a/lib/talloc/pytalloc-util.pc.in +++ b/lib/talloc/pytalloc-util.pc.in @@ -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/ diff --git a/lib/talloc/wscript b/lib/talloc/wscript index 7f9bad74355..af939104a17 100644 --- a/lib/talloc/wscript +++ b/lib/talloc/wscript @@ -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?