wafsamba: add support for separate rules in stages
authorAlexander Bokovoy <ab@samba.org>
Fri, 13 Apr 2012 14:53:04 +0000 (17:53 +0300)
committerAlexander Bokovoy <ab@samba.org>
Fri, 13 Apr 2012 16:34:39 +0000 (18:34 +0200)
bld.process_separate_rule(rule) and conf.process_separate_rule(rule)
will cause WAF to import wscript_<stage>_<rule> script into current
context.

Files wscript_<configure|build>_<rule> should exist in the current
directory.

This can be used to provide rules specific for alternative
implementations of certain libraries

Autobuild-User: Alexander Bokovoy <ab@samba.org>
Autobuild-Date: Fri Apr 13 18:34:39 CEST 2012 on sn-devel-104

buildtools/wafadmin/Utils.py
buildtools/wafsamba/samba_utils.py
wscript_build
wscript_build_embedded_heimdal [new file with mode: 0644]
wscript_build_system_heimdal [new file with mode: 0644]
wscript_build_system_mitkrb5 [new file with mode: 0644]

index 080d92821438cbffd0d3fa9997957b8c9d381776..41dad570ebe14551d734bc1935072a59549d1c60 100644 (file)
@@ -111,9 +111,6 @@ class WscriptError(WafError):
                                return (frame[0], frame[1])
                return (None, None)
 
-class WscriptCheckSkipped(WscriptError):
-    pass
-
 indicator = is_win32 and '\x1b[A\x1b[K%s%s%s\r' or '\x1b[K%s%s%s\r'
 
 try:
@@ -648,8 +645,6 @@ class Context(object):
                                try:
                                        try:
                                                exec(compile(txt, file_path, 'exec'), dc)
-                                       except WscriptCheckSkipped:
-                                               pass
                                        except Exception:
                                                exc_type, exc_value, tb = sys.exc_info()
                                                raise WscriptError("".join(traceback.format_exception(exc_type, exc_value, tb)), base)
index 519b77bdf0222c9197f9e2559fe2b3030d184c4e..bdf96fef884c939bc10df4a6c7f13ff6b81b4425 100644 (file)
@@ -3,7 +3,7 @@
 
 import Build, os, sys, Options, Utils, Task, re, fnmatch, Logs
 from TaskGen import feature, before
-from Configure import conf
+from Configure import conf, ConfigurationContext
 from Logs import debug
 import shlex
 
@@ -624,3 +624,26 @@ def get_tgt_list(bld):
             sys.exit(1)
         tgt_list.append(t)
     return tgt_list
+
+from Constants import WSCRIPT_FILE
+def process_separate_rule(self, rule):
+    ''' cause waf to process additional script based on `rule'.
+        You should have file named wscript_<stage>_rule in the current directory
+        where stage is either 'configure' or 'build'
+    '''
+    ctxclass = self.__class__.__name__
+    stage = ''
+    if ctxclass == 'ConfigurationContext':
+        stage = 'configure'
+    elif ctxclass == 'BuildContext':
+        stage = 'build'
+    file_path = os.path.join(self.curdir, WSCRIPT_FILE+'_'+stage+'_'+rule)
+    txt = load_file(file_path)
+    if txt:
+        dc = {'ctx': self}
+        if getattr(self.__class__, 'pre_recurse', None):
+            dc = self.pre_recurse(txt, file_path, [])
+        exec(compile(txt, file_path, 'exec'), dc)
+
+Build.BuildContext.process_separate_rule = process_separate_rule
+ConfigurationContext.process_separate_rule = process_separate_rule
index e3cacbf73488ef50e75ce90734bfab332c5c3e30..eeefeb3a19fb5d9e58843f09a50f33b784902355 100644 (file)
@@ -111,8 +111,19 @@ bld.RECURSE('libcli/samsync')
 bld.RECURSE('libcli/registry')
 bld.RECURSE('source4/lib/policy')
 bld.RECURSE('libcli/named_pipe_auth')
-if not bld.CONFIG_SET("USING_SYSTEM_KRB5"):
-    bld.RECURSE('source4/heimdal_build')
+
+if bld.CONFIG_SET("USING_SYSTEM_KRB5"):
+    if bld.CONFIG_SET("HEIMDAL_KRB5_CONFIG") and bld.CONFIG_SET("KRB5_CONFIG"):
+        if bld.CONFIG_GET("HEIMDAL_KRB5_CONFIG") != bld.CONFIG_GET("KRB5_CONFIG"):
+            # When both HEIMDAL_KRB5_CONFIG and KRB5_CONFIG are set and not equal,
+            # it means one is Heimdal-specific (krb5-config.heimdal, for example)
+            # and there is system heimdal
+            bld.process_separate_rule('system_heimdal')
+    else:
+        bld.process_separate_rule('system_krb5')
+else:
+    bld.process_separate_rule('embedded_heimdal')
+
 bld.RECURSE('libcli/smbreadline')
 bld.RECURSE('codepages')
 bld.RECURSE('source4/setup')
diff --git a/wscript_build_embedded_heimdal b/wscript_build_embedded_heimdal
new file mode 100644 (file)
index 0000000..5cde652
--- /dev/null
@@ -0,0 +1,2 @@
+print "\tSelected embedded Heimdal build"
+bld.RECURSE('source4/heimdal_build')
diff --git a/wscript_build_system_heimdal b/wscript_build_system_heimdal
new file mode 100644 (file)
index 0000000..e548d16
--- /dev/null
@@ -0,0 +1,2 @@
+print "\tSelected system Heimdal build"
+bld.RECURSE('source4/heimdal_build')
diff --git a/wscript_build_system_mitkrb5 b/wscript_build_system_mitkrb5
new file mode 100644 (file)
index 0000000..efe5dd1
--- /dev/null
@@ -0,0 +1,2 @@
+print "\tSelected system MIT krb5 libraries, Heimdal use is disabled"
+#bld.RECURSE('source4/heimdal_build')