heimdal_build: Allow using system wind.
authorJelmer Vernooij <jelmer@samba.org>
Fri, 15 Oct 2010 22:31:10 +0000 (00:31 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 15 Oct 2010 22:38:07 +0000 (22:38 +0000)
Please note that to use the system wind library the user explicitly has
to specify --bundled-library=!wind . Without that option we will always
use the included wind library.

source4/heimdal_build/wscript_build
source4/heimdal_build/wscript_configure

index ac6575ad0fc801e1c35498831a722c170bf00dd4..632a3f17da055ffda7a23bccd92803a8bbc3ceb7 100644 (file)
@@ -323,44 +323,6 @@ def HEIMDAL_BINARY(binname, source,
         )
 
 
-HEIMDAL_GENERATOR(
-    name="HEIMDAL_ERRORLIST",
-    rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
-    source = '../heimdal/lib/wind/gen-errorlist.py ../heimdal/lib/wind/rfc3454.txt ../heimdal/lib/wind/stringprep.py',
-    target = '../heimdal/lib/wind/errorlist_table.c ../heimdal/lib/wind/errorlist_table.h'
-    )
-
-
-HEIMDAL_GENERATOR(
-    name = 'HEIMDAL_NORMALIZE_TABLE',
-    rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[2].abspath()} ${SRC[1].parent.abspath(env)}",
-    source = '../heimdal/lib/wind/gen-normalize.py ../heimdal/lib/wind/UnicodeData.txt ../heimdal/lib/wind/CompositionExclusions-3.2.0.txt',
-    target = '../heimdal/lib/wind/normalize_table.h ../heimdal/lib/wind/normalize_table.c'
-)
-
-HEIMDAL_GENERATOR(
-    name = 'HEIMDAL_COMBINING_TABLE',
-    rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
-    source = '../heimdal/lib/wind/gen-combining.py ../heimdal/lib/wind/UnicodeData.txt',
-    target = '../heimdal/lib/wind/combining_table.h ../heimdal/lib/wind/combining_table.c'
-)
-
-HEIMDAL_GENERATOR(
-    name = 'HEIMDAL_BIDI_TABLE',
-    rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
-    source = '../heimdal/lib/wind/gen-bidi.py ../heimdal/lib/wind/rfc3454.txt',
-    target = '../heimdal/lib/wind/bidi_table.h ../heimdal/lib/wind/bidi_table.c'
-)
-
-
-HEIMDAL_GENERATOR(
-    name = 'HEIMDAL_MAP_TABLE',
-    rule="${PYTHON} ${SRC[0].abspath()} ${SRC[2].abspath()} ${SRC[2].parent.abspath(env)}",
-    source = '../heimdal/lib/wind/gen-map.py ../heimdal/lib/wind/stringprep.py ../heimdal/lib/wind/rfc3454.txt',
-    target = '../heimdal/lib/wind/map_table.h ../heimdal/lib/wind/map_table.c'
-)
-
-
 HEIMDAL_ASN1('HEIMDAL_SPNEGO_ASN1',
         source='../heimdal/lib/gssapi/spnego/spnego.asn1',
     options='--sequence=MechTypeList',
@@ -485,9 +447,6 @@ HEIMDAL_ERRTABLE('HEIMDAL_HX509_ERR_ET',
     '../heimdal/lib/hx509/hx509_err.et')
 
 
-HEIMDAL_ERRTABLE('WIND_ERR_ET',
-    '../heimdal/lib/wind/wind_err.et')
-
 ROKEN_HOSTCC_SOURCE = '''
     ../heimdal/lib/roken/base64.c
     ../heimdal/lib/roken/ct.c
@@ -628,7 +587,7 @@ HEIMDAL_LIBRARY('gssapi',
 ../heimdal/lib/gssapi/mech/gss_export_sec_context.c ../heimdal/lib/gssapi/mech/gss_inquire_context.c ../heimdal/lib/gssapi/mech/gss_release_name.c
 ../heimdal/lib/gssapi/mech/gss_set_cred_option.c  ../heimdal/lib/gssapi/mech/gss_pseudo_random.c gssapi-glue.c''',
     includes='../heimdal/lib/gssapi ../heimdal/lib/gssapi/gssapi ../heimdal/lib/gssapi/spnego ../heimdal/lib/gssapi/krb5 ../heimdal/lib/gssapi/mech',
-    deps='HEIMDAL_HCRYPTO HEIMDAL_HEIM_ASN1 HEIMDAL_SPNEGO_ASN1 HEIMDAL_GSSAPI_ASN1 roken krb5 com_err',
+    deps='HEIMDAL_HCRYPTO HEIMDAL_HEIM_ASN1 HEIMDAL_SPNEGO_ASN1 HEIMDAL_GSSAPI_ASN1 roken krb5 com_err wind',
     vnum='2.0.0',
     )
 
@@ -733,13 +692,54 @@ HEIMDAL_LIBRARY('hx509',
     )
 
 
-HEIMDAL_LIBRARY('wind',
-    '../heimdal/lib/wind/wind_err.c ../heimdal/lib/wind/stringprep.c ../heimdal/lib/wind/errorlist.c ../heimdal/lib/wind/errorlist_table.c ../heimdal/lib/wind/normalize.c ../heimdal/lib/wind/normalize_table.c ../heimdal/lib/wind/combining.c ../heimdal/lib/wind/combining_table.c ../heimdal/lib/wind/utf8.c ../heimdal/lib/wind/bidi.c ../heimdal/lib/wind/bidi_table.c ../heimdal/lib/wind/ldap.c ../heimdal/lib/wind/map.c ../heimdal/lib/wind/map_table.c',
-    includes='../heimdal/lib/wind',
-    deps='roken com_err',
-    vnum='0.0.0',
+if not bld.CONFIG_SET('USING_SYSTEM_WIND'):
+    HEIMDAL_ERRTABLE('WIND_ERR_ET',
+        '../heimdal/lib/wind/wind_err.et')
+
+    HEIMDAL_GENERATOR(
+        name="HEIMDAL_ERRORLIST",
+        rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
+        source = '../heimdal/lib/wind/gen-errorlist.py ../heimdal/lib/wind/rfc3454.txt ../heimdal/lib/wind/stringprep.py',
+        target = '../heimdal/lib/wind/errorlist_table.c ../heimdal/lib/wind/errorlist_table.h'
+        )
+
+
+    HEIMDAL_GENERATOR(
+        name = 'HEIMDAL_NORMALIZE_TABLE',
+        rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[2].abspath()} ${SRC[1].parent.abspath(env)}",
+        source = '../heimdal/lib/wind/gen-normalize.py ../heimdal/lib/wind/UnicodeData.txt ../heimdal/lib/wind/CompositionExclusions-3.2.0.txt',
+        target = '../heimdal/lib/wind/normalize_table.h ../heimdal/lib/wind/normalize_table.c'
     )
 
+    HEIMDAL_GENERATOR(
+        name = 'HEIMDAL_COMBINING_TABLE',
+        rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
+        source = '../heimdal/lib/wind/gen-combining.py ../heimdal/lib/wind/UnicodeData.txt',
+        target = '../heimdal/lib/wind/combining_table.h ../heimdal/lib/wind/combining_table.c'
+    )
+
+    HEIMDAL_GENERATOR(
+        name = 'HEIMDAL_BIDI_TABLE',
+        rule="${PYTHON} ${SRC[0].abspath()} ${SRC[1].abspath()} ${SRC[1].parent.abspath(env)}",
+        source = '../heimdal/lib/wind/gen-bidi.py ../heimdal/lib/wind/rfc3454.txt',
+        target = '../heimdal/lib/wind/bidi_table.h ../heimdal/lib/wind/bidi_table.c'
+    )
+
+
+    HEIMDAL_GENERATOR(
+        name = 'HEIMDAL_MAP_TABLE',
+        rule="${PYTHON} ${SRC[0].abspath()} ${SRC[2].abspath()} ${SRC[2].parent.abspath(env)}",
+        source = '../heimdal/lib/wind/gen-map.py ../heimdal/lib/wind/stringprep.py ../heimdal/lib/wind/rfc3454.txt',
+        target = '../heimdal/lib/wind/map_table.h ../heimdal/lib/wind/map_table.c'
+    )
+
+    HEIMDAL_LIBRARY('wind',
+          '../heimdal/lib/wind/wind_err.c ../heimdal/lib/wind/stringprep.c ../heimdal/lib/wind/errorlist.c ../heimdal/lib/wind/errorlist_table.c ../heimdal/lib/wind/normalize.c ../heimdal/lib/wind/normalize_table.c ../heimdal/lib/wind/combining.c ../heimdal/lib/wind/combining_table.c ../heimdal/lib/wind/utf8.c ../heimdal/lib/wind/bidi.c ../heimdal/lib/wind/bidi_table.c ../heimdal/lib/wind/ldap.c ../heimdal/lib/wind/map.c ../heimdal/lib/wind/map_table.c',
+          includes='../heimdal/lib/wind',
+          deps='roken com_err',
+          vnum='0.0.0',
+          )
+
 HEIMDAL_SUBSYSTEM('ROKEN_HOSTCC',
     ROKEN_HOSTCC_SOURCE,
     use_hostcc=True,
index 78b0df506316e74e83065535827ef64706110a7d..e0c435dc5ec5d94483dca80415a7de832c636c77 100644 (file)
@@ -1,5 +1,7 @@
 #!/usr/bin/env python
 
+import Logs, sys
+
 conf.CHECK_TYPE('u_char', 'uint8_t')
 conf.CHECK_TYPE('u_int32_t', 'uint32_t')
 
@@ -63,6 +65,24 @@ conf.DEFINE('SAMBA4_INTERNAL_HEIMDAL', 1)
 if conf.CHECK_BUNDLED_SYSTEM('com_err', checkfunctions='com_right_r com_err', headers='com_err.h'):
     conf.define('USING_SYSTEM_COM_ERR', 1)
 
+def check_bundled_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
+    lib = name
+    setattr(conf.env, "CPPPATH_%s" % name.upper(), ["/usr/include/heimdal"])
+    setattr(conf.env, "LIBPATH_%s" % name.upper(), ["/usr/lib/heimdal"])
+    if not conf.CHECK_HEADERS(headers, lib=lib):
+        Logs.error('ERROR: Unable to find missing header %s' % headers)
+        sys.exit(1)
+    if not conf.CHECK_LIB([lib], mandatory=True, set_target=True):
+        Logs.error('ERROR: Unable to find missing library %s' % lib)
+        sys.exit(1)
+    conf.define('USING_SYSTEM_%s' % name.upper(), 1)
+
+
+check_bundled_heimdal_lib("wind", "wind_stringprep", "wind.h")
+
 # disable trying to use an external compile_et until we have a configure
 # test that checks that the system one actually works. On some systems it
 # results in missing symbols (eg. OpenSUSE 10.2 'opi' in the build farm)