build: heimdal_build waf support
authorAndrew Tridgell <tridge@samba.org>
Wed, 17 Mar 2010 09:21:47 +0000 (20:21 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:26:38 +0000 (20:26 +1000)
heimdal now mostly builds

buildtools/mktowscript/mklist.txt
buildtools/mktowscript/mktowscript.pl
buildtools/mktowscript/rebuild_all.sh
buildtools/waf
buildtools/waf-1.5.13-fixed [deleted file]
lib/replace/wafsamba.py
source4/dsdb/wscript_build [new file with mode: 0644]
source4/heimdal_build/wscript_build [new file with mode: 0644]
source4/heimdal_build/wscript_configure [new file with mode: 0644]
source4/wscript_build

index 86f738bc2c369d10a38bf89b802e6777682808d8..203c9a3ab36aeed5aefe97eeca904658d8d5cf7e 100644 (file)
@@ -28,7 +28,7 @@ source4/cldap_server/config.mk
 source4/smb_server/config.mk
 source4/smb_server/smb2/config.mk
 source4/smb_server/smb/config.mk
-source4/smbd/config.mk
+source4/smbd/config.mk source4/smbd/process_model.mk
 source4/kdc/config.mk
 source4/dsdb/config.mk
 source4/dsdb/samdb/ldb_modules/config.mk
index 1db7297261af7b20eecbb936ddfb76d222a57282..68fb7c69d3ebb4e84453e1e3181e36d2d6c2cab7 100755 (executable)
@@ -3,10 +3,10 @@
 use strict;
 use Data::Dumper;
 use File::Basename;
+use List::MoreUtils qw(uniq);
 
-my $filename=$ARGV[0];
-my $dname=dirname($filename);
 my $globals;
+my $dname;
 
 sub read_file($)
 {
@@ -46,7 +46,9 @@ sub strlist($)
 
        # these need to use the library names
        $s =~ s/\bLIBLDB\b/ldb/g;
+       $s =~ s/\bLDB\b/ldb/g;
        $s =~ s/\bLIBTALLOC\b/talloc/g;
+       $s =~ s/\bTALLOC\b/talloc/g;
        $s =~ s/\bLIBTEVENT\b/tevent/g;
        $s =~ s/\bRESOLV\b/resolv/g;
 
@@ -85,9 +87,9 @@ sub find_file($)
        return $b if (-e $b);
 
        return $f if (-e $f);
+
        while ($f =~ /\//) {
                $f =~ s/^[^\/]+\///g;
-               #printf(STDERR "Trying $f in $dname\n");
                return $f if (-e $f);
        }
        my $f2;
@@ -120,7 +122,11 @@ sub find_files($)
                $f =~ s/^[.]\///;
                $ret .= ' ' . $f;
        }
-       return strlist($ret);
+       $ret = strlist($ret);
+       my @list = split(/\s+/, $ret);
+       @list = uniq(@list);
+       $ret = trim(join(' ', @list));
+       return $ret;
 }
 
 sub read_config_mk($)
@@ -242,186 +248,195 @@ sub read_config_mk($)
 }
 
 
-my $result = read_config_mk($filename);
-
-#print Dumper $result;
-
-print "# AUTOGENERATED by mktowscript.pl\n# Please remove this notice if hand editing\n\n";
-
-chdir($dname);
-
-foreach my $s (sort {$result->{$a}->{SECNUMBER} <=> $result->{$b}->{SECNUMBER}} keys %{$result}) {
-    next if ($s eq "GLOBAL");
-    my $sec = $result->{$s};
-    if ($sec->{TYPE} eq "SUBCONFIG") {
-           my $d = dirname($s);
-           next if ($d eq ".");
-           printf "bld.BUILD_SUBDIR('%s')\n", dirname($s);
-    } else {
-           printf "\nbld.SAMBA_%s('%s'", $sec->{TYPE}, $s;
-           my $trailer="";
-           my $got_src = 0;
-
-           foreach my $k (keys %{$sec}) {
-                   #print "key=$k\n";
-
-                   next if ($k eq "SECNUMBER");
-                   next if ($k eq "TYPE");
-                   if ($k eq "INIT_FUNCTION") {
-                           $trailer .= sprintf(",\n\tinit_function='%s'", trim($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "INIT_FUNCTION_SENTINEL") {
-                           $trailer .= sprintf(",\n\tinit_function_sentinal='%s'", trim($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "_PY_FILES" ||
-                       $k eq "EPYDOC_OPTIONS" ||
-                       $k eq "COV_TARGET" ||
-                       $k eq "GCOV" ||
-                       $k eq "PC_FILES" ||
-                       $k eq "CONFIG4FILE" ||
-                       $k eq "LMHOSTSFILE4") {
-                           $trailer .= sprintf(",\n\t# %s='%s'", $k, trim($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "SUBSYSTEM") {
-                           $trailer .= sprintf(",\n\tsubsystem='%s'", trim($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "PRIVATE_DEPENDENCIES") {
-                           $trailer .= sprintf(",\n\tdeps='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "PUBLIC_DEPENDENCIES") {
-                           $trailer .= sprintf(",\n\tpublic_deps='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "ALIASES") {
-                           $trailer .= sprintf(",\n\taliases='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "CFLAGS") {
-                           $trailer .= sprintf(",\n\tcflags='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "OPTIONS") {
-                           $trailer .= sprintf(",\n\toptions='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "DIRECTORY") {
-                           $trailer .= sprintf(",\n\tdirectory='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "LDFLAGS") {
-                           $trailer .= sprintf(",\n\tldflags='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "INSTALLDIR") {
-                           $trailer .= sprintf(",\n\tinstalldir='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "ASN1C") {
-                           $trailer .= sprintf(",\n\tcompiler='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "ET_COMPILER") {
-                           $trailer .= sprintf(",\n\tcompiler='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "ENABLE") {
-                           my $v = strlist($sec->{$k});
-                           if ($v eq "NO") {
-                                   $trailer .= sprintf(",\n\tenabled=False");
-                                   next;
-                           }
-                           next if ($v eq "YES");
-                           die("Unknown ENABLE value $v in $s\n");
-                   }
-                   if ($k eq "USE_HOSTCC") {
-                           my $v = strlist($sec->{$k});
-                           if ($v eq "YES") {
-                                   $trailer .= sprintf(",\n\tuse_hostcc=True");
-                                   next;
-                           }
-                           next if ($v eq "NO");
-                           die("Unknown HOST_CC value $v in $s\n");
-                   }
-                   if ($k eq "$s" . "_VERSION") {
-                           $trailer .= sprintf(",\n\tvnum='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "$s" . "_SOVERSION") {
-                           next;
-                   }
-                   if ($k eq "LIBRARY_REALNAME") {
-                           $trailer .= sprintf(",\n\trealname='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "OUTPUT_TYPE") {
-                           $trailer .= sprintf(",\n\toutput_type='%s'", strlist($sec->{$k}));
-                           next;
-                   }
-                   if ($k eq "AUTOPROTO") {
-                           my $list = trim(find_files(strlist($sec->{$k})));
-                           $trailer .= sprintf(",\n\tautoproto='%s'", $list);
-                           next;
-                   }
-                   if ($k eq "PUBLIC_HEADERS") {
-                           my $list = trim(strlist($sec->{$k}));
-                           if ($list =~ /\$\(addprefix .*,(.*)\)(.*)$/) {
-                                   $list = trim("$1 $2");
-                                   $list = find_files($list);
-                           } else {
-                                   $list = trim(find_files(strlist($sec->{$k})));
-                           }
-                           $trailer .= sprintf(",\n\tpublic_headers='%s'", $list);
-                           next;
-                   }
-                   if ($k eq "MANPAGES") {
-                           my $list = trim(find_files(strlist($sec->{$k})));
-                           $trailer .= sprintf(",\n\tmanpages='%s'", $list);
-                           next;
-                   }
-                   if ($k eq "$s" . "_OBJ_FILES") {
-                           my $list = trim(strlist($sec->{$k}));
-                           $list =~ s/\.o/.c/g;
-                           if ($list =~ /\$\(addprefix .*,(.*)\)(.*)$/) {
-                                   $list = trim("$1 $2");
-                                   $list = find_files($list);
-                                   $list = "'$list'";
-                           } elsif ($list =~ /\$\(addprefix \$\((\w+)\)(.*),(.*)\)(.*)$/) {
-                                   my $src = trim($3);
-                                   my $dir = "$1$2";
-                                   $dir =~ s/\/$//;
-                                   my $res = "bld.SUBDIR('$dir', '$src')";
-                                   if ($4) {
-                                           $res = "$res + '$4'";
-                                   }
-                                   $list = $res;
-                           } else {
-                                   $list = find_files($list);
-                                   $list="'$list'";
-                           }
-                           $list =~ s/\$\(\w+srcdir\)\///g;
-                           printf(",\n\t%s", $list);
-                           $got_src = 1;
-                           next;
-                   }
-                   if ($k eq "HEIMDAL_GSSAPI_KRB5_OBJ_FILES" ||
-                       $k eq "HEIMDAL_GSSAPI_SPNEGO_OBJ_FILES" ||
-                       $k eq "HEIMDAL_HEIM_ASN1_DER_OBJ_FILES" ||
-                       $k eq "HEIMDAL_HX509_OBJH_FILES" ||
-                       $k eq "HEIMDAL_HX509_OBJG_FILES" ||
-                       $k eq "HEIMDAL_ROKEN_OBJ_FILES"
-                       ) {
-                           next;
-                   }
-                   die("Unknown keyword $k in $s\n");
-           }
-           die("No source list in $s\n") unless $got_src;
-           printf("%s\n\t)\n\n", $trailer);
-    }
+sub process_results($)
+{
+       my $result = shift;
+
+       foreach my $s (sort {$result->{$a}->{SECNUMBER} <=> $result->{$b}->{SECNUMBER}} keys %{$result}) {
+               next if ($s eq "GLOBAL");
+               my $sec = $result->{$s};
+               if ($sec->{TYPE} eq "SUBCONFIG") {
+                       my $d = dirname($s);
+                       next if ($d eq ".");
+                       printf "bld.BUILD_SUBDIR('%s')\n", dirname($s);
+               } else {
+                       printf "\nbld.SAMBA_%s('%s'", $sec->{TYPE}, $s;
+                       my $trailer="";
+                       my $got_src = 0;
+
+                       foreach my $k (keys %{$sec}) {
+                               #print "key=$k\n";
+
+                               next if ($k eq "SECNUMBER");
+                               next if ($k eq "TYPE");
+                               if ($k eq "INIT_FUNCTION") {
+                                       $trailer .= sprintf(",\n\tinit_function='%s'", trim($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "INIT_FUNCTION_SENTINEL") {
+                                       $trailer .= sprintf(",\n\tinit_function_sentinal='%s'", trim($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "_PY_FILES" ||
+                                   $k eq "EPYDOC_OPTIONS" ||
+                                   $k eq "COV_TARGET" ||
+                                   $k eq "GCOV" ||
+                                   $k eq "PC_FILES" ||
+                                   $k eq "CONFIG4FILE" ||
+                                   $k eq "LMHOSTSFILE4") {
+                                       $trailer .= sprintf(",\n\t# %s='%s'", $k, trim($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "SUBSYSTEM") {
+                                       $trailer .= sprintf(",\n\tsubsystem='%s'", trim($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "PRIVATE_DEPENDENCIES") {
+                                       $trailer .= sprintf(",\n\tdeps='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "PUBLIC_DEPENDENCIES") {
+                                       $trailer .= sprintf(",\n\tpublic_deps='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "ALIASES") {
+                                       $trailer .= sprintf(",\n\taliases='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "CFLAGS") {
+                                       $trailer .= sprintf(",\n\tcflags='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "OPTIONS") {
+                                       $trailer .= sprintf(",\n\toptions='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "DIRECTORY") {
+                                       $trailer .= sprintf(",\n\tdirectory='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "LDFLAGS") {
+                                       $trailer .= sprintf(",\n\tldflags='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "INSTALLDIR") {
+                                       $trailer .= sprintf(",\n\tinstalldir='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "ASN1C") {
+                                       $trailer .= sprintf(",\n\tcompiler='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "ET_COMPILER") {
+                                       $trailer .= sprintf(",\n\tcompiler='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "ENABLE") {
+                                       my $v = strlist($sec->{$k});
+                                       if ($v eq "NO") {
+                                               $trailer .= sprintf(",\n\tenabled=False");
+                                               next;
+                                       }
+                                       next if ($v eq "YES");
+                                       die("Unknown ENABLE value $v in $s\n");
+                               }
+                               if ($k eq "USE_HOSTCC") {
+                                       my $v = strlist($sec->{$k});
+                                       if ($v eq "YES") {
+                                               $trailer .= sprintf(",\n\tuse_hostcc=True");
+                                               next;
+                                       }
+                                       next if ($v eq "NO");
+                                       die("Unknown HOST_CC value $v in $s\n");
+                               }
+                               if ($k eq "$s" . "_VERSION") {
+                                       $trailer .= sprintf(",\n\tvnum='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "$s" . "_SOVERSION") {
+                                       next;
+                               }
+                               if ($k eq "LIBRARY_REALNAME") {
+                                       $trailer .= sprintf(",\n\trealname='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "OUTPUT_TYPE") {
+                                       $trailer .= sprintf(",\n\toutput_type='%s'", strlist($sec->{$k}));
+                                       next;
+                               }
+                               if ($k eq "AUTOPROTO") {
+                                       my $list = trim(find_files(strlist($sec->{$k})));
+                                       $trailer .= sprintf(",\n\tautoproto='%s'", $list);
+                                       next;
+                               }
+                               if ($k eq "PUBLIC_HEADERS") {
+                                       my $list = trim(strlist($sec->{$k}));
+                                       if ($list =~ /\$\(addprefix .*,(.*)\)(.*)$/) {
+                                               $list = trim("$1 $2");
+                                               $list = find_files($list);
+                                       } else {
+                                               $list = trim(find_files(strlist($sec->{$k})));
+                                       }
+                                       $trailer .= sprintf(",\n\tpublic_headers='%s'", $list);
+                                       next;
+                               }
+                               if ($k eq "MANPAGES") {
+                                       my $list = trim(find_files(strlist($sec->{$k})));
+                                       $trailer .= sprintf(",\n\tmanpages='%s'", $list);
+                                       next;
+                               }
+                               if ($k eq "$s" . "_OBJ_FILES") {
+                                       my $list = trim(strlist($sec->{$k}));
+                                       $list =~ s/\.o/.c/g;
+                                       $list =~ s/\.ho/.c/g;
+                                       if ($list =~ /\$\(addprefix .*,(.*)\)(.*)$/) {
+                                               $list = trim("$1 $2");
+                                               $list = find_files($list);
+                                               $list = "'$list'";
+                                       } elsif ($list =~ /\$\(addprefix \$\((\w+)\)(.*),(.*)\)(.*)$/) {
+                                               my $src = trim($3);
+                                               my $dir = "$1$2";
+                                               $dir =~ s/\/$//;
+                                               my $res = "bld.SUBDIR('$dir', '$src')";
+                                               if ($4) {
+                                                       $res = "$res + '$4'";
+                                               }
+                                               $list = $res;
+                                       } else {
+                                               $list = find_files($list);
+                                               $list="'$list'";
+                                       }
+                                       $list =~ s/\$\(\w+srcdir\)\///g;
+                                       printf(",\n\t%s", $list);
+                                       $got_src = 1;
+                                       next;
+                               }
+                               if ($k eq "HEIMDAL_GSSAPI_KRB5_OBJ_FILES" ||
+                                   $k eq "HEIMDAL_GSSAPI_SPNEGO_OBJ_FILES" ||
+                                   $k eq "HEIMDAL_HEIM_ASN1_DER_OBJ_FILES" ||
+                                   $k eq "HEIMDAL_HX509_OBJH_FILES" ||
+                                   $k eq "HEIMDAL_HX509_OBJG_FILES" ||
+                                   $k eq "HEIMDAL_ROKEN_OBJ_FILES"
+                                   ) {
+                                       next;
+                               }
+                               die("Unknown keyword $k in $s\n");
+                       }
+                       die("No source list in $s\n") unless $got_src;
+                       printf("%s\n\t)\n\n", $trailer);
+               }
+       }
+}
+
+for (my $i=0; $i <= $#ARGV; $i++) {
+       my $filename=$ARGV[$i];
+       $dname=dirname($filename);
+       my $result = read_config_mk($filename);
+       if ($i != 0) {
+               print "\n\n\n";
+       }
+       print "# AUTOGENERATED by mktowscript.pl from $filename\n# Please remove this notice if hand editing\n\n";
+       die("Unable to chdir to $dname\n") unless chdir($dname);
+       process_results($result);
 }
 
-#print Dumper $result;
index 5209eee50bdf4921c72e1a860193147068476d6f..23622b2abedb6a90e1c55958d7c312fa2159d494 100755 (executable)
@@ -1,21 +1,29 @@
 #!/bin/bash
 
 cat mklist.txt |
-while read f; do
-    echo "Processing $f"
-    f="../../$f"
-    test -f $f || {
-       echo "$f doesn't exist"
-       exit 1
-    }
-    ws="$(dirname $f)/wscript_build"
-    if [ -f $ws ]; then
-       if ! grep "AUTOGENERATED.by.mktowscript" $ws > /dev/null; then
-           echo "Skipping manually edited file $ws"
-           continue
+while read line; do
+    ws=""
+    list=""
+    for f in $line; do
+       echo "Processing $f"
+       f="../../$f"
+       test -f $f || {
+           echo "$f doesn't exist"
+           exit 1
+       }
+       ws="$(dirname $f)/wscript_build"
+       if [ -f $ws ]; then
+           if test -s $ws && ! grep "AUTOGENERATED.by.mktowscript" $ws > /dev/null; then
+               echo "Skipping manually edited file $ws"
+               continue
+           fi
        fi
+       list="$list $f"
+    done
+    if [ "$list" = "" ]; then
+       continue
     fi
-    ./mktowscript.pl $f > wscript_build.$$ || {
+    ./mktowscript.pl $list > wscript_build.$$ || {
        echo "Failed on $f"
        rm -f wscript_build.$$
        exit 1
index 50ecc12ebb239acc5205511f1c3e7119d48d6891..734fbd13a9bf78b85c6b46a652003c10562a4a2e 120000 (symlink)
@@ -1 +1 @@
-waf-1.5.13-fixed
\ No newline at end of file
+waf-1.5.13
\ No newline at end of file
diff --git a/buildtools/waf-1.5.13-fixed b/buildtools/waf-1.5.13-fixed
deleted file mode 100755 (executable)
index a384953..0000000
Binary files a/buildtools/waf-1.5.13-fixed and /dev/null differ
index 60a43ae98925e5f8e277d56601d289adc871b7fb..80190f39044f1ccbf56608a03c04e4b11b5d7491 100644 (file)
@@ -1,8 +1,9 @@
 # a waf tool to add autoconf-like macros to the configure section
 # and for SAMBA_ macros for building libraries, binaries etc
 
-import Build, os, Logs, sys, Configure, Options
+import Build, os, Logs, sys, Configure, Options, string
 from Configure import conf
+from Logs import debug
 
 LIB_PATH="shared"
 
@@ -84,12 +85,12 @@ def CHECK_FUNCS_IN(conf, list, library, mandatory=False):
         conf.ASSERT(not mandatory,
                     "Mandatory library '%s' not found for functions '%s'" % (library, list))
         # if it isn't a mandatory library, then remove it from dependency lists
-        cache = LOCAL_CACHE(conf, 'EMPTY_LIBS')
-        cache[library.upper()] = True
+        LOCAL_CACHE_SET(conf, 'EMPTY_TARGETS', library.upper(), True)
         return
     for f in list.split():
         conf.check(function_name=f, lib=library, header_name=conf.env.hlist)
     conf.env['LIB_' + library.upper()] = library
+    LOCAL_CACHE_SET(conf, 'TARGET_TYPE', library, 'SYSLIB')
 
 
 #################################################
@@ -132,7 +133,7 @@ def set_rpath(bld):
         else:
             bld.env['RPATH'] = []
     else:
-        rpath = os.path.normpath('%s/bin/%s' % (bld.curdir, LIB_PATH))
+        rpath = os.path.normpath('%s/%s' % (bld.env['BUILD_DIRECTORY'], LIB_PATH))
         bld.env.append_value('RPATH', '-Wl,-rpath=%s' % rpath)
 Build.BuildContext.set_rpath = set_rpath
 
@@ -148,6 +149,38 @@ def LOCAL_CACHE(ctx, name):
     return ctx.env[name]
 
 
+#############################################################
+# set a value in a local cache
+@conf
+def LOCAL_CACHE_SET(ctx, cachename, key, value):
+    cache = LOCAL_CACHE(ctx, cachename)
+    cache[key] = value
+
+#############################################################
+# set a value in a local cache
+# return False if it's already set
+def SET_TARGET_TYPE(ctx, target, value):
+    cache = LOCAL_CACHE(ctx, 'TARGET_TYPE')
+    if target in cache:
+        ASSERT(ctx, cache[target] == value,
+               "Target '%s' re-defined as %s - was %s" % (target, value, cache[target]))
+        debug("task_gen: Skipping duplicate target %s (curdir=%s)" % (target, ctx.curdir))
+        return False
+    assumed = LOCAL_CACHE(ctx, 'ASSUMED_TARGET')
+    if target in assumed:
+        #if assumed[target] != value:
+        #    print "Target '%s' was assumed of type '%s' but is '%s'" % (target, assumed[target], value)
+        ASSERT(ctx, assumed[target] == value,
+               "Target '%s' was assumed of type '%s' but is '%s'" % (target, assumed[target], value))
+    predeclared = LOCAL_CACHE(ctx, 'PREDECLARED_TARGET')
+    if target in predeclared:
+        ASSERT(ctx, predeclared[target] == value,
+               "Target '%s' was predeclared of type '%s' but is '%s'" % (target, predeclared[target], value))
+    LOCAL_CACHE_SET(ctx, 'TARGET_TYPE', target, value)
+    debug("task_gen: Target '%s' created of type '%s' in %s" % (target, value, ctx.curdir))
+    return True
+
+
 #############################################################
 # a build assert call
 @conf
@@ -171,6 +204,7 @@ Build.BuildContext.SUBDIR = SUBDIR
 @conf
 def SAMBA_BUILD_ENV(conf):
     libpath="%s/%s" % (conf.blddir, LIB_PATH)
+    conf.env['BUILD_DIRECTORY'] = conf.blddir
     if not os.path.exists(libpath):
         os.mkdir(libpath)
 
@@ -216,13 +250,43 @@ def FULL_DEPENDENCIES(bld, cache, target, chain, path):
 # check our build dependencies for circular dependencies
 def CHECK_TARGET_DEPENDENCY(bld, target):
     cache = LOCAL_CACHE(bld, 'LIB_DEPS')
-    FULL_DEPENDENCIES(bld, cache, target, { target:True }, target)
+    return FULL_DEPENDENCIES(bld, cache, target, { target:True }, target)
+
+############################################################
+# check that all dependencies have been declared
+def CHECK_DEPENDENCIES(bld):
+    cache = LOCAL_CACHE(bld, 'LIB_DEPS')
+    target_cache = LOCAL_CACHE(bld, 'TARGET_TYPE')
+    debug('deps: Checking dependencies')
+    for t in cache:
+        deps = CHECK_TARGET_DEPENDENCY(bld, t)
+        for d in deps:
+            #if not d in target_cache:
+            #    print "Dependency '%s' of target '%s' not declared" % (d, t)
+            ASSERT(bld, d in target_cache,
+                   "Dependency '%s' of target '%s' not declared" % (d, t))
+    debug("deps: Dependencies checked for %u targets" % len(target_cache))
+Build.BuildContext.CHECK_DEPENDENCIES = CHECK_DEPENDENCIES
+
+
+############################################################
+# pre-declare a target as being of a particular type
+def PREDECLARE(bld, target, type):
+    cache = LOCAL_CACHE(bld, 'PREDECLARED_TARGET')
+    target_cache = LOCAL_CACHE(bld, 'TARGET_TYPE')
+    ASSERT(bld, not target in target_cache, "Target '%s' is already declared" % target)
+    ASSERT(bld, not target in cache, "Target '%s' already predeclared" % target)
+    cache[target] = type
+Build.BuildContext.PREDECLARE = PREDECLARE
+
+
 
 ################################################################
 # add to the dependency list. Return a new dependency list with
 # any circular dependencies removed
 # returns a tuple containing (systemdeps, localdeps)
 def ADD_DEPENDENCIES(bld, name, deps):
+    debug('deps: Calculating dependencies for %s' % name)
     cache = LOCAL_CACHE(bld, 'LIB_DEPS')
     if not name in cache:
         cache[name] = {}
@@ -234,24 +298,49 @@ def ADD_DEPENDENCIES(bld, name, deps):
             CHECK_TARGET_DEPENDENCY(bld, name)
             list2.append(d)
         except AssertionError:
-            print "Removing dependency %s from target %s" % (d, name)
+            debug("deps: Removing dependency %s from target %s" % (d, name))
             del(cache[name][d])
 
     # extract out the system dependencies
     sysdeps = []
     localdeps = []
-    cache = LOCAL_CACHE(bld, 'EMPTY_LIBS')
+    add_objects = []
+    cache = LOCAL_CACHE(bld, 'EMPTY_TARGETS')
+    target_cache = LOCAL_CACHE(bld, 'TARGET_TYPE')
+    predeclare = LOCAL_CACHE(bld, 'PREDECLARED_TARGET')
     for d in list2:
         # strip out any dependencies on empty libraries
         if d in cache:
-            print "Removing dependence of '%s' on empty library '%s'" % (name, d)
+            debug("deps: Removing empty dependency '%s' from '%s'" % (d, name))
             continue
-        libname = 'LIB_%s' % d.upper()
-        if libname in bld.env:
-            sysdeps.append(d)
+        type = None
+
+        if d in target_cache:
+            type = target_cache[d]
+        elif d in predeclare:
+            type = predeclare[d]
         else:
+            type = 'SUBSYSTEM'
+            LOCAL_CACHE_SET(bld, 'ASSUMED_TARGET', d, type)
+
+        if type == 'SYSLIB':
+            sysdeps.append(d)
+        elif type == 'LIBRARY':
             localdeps.append(d)
-    return (' '.join(sysdeps), ' '.join(localdeps))
+        elif type == 'SUBSYSTEM':
+            add_objects.append(d)
+        elif type == 'MODULE':
+            add_objects.append(d)
+        elif type == 'PYTHON':
+            pass
+        elif type == 'ASN1':
+            pass
+        else:
+            ASSERT(bld, False, "Unknown target type '%s' for dependency %s" % (
+                    type, d))
+    debug('deps: Dependencies for %s: sysdeps: %u  localdeps: %u  add_objects=%u' % (
+            name, len(sysdeps), len(localdeps), len(add_objects)))
+    return (' '.join(sysdeps), ' '.join(localdeps), ' '.join(add_objects))
 
 
 #################################################################
@@ -275,18 +364,15 @@ def SAMBA_LIBRARY(bld, libname, source_list,
                   vnum=None,
                   cflags=None,
                   autoproto=None):
-    # print "Declaring SAMBA_LIBRARY %s" % libname
-    #print "SAMBA_LIBRARY '%s' with deps '%s'" % (libname, deps)
+    if not SET_TARGET_TYPE(bld, libname, 'LIBRARY'):
+        return
 
     # remember empty libraries, so we can strip the dependencies
     if (source_list == '') or (source_list == []):
-        cache = LOCAL_CACHE(bld, 'EMPTY_LIBS')
-        cache[libname] = True
+        LOCAL_CACHE_SET(bld, 'EMPTY_TARGETS', libname, True)
         return
 
-    (sysdeps, localdeps) = ADD_DEPENDENCIES(bld, libname, deps)
-
-    #print "SAMBA_LIBRARY: sysdeps='%s' deps='%s'" % (sysdeps, deps)
+    (sysdeps, localdeps, add_objects) = ADD_DEPENDENCIES(bld, libname, deps)
 
     ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list)
     ilist = bld.NORMPATH(ilist)
@@ -296,7 +382,8 @@ def SAMBA_LIBRARY(bld, libname, source_list,
         target=libname,
         uselib_local = localdeps,
         uselib = sysdeps,
-        includes='. ' + os.environ.get('PWD') + '/bin/default ' + ilist,
+        add_objects = add_objects,
+        includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist,
         vnum=vnum)
 
     # put a link to the library in bin/shared
@@ -305,13 +392,12 @@ def SAMBA_LIBRARY(bld, libname, source_list,
         soext = '.' + vnum.split('.')[0]
     bld(
         source = 'lib%s.so' % libname,
-        target = '%s.lnk' % libname,
-        rule = 'ln -sf ../${SRC}%s %s/lib%s.so%s && touch ${TGT}' %
+        rule = 'ln -sf ../${SRC}%s %s/lib%s.so%s' %
         (soext, LIB_PATH, libname, soext),
-        shell = True
+        shell = True,
+        after = 'cc_link',
         )
-    cache = LOCAL_CACHE(bld, 'INCLUDE_LIST')
-    cache[libname] = ilist
+    LOCAL_CACHE_SET(bld, 'INCLUDE_LIST', libname, ilist)
 
 Build.BuildContext.SAMBA_LIBRARY = SAMBA_LIBRARY
 
@@ -330,15 +416,14 @@ def SAMBA_BINARY(bld, binname, source_list,
                  use_hostcc=None,
                  compiler=None,
                  manpages=None):
-    ilist = '. ' + os.environ.get('PWD') + '/bin/default ' + bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + ' ' + include_list
+    ilist = '. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + ' ' + include_list
     ilist = bld.NORMPATH(ilist)
     ccflags = ''
 
-    #print "SAMBA_BINARY '%s' with deps '%s'" % (binname, deps)
-
-    (sysdeps, localdeps) = ADD_DEPENDENCIES(bld, binname, deps)
+    if not SET_TARGET_TYPE(bld, binname, 'BINARY'):
+        return
 
-    #print "SAMBA_BINARY: sysdeps='%s' deps='%s'" % (sysdeps, deps)
+    (sysdeps, localdeps, add_objects) = ADD_DEPENDENCIES(bld, binname, deps)
 
     cache = LOCAL_CACHE(bld, 'INIT_FUNCTIONS')
     if modules is not None:
@@ -355,12 +440,16 @@ def SAMBA_BINARY(bld, binname, source_list,
         uselib = sysdeps,
         includes = ilist,
         ccflags = ccflags,
+        add_objects = add_objects,
         top=True)
     # put a link to the binary in bin/
-    bld(
-        source = binname,
-        rule = 'ln -sf ${SRC} .',
-        )
+    if not Options.is_install:
+        bld(
+            source = binname,
+            rule = 'rm -f %s && cp ${SRC} .' % (binname),
+            shell = True,
+            after = 'cc_link'
+            )
 Build.BuildContext.SAMBA_BINARY = SAMBA_BINARY
 
 
@@ -371,34 +460,53 @@ def SAMBA_PYTHON(bld, name, source_list,
                  public_deps='',
                  realname=''):
 
-    #print "SAMBA_PYTHON '%s' with deps '%s'" % (name, deps)
+    if not SET_TARGET_TYPE(bld, name, 'PYTHON'):
+        return
 
-    (sysdeps, localdeps) = ADD_DEPENDENCIES(bld, name, deps)
+    (sysdeps, localdeps, add_objects) = ADD_DEPENDENCIES(bld, name, deps)
 
-    #Logs.debug('runner: PYTHON_SAMBA not implemented')
     return
 Build.BuildContext.SAMBA_PYTHON = SAMBA_PYTHON
 
 
+###################################################################
+# declare the ASN1 build pattern
+@runonce
+def SAMBA_ASN1_PATTERN(bld):
+    bld(
+        name = 'asn1_compile',
+        rule = 'echo ASN1_COMPILE ${SRC} > {$TGT}',
+        shall = True,
+        ext_in = '.asn1',
+        ext_out = '.c',
+        reentrant = True,
+        install = False)
+
+
 #################################################################
 # define a Samba ASN1 target
 def SAMBA_ASN1(bld, name, source,
                options='',
                directory=''):
     import string
+
+    if not SET_TARGET_TYPE(bld, name, 'ASN1'):
+        return
+
     cfile = string.replace(source, '.asn1', '.c')
-    bld(
-        source = source,
-        target = cfile,
-        rule = 'echo ASN1_COMPILE ${SRC} > {$TGT}',
-        uselib = '',
-        name = name)
+
+    # declare the pattern rule
+    SAMBA_ASN1_PATTERN(bld)
+
+    bld(source=source)
+
     bld(
         features = 'cc cshlib',
         source = cfile,
         target = name,
         uselib = '',
-        after = name)
+        after = 'asn1_compile'
+        )
 Build.BuildContext.SAMBA_ASN1 = SAMBA_ASN1
 
 
@@ -407,6 +515,8 @@ Build.BuildContext.SAMBA_ASN1 = SAMBA_ASN1
 def SAMBA_ERRTABLE(bld, name, source,
                    directory=''):
     import string
+    if not SET_TARGET_TYPE(bld, name, 'ERRTABLE'):
+        return
     cfile = string.replace(source, '.et', '.c')
     bld(
         source = source,
@@ -418,6 +528,34 @@ def SAMBA_ERRTABLE(bld, name, source,
 Build.BuildContext.SAMBA_ERRTABLE = SAMBA_ERRTABLE
 
 
+#################################################################
+# define a PIDL target
+def SAMBA_PIDL(bld, directory, source):
+    pidl = "../../pidl/pidl"
+    idl_dir = os.path.dirname(source)
+    base = os.path.basename(string.replace(source, '.idl', ''))
+    rule = "pidl --outputdir %s --header --ndr-parser --server --client --python --dcom-proxy --com-header --includedir %s -- %s" % (directory, idl_dir, source)
+    output = '%s/ndr_%s.c' % (directory, base)
+    tname = 'PIDL_%s' % base.upper()
+    bld(
+        rule   = rule,
+        source = source,
+        target = output,
+        name   = 'pidl_compile'
+        )
+
+Build.BuildContext.SAMBA_PIDL = SAMBA_PIDL
+
+
+
+#################################################################
+# define a set of Samba PIDL targets
+def SAMBA_PIDL_LIST(bld, directory, source_list):
+    for p in source_list.split():
+        bld.SAMBA_PIDL(directory, p)
+Build.BuildContext.SAMBA_PIDL_LIST = SAMBA_PIDL_LIST
+
+
 ################################################################
 # build a C prototype file automatically
 def AUTOPROTO(bld, header, source_list):
@@ -441,13 +579,31 @@ def SAMBA_MODULE(bld, modname, source_list,
                  aliases=None,
                  cflags=None,
                  output_type=None):
-    #print "SAMBA_MODULE '%s' with deps '%s'" % (modname, deps)
-    bld.ADD_INIT_FUNCTION(subsystem, init_function)
-    bld.AUTOPROTO(autoproto, source_list)
-    bld.SAMBA_LIBRARY(modname, source_list,
-                      deps=deps, include_list=include_list)
+
+    if not SET_TARGET_TYPE(bld, modname, 'MODULE'):
+        return
+
+    # remember empty modules, so we can strip the dependencies
+    if (source_list == '') or (source_list == []):
+        LOCAL_CACHE_SET(bld, 'EMPTY_TARGETS', modname, True)
+        return
+
+    (sysdeps, localdeps, add_objects) = ADD_DEPENDENCIES(bld, modname, deps)
+
+    ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list)
+    ilist = bld.NORMPATH(ilist)
+    bld(
+        features = 'cc',
+        source = source_list,
+        target=modname,
+# we don't supply dependencies here, as this is just a compile, not a link
+#        uselib_local = localdeps,
+#        uselib = sysdeps,
+#        add_objects = add_objects,
+        includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist)
 Build.BuildContext.SAMBA_MODULE = SAMBA_MODULE
 
+
 #################################################################
 # define a Samba subsystem
 def SAMBA_SUBSYSTEM(bld, modname, source_list,
@@ -458,8 +614,28 @@ def SAMBA_SUBSYSTEM(bld, modname, source_list,
                     autoproto=None,
                     cflags=None,
                     init_function_sentinal=None):
-    bld.SAMBA_LIBRARY(modname, source_list,
-                      deps=deps, include_list=include_list)
+
+    if not SET_TARGET_TYPE(bld, modname, 'SUBSYSTEM'):
+        return
+
+    # remember empty subsystems, so we can strip the dependencies
+    if (source_list == '') or (source_list == []):
+        LOCAL_CACHE_SET(bld, 'EMPTY_TARGETS', modname, True)
+        return
+
+    (sysdeps, localdeps, add_objects) = ADD_DEPENDENCIES(bld, modname, deps)
+
+    ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list)
+    ilist = bld.NORMPATH(ilist)
+    bld(
+        features = 'cc',
+        source = source_list,
+        target=modname,
+# we don't supply dependencies here, as this is just a compile, not a link
+#        uselib_local = localdeps,
+#        uselib = sysdeps,
+#        add_objects = add_objects,
+        includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist)
 Build.BuildContext.SAMBA_SUBSYSTEM = SAMBA_SUBSYSTEM
 
 
@@ -467,9 +643,14 @@ Build.BuildContext.SAMBA_SUBSYSTEM = SAMBA_SUBSYSTEM
 # add a new set of build rules from a subdirectory
 # the @runonce decorator ensures we don't end up
 # with duplicate rules
-@runonce
 def BUILD_SUBDIR(bld, dir):
+    path = os.path.normpath(bld.curdir + '/' + dir)
+    cache = LOCAL_CACHE(bld, 'SUBDIR_LIST')
+    if path in cache: return
+    cache[path] = True
+    debug("build: Processing subdirectory %s" % dir)
     bld.add_subdirs(dir)
+
 Build.BuildContext.BUILD_SUBDIR = BUILD_SUBDIR
 
 
@@ -482,7 +663,7 @@ def exec_command(self, cmd, **kw):
     _cmd = cmd
     if isinstance(cmd, list):
         _cmd = ' '.join(cmd)
-    Logs.debug('runner: %s' % _cmd)
+    debug('runner: %s' % _cmd)
     if self.log:
         self.log.write('%s\n' % cmd)
         kw['log'] = self.log
@@ -495,3 +676,25 @@ def exec_command(self, cmd, **kw):
 Build.BuildContext.exec_command = exec_command
 
 
+###########################################################
+# list the build targets
+def cmd_list(ctx):
+    '''List the build targets'''
+    import Utils, Environment
+    proj = Environment.Environment(Options.lockfile)
+    bld_cls = getattr(Utils.g_module, 'build_context', Utils.Context)
+    bld = bld_cls()
+    bld.load_dirs(proj['srcdir'], proj['blddir'])
+    bld.load_envs()
+    targets = bld.env['TARGET_TYPE']
+    for t in targets:
+        print "Target %20s of type %s" % (t, targets[t])
+
+
+###########################################################
+# add some extra top level targets
+@runonce
+def add_extra_targets():
+    import Utils
+    setattr(Utils.g_module, 'list', cmd_list)
+
diff --git a/source4/dsdb/wscript_build b/source4/dsdb/wscript_build
new file mode 100644 (file)
index 0000000..3db27c3
--- /dev/null
@@ -0,0 +1,52 @@
+# AUTOGENERATED by mktowscript.pl from ../../source4/dsdb/config.mk
+# Please remove this notice if hand editing
+
+bld.BUILD_SUBDIR('samdb/ldb_modules')
+
+bld.SAMBA_SUBSYSTEM('SAMDB',
+       'samdb/samdb.c samdb/samdb_privilege.c samdb/cracknames.c repl/replicated_objects.c',
+       autoproto='samdb/samdb_proto.h',
+       public_deps='HEIMDAL_KRB5',
+       deps='LIBNDR NDR_DRSUAPI NDR_DRSBLOBS NSS_WRAPPER auth_system_session LIBCLI_AUTH LIBNDR SAMDB_SCHEMA LDB_WRAP SAMDB_COMMON LIBCLI_DRSUAPI LIBCLI_LDAP_NDR LIBSAMBA-UTIL'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('SAMDB_COMMON',
+       'samdb/ldb_modules/util.c ./common/util.c common/dsdb_dn.c ./common/tests/dsdb_dn.c ../../libds/common/flag_mapping.c',
+       autoproto='common/proto.h',
+       deps='ldb NDR_DRSBLOBS LIBCLI_LDAP_NDR UTIL_LDB LIBCLI_AUTH'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('SAMDB_SCHEMA',
+       'schema/schema_init.c schema/schema_set.c schema/schema_query.c schema/tests/schema_syntax.c ./schema/schema_syntax.c schema/schema_description.c schema/schema_convert_to_ol.c schema/schema_inferiors.c schema/schema_prefixmap.c',
+       autoproto='schema/proto.h',
+       deps='SAMDB_COMMON NDR_DRSUAPI NDR_DRSBLOBS LDBSAMBA'
+       )
+
+
+bld.SAMBA_MODULE('DREPL_SRV',
+       'repl/drepl_service.c repl/drepl_periodic.c repl/drepl_partitions.c repl/drepl_out_pull.c repl/drepl_out_helpers.c repl/drepl_notify.c repl/drepl_ridalloc.c',
+       autoproto='repl/drepl_service_proto.h',
+       subsystem='service',
+       init_function='server_service_drepl_init',
+       deps='SAMDB process_model RPC_NDR_DRSUAPI'
+       )
+
+
+bld.SAMBA_MODULE('KCC_SRV',
+       'kcc/kcc_service.c kcc/kcc_connection.c kcc/kcc_topology.c kcc/kcc_deleted.c kcc/kcc_periodic.c kcc/kcc_drs_replica_info.c',
+       autoproto='kcc/kcc_service_proto.h',
+       subsystem='service',
+       init_function='server_service_kcc_init',
+       deps='SAMDB process_model RPC_NDR_DRSUAPI'
+       )
+
+
+bld.SAMBA_MODULE('DNS_UPDATE_SRV',
+       'dns/dns_update.c',
+       subsystem='service',
+       init_function='server_service_dnsupdate_init',
+       deps='SAMDB process_model UTIL_RUNCMD'
+       )
+
diff --git a/source4/heimdal_build/wscript_build b/source4/heimdal_build/wscript_build
new file mode 100644 (file)
index 0000000..3a66f57
--- /dev/null
@@ -0,0 +1,304 @@
+bld.SAMBA_ASN1('HEIMDAL_SPNEGO_ASN1',
+       '../heimdal/lib/gssapi/spnego/spnego.asn1',
+       options='--sequence=MechTypeList',
+       directory='lib/gssapi'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_GSSAPI_ASN1',
+       '../heimdal/lib/gssapi/mech/gssapi.asn1',
+       directory='lib/gssapi'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_KRB5_ASN1',
+       '../heimdal/lib/asn1/krb5.asn1',
+       options='--option-file=krb5.opt',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_DIGEST_ASN1',
+       '../heimdal/lib/asn1/digest.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_PKCS8_ASN1',
+       '../heimdal/lib/asn1/pkcs8.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_PKCS9_ASN1',
+       '../heimdal/lib/asn1/pkcs9.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_PKCS12_ASN1',
+       '../heimdal/lib/asn1/pkcs12.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_RFC2459_ASN1',
+       '../heimdal/lib/asn1/rfc2459.asn1',
+       options='--preserve-binary=TBSCertificate --preserve-binary=TBSCRLCertList --preserve-binary=Name --sequence=GeneralNames --sequence=Extensions --sequence=CRLDistributionPoints',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_PKINIT_ASN1',
+       '../heimdal/lib/asn1/pkinit.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_CMS_ASN1',
+       '../heimdal/lib/asn1/cms.asn1',
+       options='--option-file=cms.opt',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_OCSP_ASN1',
+       '../heimdal/lib/hx509/ocsp.asn1',
+       options='--preserve-binary=OCSPTBSRequest --preserve-binary=OCSPResponseData',
+       directory='lib/hx509'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_KX509_ASN1',
+       '../heimdal/lib/asn1/kx509.asn1',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_PKCS10_ASN1',
+       '../heimdal/lib/hx509/pkcs10.asn1',
+       options='--preserve-binary=CertificationRequestInfo',
+       directory='lib/hx509'
+       )
+
+
+bld.SAMBA_ASN1('HEIMDAL_HDB_ASN1',
+       '../heimdal/lib/hdb/hdb.asn1',
+       directory='lib/hdb'
+       )
+
+bld.SAMBA_ERRTABLE('HEIMDAL_ASN1_ERR_ET',
+       '../heimdal/lib/asn1/asn1_err.et',
+       directory='lib/asn1'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_HDB_ERR_ET',
+       '../heimdal/lib/hdb/hdb_err.et',
+       directory='lib/hdb'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_HEIM_ERR_ET',
+       '../heimdal/lib/krb5/heim_err.et',
+       directory='lib/krb5'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_K524_ERR_ET',
+       '../heimdal/lib/krb5/k524_err.et',
+       directory='lib/krb5'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_KRB_ERR_ET',
+       '../heimdal/lib/krb5/krb_err.et',
+       directory='lib/krb5'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_KRB5_ERR_ET',
+       '../heimdal/lib/krb5/krb5_err.et',
+       directory='lib/krb5'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_GKRB5_ERR_ET',
+       '../heimdal/lib/gssapi/krb5/gkrb5_err.et',
+       directory='lib/gssapi'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_HX509_ERR_ET',
+       '../heimdal/lib/hx509/hx509_err.et',
+       directory='lib/hx509'
+       )
+
+
+bld.SAMBA_ERRTABLE('HEIMDAL_WIND_ERR_ET',
+       '../heimdal/lib/wind/wind_err.et',
+       directory='lib/wind'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_KDC',
+       '../heimdal/kdc/default_config.c ../heimdal/kdc/kerberos5.c ../heimdal/kdc/krb5tgs.c ../heimdal/kdc/pkinit.c ../heimdal/kdc/log.c ../heimdal/kdc/misc.c ../heimdal/kdc/kaserver.c ../heimdal/kdc/digest.c ../heimdal/kdc/process.c ../heimdal/kdc/windc.c ../heimdal/kdc/kx509.c',
+       cflags='-I../heimdal_build -I../heimdal/kdc',
+       deps='HEIMDAL_ROKEN HEIMDAL_KRB5 HEIMDAL_HDB HEIMDAL_HEIM_ASN1 HEIMDAL_DIGEST_ASN1 HEIMDAL_KX509_ASN1 HEIMDAL_NTLM HEIMDAL_HCRYPTO'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_NTLM',
+       '../heimdal/lib/ntlm/ntlm.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/ntlm',
+       deps='HEIMDAL_ROKEN HEIMDAL_HCRYPTO HEIMDAL_KRB5'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HDB_KEYS',
+       '../heimdal/lib/hdb/keys.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/hdb',
+       deps='HEIMDAL_ROKEN HEIMDAL_HCRYPTO HEIMDAL_KRB5 HEIMDAL_HDB_ASN1'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HDB',
+       '../heimdal/lib/hdb/db.c ../heimdal/lib/hdb/dbinfo.c ../heimdal/lib/hdb/ext.c ../heimdal/lib/hdb/keytab.c ../heimdal/lib/hdb/mkey.c ../heimdal/lib/hdb/ndbm.c ../heimdal/lib/hdb/hdb_err.c hdb-glue.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/hdb',
+       deps='HDB_LDB HEIMDAL_KRB5 HEIMDAL_HDB_KEYS HEIMDAL_ROKEN HEIMDAL_HCRYPTO HEIMDAL_COM_ERR HEIMDAL_HDB_ASN1'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_GSSAPI',
+       '../heimdal/lib/gssapi/spnego/init_sec_context.c ../heimdal/lib/gssapi/spnego/external.c ../heimdal/lib/gssapi/spnego/compat.c ../heimdal/lib/gssapi/spnego/context_stubs.c ../heimdal/lib/gssapi/spnego/cred_stubs.c ../heimdal/lib/gssapi/spnego/accept_sec_context.c ../heimdal/lib/gssapi/krb5/copy_ccache.c ../heimdal/lib/gssapi/krb5/delete_sec_context.c ../heimdal/lib/gssapi/krb5/init_sec_context.c ../heimdal/lib/gssapi/krb5/context_time.c ../heimdal/lib/gssapi/krb5/init.c ../heimdal/lib/gssapi/krb5/address_to_krb5addr.c ../heimdal/lib/gssapi/krb5/get_mic.c ../heimdal/lib/gssapi/krb5/inquire_context.c ../heimdal/lib/gssapi/krb5/add_cred.c ../heimdal/lib/gssapi/krb5/inquire_cred.c ../heimdal/lib/gssapi/krb5/inquire_cred_by_oid.c ../heimdal/lib/gssapi/krb5/inquire_cred_by_mech.c ../heimdal/lib/gssapi/krb5/inquire_mechs_for_name.c ../heimdal/lib/gssapi/krb5/inquire_names_for_mech.c ../heimdal/lib/gssapi/krb5/indicate_mechs.c ../heimdal/lib/gssapi/krb5/inquire_sec_context_by_oid.c ../heimdal/lib/gssapi/krb5/export_sec_context.c ../heimdal/lib/gssapi/krb5/import_sec_context.c ../heimdal/lib/gssapi/krb5/duplicate_name.c ../heimdal/lib/gssapi/krb5/import_name.c ../heimdal/lib/gssapi/krb5/compare_name.c ../heimdal/lib/gssapi/krb5/export_name.c ../heimdal/lib/gssapi/krb5/canonicalize_name.c ../heimdal/lib/gssapi/krb5/unwrap.c ../heimdal/lib/gssapi/krb5/wrap.c ../heimdal/lib/gssapi/krb5/release_name.c ../heimdal/lib/gssapi/krb5/cfx.c ../heimdal/lib/gssapi/krb5/8003.c ../heimdal/lib/gssapi/krb5/arcfour.c ../heimdal/lib/gssapi/krb5/encapsulate.c ../heimdal/lib/gssapi/krb5/display_name.c ../heimdal/lib/gssapi/krb5/sequence.c ../heimdal/lib/gssapi/krb5/display_status.c ../heimdal/lib/gssapi/krb5/release_buffer.c ../heimdal/lib/gssapi/krb5/external.c ../heimdal/lib/gssapi/krb5/compat.c ../heimdal/lib/gssapi/krb5/creds.c ../heimdal/lib/gssapi/krb5/acquire_cred.c ../heimdal/lib/gssapi/krb5/release_cred.c ../heimdal/lib/gssapi/krb5/store_cred.c ../heimdal/lib/gssapi/krb5/set_cred_option.c ../heimdal/lib/gssapi/krb5/decapsulate.c ../heimdal/lib/gssapi/krb5/verify_mic.c ../heimdal/lib/gssapi/krb5/accept_sec_context.c ../heimdal/lib/gssapi/krb5/set_sec_context_option.c ../heimdal/lib/gssapi/krb5/process_context_token.c ../heimdal/lib/gssapi/krb5/prf.c ../heimdal/lib/gssapi/krb5/aeap.c ../heimdal/lib/gssapi/mech/context.c ../heimdal/lib/gssapi/mech/gss_krb5.c ../heimdal/lib/gssapi/mech/gss_mech_switch.c ../heimdal/lib/gssapi/mech/gss_process_context_token.c ../heimdal/lib/gssapi/mech/gss_buffer_set.c ../heimdal/lib/gssapi/mech/gss_aeap.c ../heimdal/lib/gssapi/mech/gss_add_cred.c ../heimdal/lib/gssapi/mech/gss_cred.c ../heimdal/lib/gssapi/mech/gss_add_oid_set_member.c ../heimdal/lib/gssapi/mech/gss_compare_name.c ../heimdal/lib/gssapi/mech/gss_release_oid_set.c ../heimdal/lib/gssapi/mech/gss_create_empty_oid_set.c ../heimdal/lib/gssapi/mech/gss_decapsulate_token.c ../heimdal/lib/gssapi/mech/gss_inquire_cred_by_oid.c ../heimdal/lib/gssapi/mech/gss_canonicalize_name.c ../heimdal/lib/gssapi/mech/gss_inquire_sec_context_by_oid.c ../heimdal/lib/gssapi/mech/gss_inquire_names_for_mech.c ../heimdal/lib/gssapi/mech/gss_inquire_mechs_for_name.c ../heimdal/lib/gssapi/mech/gss_wrap_size_limit.c ../heimdal/lib/gssapi/mech/gss_names.c ../heimdal/lib/gssapi/mech/gss_verify.c ../heimdal/lib/gssapi/mech/gss_display_name.c ../heimdal/lib/gssapi/mech/gss_duplicate_oid.c ../heimdal/lib/gssapi/mech/gss_display_status.c ../heimdal/lib/gssapi/mech/gss_release_buffer.c ../heimdal/lib/gssapi/mech/gss_release_oid.c ../heimdal/lib/gssapi/mech/gss_test_oid_set_member.c ../heimdal/lib/gssapi/mech/gss_release_cred.c ../heimdal/lib/gssapi/mech/gss_set_sec_context_option.c ../heimdal/lib/gssapi/mech/gss_export_name.c ../heimdal/lib/gssapi/mech/gss_seal.c ../heimdal/lib/gssapi/mech/gss_acquire_cred.c ../heimdal/lib/gssapi/mech/gss_unseal.c ../heimdal/lib/gssapi/mech/gss_verify_mic.c ../heimdal/lib/gssapi/mech/gss_accept_sec_context.c ../heimdal/lib/gssapi/mech/gss_inquire_cred_by_mech.c ../heimdal/lib/gssapi/mech/gss_indicate_mechs.c ../heimdal/lib/gssapi/mech/gss_delete_sec_context.c ../heimdal/lib/gssapi/mech/gss_sign.c ../heimdal/lib/gssapi/mech/gss_utils.c ../heimdal/lib/gssapi/mech/gss_init_sec_context.c ../heimdal/lib/gssapi/mech/gss_oid_equal.c ../heimdal/lib/gssapi/mech/gss_oid_to_str.c ../heimdal/lib/gssapi/mech/gss_context_time.c ../heimdal/lib/gssapi/mech/gss_encapsulate_token.c ../heimdal/lib/gssapi/mech/gss_get_mic.c ../heimdal/lib/gssapi/mech/gss_import_sec_context.c ../heimdal/lib/gssapi/mech/gss_inquire_cred.c ../heimdal/lib/gssapi/mech/gss_wrap.c ../heimdal/lib/gssapi/mech/gss_import_name.c ../heimdal/lib/gssapi/mech/gss_duplicate_name.c ../heimdal/lib/gssapi/mech/gss_unwrap.c ../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',
+       cflags='-I../heimdal_build -I../heimdal/lib/gssapi -I../heimdal/lib/gssapi/gssapi -I../heimdal/lib/gssapi/spnego -I../heimdal/lib/gssapi/krb5 -I../heimdal/lib/gssapi/mech',
+       deps='HEIMDAL_HCRYPTO HEIMDAL_HEIM_ASN1 HEIMDAL_SPNEGO_ASN1 HEIMDAL_GSSAPI_ASN1 HEIMDAL_ROKEN HEIMDAL_KRB5'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_KRB5',
+       '../heimdal/lib/krb5/acache.c ../heimdal/lib/krb5/add_et_list.c ../heimdal/lib/krb5/addr_families.c ../heimdal/lib/krb5/appdefault.c ../heimdal/lib/krb5/asn1_glue.c ../heimdal/lib/krb5/auth_context.c ../heimdal/lib/krb5/build_ap_req.c ../heimdal/lib/krb5/build_auth.c ../heimdal/lib/krb5/cache.c ../heimdal/lib/krb5/changepw.c ../heimdal/lib/krb5/codec.c ../heimdal/lib/krb5/config_file.c ../heimdal/lib/krb5/constants.c ../heimdal/lib/krb5/context.c ../heimdal/lib/krb5/convert_creds.c ../heimdal/lib/krb5/copy_host_realm.c ../heimdal/lib/krb5/crc.c ../heimdal/lib/krb5/creds.c ../heimdal/lib/krb5/crypto.c ../heimdal/lib/krb5/data.c ../heimdal/lib/krb5/eai_to_heim_errno.c ../heimdal/lib/krb5/error_string.c ../heimdal/lib/krb5/expand_hostname.c ../heimdal/lib/krb5/fcache.c ../heimdal/lib/krb5/free.c ../heimdal/lib/krb5/free_host_realm.c ../heimdal/lib/krb5/generate_seq_number.c ../heimdal/lib/krb5/generate_subkey.c ../heimdal/lib/krb5/get_addrs.c ../heimdal/lib/krb5/get_cred.c ../heimdal/lib/krb5/get_default_principal.c ../heimdal/lib/krb5/get_default_realm.c ../heimdal/lib/krb5/get_for_creds.c ../heimdal/lib/krb5/get_host_realm.c ../heimdal/lib/krb5/get_in_tkt.c ../heimdal/lib/krb5/get_port.c ../heimdal/lib/krb5/init_creds.c ../heimdal/lib/krb5/init_creds_pw.c ../heimdal/lib/krb5/kcm.c ../heimdal/lib/krb5/keyblock.c ../heimdal/lib/krb5/keytab.c ../heimdal/lib/krb5/keytab_any.c ../heimdal/lib/krb5/keytab_file.c ../heimdal/lib/krb5/keytab_memory.c ../heimdal/lib/krb5/keytab_keyfile.c ../heimdal/lib/krb5/krbhst.c ../heimdal/lib/krb5/log.c ../heimdal/lib/krb5/mcache.c ../heimdal/lib/krb5/misc.c ../heimdal/lib/krb5/mk_error.c ../heimdal/lib/krb5/mk_priv.c ../heimdal/lib/krb5/mk_rep.c ../heimdal/lib/krb5/mk_req.c ../heimdal/lib/krb5/mk_req_ext.c ../heimdal/lib/krb5/mit_glue.c ../heimdal/lib/krb5/n-fold.c ../heimdal/lib/krb5/padata.c ../heimdal/lib/krb5/pkinit.c ../heimdal/lib/krb5/plugin.c ../heimdal/lib/krb5/principal.c ../heimdal/lib/krb5/prog_setup.c ../heimdal/lib/krb5/pac.c ../heimdal/lib/krb5/prompter_posix.c ../heimdal/lib/krb5/rd_cred.c ../heimdal/lib/krb5/rd_error.c ../heimdal/lib/krb5/rd_priv.c ../heimdal/lib/krb5/rd_rep.c ../heimdal/lib/krb5/rd_req.c ../heimdal/lib/krb5/replay.c ../heimdal/lib/krb5/send_to_kdc.c ../heimdal/lib/krb5/set_default_realm.c ../heimdal/lib/krb5/store.c ../heimdal/lib/krb5/store_emem.c ../heimdal/lib/krb5/store_fd.c ../heimdal/lib/krb5/store_mem.c ../heimdal/lib/krb5/ticket.c ../heimdal/lib/krb5/time.c ../heimdal/lib/krb5/transited.c ../heimdal/lib/krb5/v4_glue.c ../heimdal/lib/krb5/version.c ../heimdal/lib/krb5/warn.c ../heimdal/lib/krb5/krb5_err.c ../heimdal/lib/krb5/heim_err.c ../heimdal/lib/krb5/k524_err.c krb5-glue.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/krb5 -I../heimdal/lib/asn1 -I../heimdal/lib/com_err',
+       public_deps='HEIMDAL_COM_ERR',
+       deps='HEIMDAL_ROKEN HEIMDAL_PKINIT_ASN1 HEIMDAL_WIND HEIMDAL_KRB5_ASN1 HEIMDAL_HX509 HEIMDAL_HCRYPTO LIBNETIF LIBSAMBA-HOSTCONFIG INTL'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HEIM_ASN1',
+       '../heimdal/lib/asn1/der_get.c ../heimdal/lib/asn1/der_put.c ../heimdal/lib/asn1/der_free.c ../heimdal/lib/asn1/der_format.c ../heimdal/lib/asn1/der_length.c ../heimdal/lib/asn1/der_copy.c ../heimdal/lib/asn1/der_cmp.c ../heimdal/lib/asn1/extra.c ../heimdal/lib/asn1/timegm.c ../heimdal/lib/asn1/asn1_err.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/asn1',
+       deps='HEIMDAL_ROKEN HEIMDAL_COM_ERR'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HCRYPTO_IMATH',
+       '../heimdal/lib/hcrypto/imath/imath.c ../heimdal/lib/hcrypto/imath/iprime.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/hcrypto/imath',
+       deps='HEIMDAL_ROKEN'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HCRYPTO',
+       '../heimdal/lib/hcrypto/aes.c ../heimdal/lib/hcrypto/bn.c ../heimdal/lib/hcrypto/dh.c ../heimdal/lib/hcrypto/dh-imath.c ../heimdal/lib/hcrypto/des.c ../heimdal/lib/hcrypto/dsa.c ../heimdal/lib/hcrypto/engine.c ../heimdal/lib/hcrypto/md2.c ../heimdal/lib/hcrypto/md4.c ../heimdal/lib/hcrypto/md5.c ../heimdal/lib/hcrypto/rsa.c ../heimdal/lib/hcrypto/rsa-imath.c ../heimdal/lib/hcrypto/rc2.c ../heimdal/lib/hcrypto/rc4.c ../heimdal/lib/hcrypto/rijndael-alg-fst.c ../heimdal/lib/hcrypto/rnd_keys.c ../heimdal/lib/hcrypto/sha.c ../heimdal/lib/hcrypto/sha256.c ../heimdal/lib/hcrypto/ui.c ../heimdal/lib/hcrypto/evp.c ../heimdal/lib/hcrypto/evp-hcrypto.c ../heimdal/lib/hcrypto/evp-cc.c ../heimdal/lib/hcrypto/pkcs5.c ../heimdal/lib/hcrypto/pkcs12.c ../heimdal/lib/hcrypto/rand.c ../heimdal/lib/hcrypto/rand-egd.c ../heimdal/lib/hcrypto/rand-unix.c ../heimdal/lib/hcrypto/rand-fortuna.c ../heimdal/lib/hcrypto/rand-timer.c ../heimdal/lib/hcrypto/hmac.c ../heimdal/lib/hcrypto/camellia.c ../heimdal/lib/hcrypto/camellia-ntt.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/hcrypto -I../heimdal/lib',
+       deps='HEIMDAL_ROKEN HEIMDAL_HEIM_ASN1 HEIMDAL_HCRYPTO_IMATH HEIMDAL_RFC2459_ASN1'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_HX509',
+       '../heimdal/lib/hx509/ca.c ../heimdal/lib/hx509/cert.c ../heimdal/lib/hx509/cms.c ../heimdal/lib/hx509/collector.c ../heimdal/lib/hx509/crypto.c ../heimdal/lib/hx509/error.c ../heimdal/lib/hx509/env.c ../heimdal/lib/hx509/file.c ../heimdal/lib/hx509/keyset.c ../heimdal/lib/hx509/ks_dir.c ../heimdal/lib/hx509/ks_file.c ../heimdal/lib/hx509/ks_keychain.c ../heimdal/lib/hx509/ks_mem.c ../heimdal/lib/hx509/ks_null.c ../heimdal/lib/hx509/ks_p11.c ../heimdal/lib/hx509/ks_p12.c ../heimdal/lib/hx509/lock.c ../heimdal/lib/hx509/name.c ../heimdal/lib/hx509/peer.c ../heimdal/lib/hx509/print.c ../heimdal/lib/hx509/req.c ../heimdal/lib/hx509/revoke.c ../heimdal/lib/hx509/sel.c ../heimdal/lib/hx509/hx509_err.c ../heimdal/lib/hx509/sel-lex.c ../heimdal/lib/hx509/sel-gram.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/hx509',
+       deps='HEIMDAL_ROKEN HEIMDAL_COM_ERR HEIMDAL_HEIM_ASN1 HEIMDAL_HCRYPTO HEIMDAL_CMS_ASN1 HEIMDAL_RFC2459_ASN1 HEIMDAL_OCSP_ASN1 HEIMDAL_PKCS8_ASN1 HEIMDAL_PKCS9_ASN1 HEIMDAL_PKCS12_ASN1 HEIMDAL_PKINIT_ASN1 HEIMDAL_PKCS10_ASN1 HEIMDAL_WIND'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_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',
+       cflags='-I../heimdal_build -I../heimdal/lib/wind',
+       deps='HEIMDAL_ROKEN HEIMDAL_COM_ERR'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN_PROGNAME',
+       '../heimdal/lib/roken/getprogname.c ../heimdal/lib/roken/setprogname.c',
+        config_option='HAVE_GETPROGNAME'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN_CLOSEFROM',
+       '../heimdal/lib/roken/closefrom.c',
+        config_option='HAVE_CLOSEFROM'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN_PROGNAME_H',
+       '../heimdal/lib/roken/getprogname.c ../heimdal/lib/roken/setprogname.c',
+        cflags='-DSOCKET_WRAPPER_DISABLE=1 -DNSS_WRAPPER_DISABLE=1',
+        config_option='HAVE_GETPROGNAME'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN_CLOSEFROM_H',
+       '../heimdal/lib/roken/closefrom.c',
+        cflags='-DSOCKET_WRAPPER_DISABLE=1 -DNSS_WRAPPER_DISABLE=1',
+        config_option='HAVE_CLOSEFROM'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN',
+       '../heimdal/lib/roken/base64.c ../heimdal/lib/roken/ct.c ../heimdal/lib/roken/hex.c ../heimdal/lib/roken/bswap.c ../heimdal/lib/roken/dumpdata.c ../heimdal/lib/roken/emalloc.c ../heimdal/lib/roken/ecalloc.c ../heimdal/lib/roken/getarg.c ../heimdal/lib/roken/get_window_size.c ../heimdal/lib/roken/getdtablesize.c ../heimdal/lib/roken/h_errno.c ../heimdal/lib/roken/issuid.c ../heimdal/lib/roken/net_read.c ../heimdal/lib/roken/net_write.c ../heimdal/lib/roken/socket.c ../heimdal/lib/roken/parse_time.c ../heimdal/lib/roken/parse_units.c ../heimdal/lib/roken/resolve.c ../heimdal/lib/roken/roken_gethostby.c ../heimdal/lib/roken/signal.c ../heimdal/lib/roken/vis.c ../heimdal/lib/roken/strlwr.c ../heimdal/lib/roken/strsep_copy.c ../heimdal/lib/roken/strsep.c ../heimdal/lib/roken/strupr.c ../heimdal/lib/roken/strpool.c ../heimdal/lib/roken/estrdup.c ../heimdal/lib/roken/erealloc.c ../heimdal/lib/roken/simple_exec.c ../heimdal/lib/roken/strcollect.c ../heimdal/lib/roken/rtbl.c ../heimdal/lib/roken/cloexec.c ../heimdal/lib/roken/xfree.c replace.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/roken -I../heimdal/include -I$(socketwrappersrcdir)',
+       deps='HEIMDAL_ROKEN_PROGNAME HEIMDAL_ROKEN_CLOSEFROM resolv LIBREPLACE_NETWORK UID_WRAPPER'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_ROKEN_H',
+       '../heimdal/lib/roken/base64.c ../heimdal/lib/roken/ct.c ../heimdal/lib/roken/hex.c ../heimdal/lib/roken/bswap.c ../heimdal/lib/roken/dumpdata.c ../heimdal/lib/roken/emalloc.c ../heimdal/lib/roken/ecalloc.c ../heimdal/lib/roken/getarg.c ../heimdal/lib/roken/get_window_size.c ../heimdal/lib/roken/getdtablesize.c ../heimdal/lib/roken/h_errno.c ../heimdal/lib/roken/issuid.c ../heimdal/lib/roken/net_read.c ../heimdal/lib/roken/net_write.c ../heimdal/lib/roken/socket.c ../heimdal/lib/roken/parse_time.c ../heimdal/lib/roken/parse_units.c ../heimdal/lib/roken/resolve.c ../heimdal/lib/roken/roken_gethostby.c ../heimdal/lib/roken/signal.c ../heimdal/lib/roken/vis.c ../heimdal/lib/roken/strlwr.c ../heimdal/lib/roken/strsep_copy.c ../heimdal/lib/roken/strsep.c ../heimdal/lib/roken/strupr.c ../heimdal/lib/roken/strpool.c ../heimdal/lib/roken/estrdup.c ../heimdal/lib/roken/erealloc.c ../heimdal/lib/roken/simple_exec.c ../heimdal/lib/roken/strcollect.c ../heimdal/lib/roken/rtbl.c ../heimdal/lib/roken/cloexec.c ../heimdal/lib/roken/xfree.c replace.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/roken -DSOCKET_WRAPPER_DISABLE=1 -DNSS_WRAPPER_DISABLE=1',
+       deps='HEIMDAL_ROKEN_PROGNAME_H HEIMDAL_ROKEN_CLOSEFROM_H resolv LIBREPLACE_NETWORK'
+       )
+
+
+bld.SAMBA_SUBSYSTEM('HEIMDAL_COM_ERR',
+       '../heimdal/lib/com_err/com_err.c ../heimdal/lib/com_err/error.c',
+       cflags='-I../heimdal_build -I../heimdal/lib/com_err',
+       deps='HEIMDAL_ROKEN',
+        config_option='HAVE_COM_ERR'
+       )
+
+
+bld.SAMBA_BINARY('asn1_compile',
+       '../heimdal/lib/asn1/main.c ../heimdal/lib/asn1/gen.c ../heimdal/lib/asn1/gen_copy.c ../heimdal/lib/asn1/gen_decode.c ../heimdal/lib/asn1/gen_encode.c ../heimdal/lib/asn1/gen_free.c ../heimdal/lib/asn1/gen_glue.c ../heimdal/lib/asn1/gen_length.c ../heimdal/lib/asn1/gen_seq.c ../heimdal/lib/asn1/hash.c ../heimdal/lib/asn1/symbol.c ../heimdal/lib/asn1/asn1parse.c ../heimdal/lib/asn1/lex.c ../heimdal/lib/vers/print_version.c',
+       use_hostcc=True,
+        cflags='-DSOCKET_WRAPPER_DISABLE=1 -DNSS_WRAPPER_DISABLE=1 -D_SAMBA_HOSTCC_ -I../heimdal_build',
+        group='build_compilers',
+       deps='HEIMDAL_ROKEN_H replace',
+       )
+
+
+bld.SAMBA_BINARY('compile_et',
+       '../heimdal/lib/vers/print_version.c ../heimdal/lib/com_err/parse.c ../heimdal/lib/com_err/lex.c ../heimdal/lib/com_err/compile_et.c',
+       use_hostcc=True,
+        group='build_compilers',
+        cflags='-DSOCKET_WRAPPER_DISABLE=1 -DNSS_WRAPPER_DISABLE=1',
+       deps='HEIMDAL_ROKEN_H'
+       )
+
+
+bld.SAMBA_BINARY('samba4kinit',
+       '../heimdal/kuser/kinit.c ../heimdal/lib/vers/print_version.c',
+       deps='HEIMDAL_KRB5 HEIMDAL_NTLM'
+       )
+
+
+bld.SAMBA_BINARY('samba4kpasswd',
+       '../heimdal/kpasswd/kpasswd.c ../heimdal/lib/vers/print_version.c',
+       deps='HEIMDAL_KRB5 HEIMDAL_NTLM'
+       )
+
+
+bld.SAMBA_BINARY('rkpty',
+       '../heimdal/lib/roken/rkpty.c ../../lib/socket_wrapper/socket_wrapper.c',
+       deps='HEIMDAL_ROKEN OPENPTY'
+       )
+
diff --git a/source4/heimdal_build/wscript_configure b/source4/heimdal_build/wscript_configure
new file mode 100644 (file)
index 0000000..b56b4f5
--- /dev/null
@@ -0,0 +1,37 @@
+conf.CHECK_TYPE('u_char', 'uint8_t')
+conf.CHECK_TYPE('u_int32_t', 'uint32_t')
+
+conf.CHECK_HEADERS('err.h')
+
+conf.CHECK_HEADERS('ifaddrs.h')
+conf.CHECK_HEADERS('''crypt.h curses.h errno.h inttypes.h netdb.h signal.h sys/bswap.h
+                     sys/file.h sys/stropts.h sys/timeb.h sys/times.h sys/uio.h sys/un.h
+                     sys/utsname.h term.h termcap.h time.h timezone.h ttyname.h netinet/in.h
+                     netinet/in6.h netinet6/in6.h libintl.h''')
+
+conf.CHECK_FUNCS('''atexit cgetent getprogname setprogname inet_aton gethostname getnameinfo
+                    iruserok putenv rcmd readv sendmsg setitimer socket strlwr strncasecmp
+                   strptime strsep strsep_copy strtok_r strupr swab umask uname unsetenv
+                   closefrom hstrerror err warn errx warnx flock getipnodebyname
+                   getipnodebyaddr freehostent writev''')
+
+conf.CHECK_FUNCS('bswap16')
+conf.CHECK_FUNCS('bswap32')
+
+conf.DEFINE('HAVE_KRB_STRUCT_WINSIZE', 1)
+conf.DEFINE('VOID_RETSIGTYPE', 1)
+conf.CHECK_VARIABLE('h_errno')
+
+conf.CHECK_HEADERS('arpa/nameser.h dns.h')
+conf.CHECK_FUNCS_IN('res_search res_nsearch res_ndestroy dns_search dn_expand', 'resolv')
+conf.CHECK_VARIABLE('_res')
+conf.CHECK_HEADERS('pty.h util.h libutil.h')
+conf.CHECK_FUNCS_IN('openpty', 'util')
+conf.CHECK_FUNCS_IN('gettext', 'intl')
+
+
+conf.DEFINE('HAVE_COM_ERR',1)
+conf.DEFINE('HAVE_KRB5',1)
+conf.DEFINE('HAVE_GSSAPI',1)
+
+conf.DEFINE('SAMBA4_INTERNAL_HEIMDAL', 1)
index f18e54ca53e48b9b930295637836d5214cea741c..b1a59a04087e081baefbf33eacf23a701192e3dc 100644 (file)
@@ -1,7 +1,80 @@
 # top level waf build script for samba4
 
+bld.PREDECLARE('LIBNDR', 'LIBRARY')
+bld.PREDECLARE('LIBSAMBA-UTIL', 'LIBRARY')
+bld.PREDECLARE('torture', 'LIBRARY')
+bld.PREDECLARE('TORTURE_RAW', 'MODULE')
+bld.PREDECLARE('TORTURE_RAP', 'MODULE')
+bld.PREDECLARE('TORTURE_LDAP', 'MODULE')
+bld.PREDECLARE('python_dcerpc_misc', 'PYTHON')
+bld.PREDECLARE('python_dcerpc_security', 'PYTHON')
+bld.PREDECLARE('pycredentials', 'PYTHON')
+bld.PREDECLARE('pyauth', 'PYTHON')
+bld.PREDECLARE('gensec', 'LIBRARY')
+bld.PREDECLARE('registry', 'LIBRARY')
+bld.PREDECLARE('HEIMDAL_HDB_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_SPNEGO_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_GSSAPI_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_KRB5_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_DIGEST_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_PKCS8_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_PKCS9_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_PKCS12_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_RFC2459_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_PKINIT_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_CMS_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_OCSP_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_KX509_ASN1', 'ASN1')
+bld.PREDECLARE('HEIMDAL_PKCS10_ASN1', 'ASN1')
+
+# missing subsystems
+bld.SAMBA_SUBSYSTEM('pyldb_util', '')
+bld.SAMBA_SUBSYSTEM('pyldb', '')
+bld.SAMBA_SUBSYSTEM('LIBPOPT', '')
+bld.SAMBA_SUBSYSTEM('LIBCLI_SMB2', '')
+bld.SAMBA_SUBSYSTEM('dcerpc_mgmt', '')
+bld.SAMBA_SUBSYSTEM('TORTURE_LDB_MODULE', '')
+bld.SAMBA_SUBSYSTEM('INTL', '')
+bld.SAMBA_SUBSYSTEM('NDR_SAMR', '')
+bld.SAMBA_SUBSYSTEM('LIBLDB_CMDLINE', '')
+bld.SAMBA_SUBSYSTEM('NETAPI', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('SMBREADLINE', '')
+bld.SAMBA_SUBSYSTEM('OPENPTY', '')
+bld.SAMBA_SUBSYSTEM('SMBCLIENT', '')
+bld.SAMBA_SUBSYSTEM('BLKID', '')
+bld.SAMBA_SUBSYSTEM('LIBTEVENT_EXT', '')
+bld.SAMBA_SUBSYSTEM('LIBTEVENT_EXT', '')
+bld.SAMBA_SUBSYSTEM('PTHREAD', '')
+bld.SAMBA_SUBSYSTEM('CRYPT', '')
+bld.SAMBA_SUBSYSTEM('PAM', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('SASL', '')
+bld.SAMBA_SUBSYSTEM('smbcalls', '')
+bld.SAMBA_SUBSYSTEM('SMBREADLINE', '')
+bld.SAMBA_SUBSYSTEM('SMBREADLINE', '')
+bld.SAMBA_SUBSYSTEM('SETPROCTITLE', '')
+bld.SAMBA_SUBSYSTEM('ZLIB', '')
+bld.SAMBA_SUBSYSTEM('NDR_SRVSVC', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('SETPROCTITLE', '')
+bld.SAMBA_SUBSYSTEM('HDB_LDB', '')
+bld.SAMBA_SUBSYSTEM('ICONV', '')
+bld.SAMBA_SUBSYSTEM('NDR_MISC', '')
+
 bld.BUILD_SUBDIR('../lib/replace')
+bld.BUILD_SUBDIR('../lib/talloc')
+bld.BUILD_SUBDIR('../lib/tdb')
+bld.BUILD_SUBDIR('../lib/tevent')
+bld.BUILD_SUBDIR('lib/ldb')
 bld.BUILD_SUBDIR('dynconfig')
+bld.BUILD_SUBDIR('../lib/util/charset')
+bld.BUILD_SUBDIR('scripting/python')
+bld.BUILD_SUBDIR('param')
+bld.BUILD_SUBDIR('librpc')
 bld.BUILD_SUBDIR('dsdb')
 bld.BUILD_SUBDIR('smbd')
 bld.BUILD_SUBDIR('cluster')
@@ -12,8 +85,6 @@ bld.BUILD_SUBDIR('../nsswitch')
 bld.BUILD_SUBDIR('../nsswitch/libwbclient')
 bld.BUILD_SUBDIR('lib/samba3')
 bld.BUILD_SUBDIR('lib/socket')
-bld.BUILD_SUBDIR('lib/ldb')
-bld.BUILD_SUBDIR('../lib/util/charset')
 bld.BUILD_SUBDIR('lib/ldb-samba')
 bld.BUILD_SUBDIR('lib/tls')
 bld.BUILD_SUBDIR('lib/registry')
@@ -31,7 +102,6 @@ bld.BUILD_SUBDIR('../lib/crypto')
 bld.BUILD_SUBDIR('../lib/torture')
 bld.BUILD_SUBDIR('lib')
 bld.BUILD_SUBDIR('lib/com')
-bld.BUILD_SUBDIR('param')
 bld.BUILD_SUBDIR('smb_server')
 bld.BUILD_SUBDIR('rpc_server')
 bld.BUILD_SUBDIR('ldap_server')
@@ -46,12 +116,11 @@ bld.BUILD_SUBDIR('utils')
 bld.BUILD_SUBDIR('ntvfs')
 bld.BUILD_SUBDIR('ntptr')
 bld.BUILD_SUBDIR('torture')
-bld.BUILD_SUBDIR('librpc')
+bld.BUILD_SUBDIR('../librpc')
 bld.BUILD_SUBDIR('client')
 bld.BUILD_SUBDIR('libcli')
 bld.BUILD_SUBDIR('../libcli/smb')
 bld.BUILD_SUBDIR('../libcli/cldap')
-bld.BUILD_SUBDIR('scripting/python')
 bld.BUILD_SUBDIR('kdc')
 bld.BUILD_SUBDIR('../lib/smbconf')
 bld.BUILD_SUBDIR('../lib/async_req')
@@ -64,3 +133,5 @@ bld.BUILD_SUBDIR('../libcli/samsync')
 bld.BUILD_SUBDIR('../libgpo')
 bld.BUILD_SUBDIR('../libcli/named_pipe_auth')
 bld.BUILD_SUBDIR('heimdal_build')
+
+bld.CHECK_DEPENDENCIES()