1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/wscript_configure_system_heimdal
Joseph Sutton a3ee0ce255 wscript: Correctly determine dependencies for system Heimdal build
Previously, the call to CHECK_BUNDLED_SYSTEM() in
check_system_heimdal_lib() could have us pick up MIT Kerberos headers
when we should only be using system Heimdal headers. Now, we just
perform an explicit check for the functions we require, which should
avoid any use of the MIT libraries.

We also remove some library checks for Heimdal components that we don't
use directly, restricting the checks to only the functions we need.

Finally, we no longer need to recurse into third_party/heimdal_build
when performing a system Heimdal build.

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2022-11-08 02:39:37 +00:00

64 lines
2.5 KiB
Plaintext

import sys
from waflib import Logs
conf.RECURSE('third_party/heimdal_build')
heimdal_includedirs = []
heimdal_libdirs = []
krb5_config = conf.find_program("krb5-config.heimdal", var="HEIMDAL_KRB5_CONFIG")
if not krb5_config:
krb5_config = conf.find_program("krb5-config", var="HEIMDAL_KRB5_CONFIG")
if krb5_config:
# Not ideal, but seems like the best way to get at these paths:
f = open(krb5_config[0], 'r')
try:
for l in f:
if l.startswith("libdir="):
heimdal_libdirs.append(l.strip()[len("libdir="):])
elif l.startswith("includedir="):
include_path = l.strip()[len("includedir="):]
heimdal_includedirs.append(include_path)
conf.ADD_EXTRA_INCLUDES(include_path)
conf.define('HEIMDAL_KRB5_TYPES_PATH',
include_path + "/krb5-types.h")
finally:
f.close()
def check_system_heimdal_lib(name, functions='', headers=''):
# Only use system library if the user requested the bundled one not be
# used.
if conf.LIB_MAY_BE_BUNDLED(name):
return False
setattr(conf.env, "CPPPATH_%s" % name.upper(), heimdal_includedirs)
setattr(conf.env, "LIBPATH_%s" % name.upper(), heimdal_libdirs)
if not conf.CHECK_FUNCS_IN(functions, name, headers=headers, empty_decl=False, set_target=True):
return False
conf.define('USING_SYSTEM_%s' % name.upper(), 1)
return True
check_system_heimdal_lib("com_err", "com_right_r com_err", "com_err.h")
# Make sure HAVE_CONFIG_H is unset, as the system Heimdal headers use it
# and include config.h if it is set, resulting in failure (since config.h
# doesn't yet exist)
DEFINES = list(conf.env.DEFINES)
conf.undefine("HAVE_CONFIG_H")
while "HAVE_CONFIG_H=1" in conf.env.DEFINES:
conf.env.DEFINES.remove("HAVE_CONFIG_H=1")
try:
check_system_heimdal_lib("asn1", "decode_Ticket", "krb5_asn1.h")
if check_system_heimdal_lib("krb5", "krb5_anyaddr", "krb5.h"):
conf.CHECK_FUNCS_IN('krb5_free_unparsed_name', 'krb5', headers="krb5.h")
check_system_heimdal_lib("gssapi", "gss_oid_to_name", "gssapi.h")
finally:
conf.env.DEFINES = DEFINES
# With the proper checks in place we should be able to build against the system libtommath.
#if conf.CHECK_BUNDLED_SYSTEM('tommath', checkfunctions='mp_init', headers='tommath.h'):
# conf.define('USING_SYSTEM_TOMMATH', 1)
conf.env.KRB5_VENDOR = 'heimdal'
conf.define('USING_SYSTEM_KRB5', 1)
conf.define('USING_SYSTEM_HEIMDAL', 1)