Patch by Vance Lankhaar <vlankhaar@linux.ca> to automaticly regenerate the
authorAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 14:19:03 +0000 (14:19 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 14:19:03 +0000 (14:19 +0000)
build options, so we will always have the right values for how and when
an smbd was built.

In particular, this is indended to address bitrot caused by configure.in
changes.

Andrew Bartlett
(This used to be commit 2be258071c71986ba9af01e9a09ec49909a620dd)

source3/Makefile.in
source3/script/build_env.sh
source3/script/mkbuildoptions.awk [new file with mode: 0644]
source3/smbd/.cvsignore

index 5a776c4c4d803b1f60ba662640c22c867ae4ebf6..8ba76863ecf74fa1345b3a3d98d1ab690f6f2a6a 100644 (file)
@@ -694,6 +694,14 @@ dynconfig.po: dynconfig.c Makefile
 @BROKEN_CC@    -mv `echo $@ | sed -e 's%^.*/%%g' -e 's%\.po$$%.o%'` $@
 @POBAD_CC@     @mv $*.po.o $@
 
+smbd/build_options.o: smbd/build_options.c Makefile include/config.h include/build_env.h include/proto.h
+       @echo Compiling $*.c
+       @$(CC) $(FLAGS) $(PATH_FLAGS) -c $< -o $@
+
+smbd/build_options.c: include/config.h.in script/mkbuildoptions.awk
+       @echo Generating $@
+       @$(AWK) -f $(srcdir)/script/mkbuildoptions.awk > $(builddir)/smbd/build_options.c < $(srcdir)/include/config.h.in
+
 .c.po: 
        @if (: >> $@ || : > $@) >/dev/null 2>&1; then rm -f $@; else \
          dir=`echo $@ | sed 's,/[^/]*$$,,;s,^$$,.,'` $(MAKEDIR); fi
@@ -1225,7 +1233,7 @@ modules_clean:
 # afterwards.
 proto_exists: include/proto.h include/wrepld_proto.h include/build_env.h \
        nsswitch/winbindd_proto.h web/swat_proto.h \
-       client/client_proto.h utils/net_proto.h
+       client/client_proto.h utils/net_proto.h smbd/build_options.c
 
 delheaders:
        @echo Removing prototype headers
@@ -1233,18 +1241,19 @@ delheaders:
        @/bin/rm -f $(srcdir)/include/wrepld_proto.h $(srcdir)/nsswitch/winbindd_proto.h 
        @/bin/rm -f $(srcdir)/web/swat_proto.h
        @/bin/rm -f $(srcdir)/client/client_proto.h $(srcdir)/utils/net_proto.h
+       @/bin/rm -f $(srcdir)/smbd/build_options.c
 
        @/bin/rm -f include/proto.h include/build_env.h include/wrepld_proto.h \
                    nsswitch/winbindd_proto.h web/swat_proto.h \
-                   client/client_proto.h utils/net_proto.h
+                   client/client_proto.h utils/net_proto.h smbd/build_options.c
 
-include/proto.h:
+include/proto.h: smbd/build_options.c
        @echo Building include/proto.h
        @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \
          -h _PROTO_H_ $(builddir)/include/proto.h \
          $(PROTO_OBJ)
 
-include/build_env.h:
+include/build_env.h: script/build_env.sh
        @echo Building include/build_env.h
        @cd $(srcdir) && $(SHELL) script/build_env.sh $(srcdir) $(builddir) $(CC) > $(builddir)/include/build_env.h
 
@@ -1279,6 +1288,7 @@ utils/net_proto.h:
 # parallel make.
 headers: 
        $(MAKE) delheaders; \
+       $(MAKE) smbd/build_options.c; \
        $(MAKE) include/proto.h; \
        $(MAKE) include/build_env.h; \
        $(MAKE) include/wrepld_proto.h; \
index 0000759f1609710fde322e06ad83ca51eee25b84..eb54f37aeda71a2a1757b325bffd488c12f110a2 100755 (executable)
@@ -1,25 +1,31 @@
 #!/bin/sh
 
+if [ $# -lt 3 ]
+then
+    echo "Usage: $0 srcdir builddir compiler"
+    exit 1
+fi
+
 uname=`uname -a`
 date=`date`
 srcdir=$1
 builddir=$2
 compiler=$3
 
-       if [ ! "x$USER" = "x" ]; then
-           whoami=$USER
-       else 
-           if [ ! "x$LOGNAME" = "x" ]; then
-               whoami=$LOGNAME
-           else
-               whoami=`whoami || id -un`
-           fi
-       fi
+if [ ! "x$USER" = "x" ]; then
+    whoami=$USER
+else 
+    if [ ! "x$LOGNAME" = "x" ]; then
+       whoami=$LOGNAME
+    else
+       whoami=`whoami || id -un`
+    fi
+fi
 
 host=`hostname`
 
 cat <<EOF
-/* This file is automatically generated with "make build_env". DO NOT EDIT */
+/* This file is automatically generated with "make include/build_env.h". DO NOT EDIT */
 
 #ifndef _BUILD_ENV_H
 #define _BUILD_ENV_H
diff --git a/source3/script/mkbuildoptions.awk b/source3/script/mkbuildoptions.awk
new file mode 100644 (file)
index 0000000..391fdf5
--- /dev/null
@@ -0,0 +1,262 @@
+BEGIN {
+       print "/* ";
+       print "   Unix SMB/CIFS implementation.";
+       print "   Build Options for Samba Suite";
+       print "   Copyright (C) Vance Lankhaar <vlankhaar@linux.ca> 2003";
+       print "   Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001";
+       print "   ";
+       print "   This program is free software; you can redistribute it and/or modify";
+       print "   it under the terms of the GNU General Public License as published by";
+       print "   the Free Software Foundation; either version 2 of the License, or";
+       print "   (at your option) any later version.";
+       print "   ";
+       print "   This program is distributed in the hope that it will be useful,";
+       print "   but WITHOUT ANY WARRANTY; without even the implied warranty of";
+       print "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the";
+       print "   GNU General Public License for more details.";
+       print "   ";
+       print "   You should have received a copy of the GNU General Public License";
+       print "   along with this program; if not, write to the Free Software";
+       print "   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.";
+       print "*/";
+       print "";
+       print "#include \"includes.h\"";
+       print "#include \"build_env.h\"";
+       print "#include \"dynconfig.h\"";
+       print "";
+       print "static void output(BOOL screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);";
+       print "";
+       print "";
+       print "/****************************************************************************";
+       print "helper function for build_options";
+       print "****************************************************************************/";
+       print "static void output(BOOL screen, const char *format, ...)";
+       print "{";
+       print "       char *ptr;";
+       print "       va_list ap;";
+       print "       ";
+       print "       va_start(ap, format);";
+       print "       vasprintf(&ptr,format,ap);";
+       print "       va_end(ap);";
+       print "";
+       print "       if (screen) {";
+       print "              d_printf(\"%s\", ptr);";
+       print "       } else {";
+       print "        DEBUG(4,(\"%s\", ptr));";
+       print "       }";
+       print "       ";
+       print "       SAFE_FREE(ptr);";
+       print "}";
+       print "";
+       print "/****************************************************************************";
+       print "options set at build time for the samba suite";
+       print "****************************************************************************/";
+       print "void build_options(BOOL screen)";
+       print "{";
+       print "       if ((DEBUGLEVEL < 4) && (!screen)) {";
+       print "        return;";
+       print "       }";
+       print "";
+       print "#ifdef _BUILD_ENV_H";
+       print "       /* Output information about the build environment */";
+       print "       output(screen,\"Build environment:\\n\");";
+       print "       output(screen,\"   Built by:    %s@%s\\n\",BUILD_ENV_USER,BUILD_ENV_HOST);";
+       print "       output(screen,\"   Built on:    %s\\n\",BUILD_ENV_DATE);";
+       print "";
+       print "       output(screen,\"   Built using: %s\\n\",BUILD_ENV_COMPILER);";
+       print "       output(screen,\"   Build host:  %s\\n\",BUILD_ENV_UNAME);";
+       print "       output(screen,\"   SRCDIR:      %s\\n\",BUILD_ENV_SRCDIR);";
+       print "       output(screen,\"   BUILDDIR:    %s\\n\",BUILD_ENV_BUILDDIR);";
+       print "";
+       print "     ";  
+       print "#endif";
+       print "";
+
+       print "       /* Output various paths to files and directories */";
+       print "       output(screen,\"\\nPaths:\\n\");";
+
+       print "       output(screen,\"   SBINDIR: %s\\n\", dyn_SBINDIR);";
+       print "       output(screen,\"   BINDIR: %s\\n\", dyn_BINDIR);";
+       print "       output(screen,\"   SWATDIR: %s\\n\", dyn_SWATDIR);";
+
+       print "       output(screen,\"   CONFIGFILE: %s\\n\", dyn_CONFIGFILE);";
+       print "       output(screen,\"   LOGFILEBASE: %s\\n\", dyn_LOGFILEBASE);";
+       print "       output(screen,\"   LMHOSTSFILE: %s\\n\",dyn_LMHOSTSFILE);";
+
+       print "       output(screen,\"   LIBDIR: %s\\n\",dyn_LIBDIR);";
+       print "       output(screen,\"   SHLIBEXT: %s\\n\",dyn_SHLIBEXT);";
+
+       print "       output(screen,\"   LOCKDIR: %s\\n\",dyn_LOCKDIR);";
+       print "       output(screen,\"   PIDDIR: %s\\n\", dyn_PIDDIR);";
+
+       print "       output(screen,\"   SMB_PASSWD_FILE: %s\\n\",dyn_SMB_PASSWD_FILE);";
+       print "       output(screen,\"   PRIVATE_DIR: %s\\n\",dyn_PRIVATE_DIR);";
+       print "";
+
+
+##################################################
+# predefine first element of *_ary
+# predefine *_i (num of elements in *_ary)
+       with_ary[0]="";
+       with_i=0;
+       have_ary[0]="";
+       have_i=0;
+       utmp_ary[0]="";
+       utmp_i=0;
+       misc_ary[0]="";
+       misc_i=0;
+       sys_ary[0]="";
+       sys_i=0;
+       headers_ary[0]="";
+       headers_i=0;
+       in_comment = 0;
+}
+
+# capture single line comments
+/^\/\* (.*?)\*\// {
+       last_comment = $0;
+       next;
+}
+
+# end capture multi-line comments
+/(.*?)\*\// {
+       last_comment = last_comment $0; 
+       in_comment = 0;
+       next;
+}
+
+# capture middle lines of multi-line comments
+in_comment {
+       last_comment = last_comment $0; 
+       next;
+}
+
+# begin capture multi-line comments
+/^\/\* (.*?)/ {
+       last_comment = $0;
+       in_comment = 1;
+       next
+}
+
+##################################################
+# if we have an #undef and a last_comment, store it
+/^\#undef/ {
+       split($0,a);
+       comments_ary[a[2]] = last_comment;
+       last_comment = "";
+}
+
+##################################################
+# for each line, sort into appropriate section
+# then move on
+
+/^\#undef WITH/ {
+       with_ary[with_i++] = a[2];
+       # we want (I think) to allow --with to show up in more than one place, so no next
+}
+
+
+/^\#undef HAVE_UT_UT_/ || /^\#undef .*UTMP/ {
+       utmp_ary[utmp_i++] = a[2];
+       next;
+}
+
+/^\#undef HAVE_SYS_.*?_H$/ {
+       sys_ary[sys_i++] = a[2];
+       next;
+}
+
+/^\#undef HAVE_.*?_H$/ {
+       headers_ary[headers_i++] = a[2];
+       next;
+}
+
+/^\#undef HAVE_/ {
+       have_ary[have_i++] = a[2];
+       next;
+}
+
+/^\#undef/ {
+       misc_ary[misc_i++] = a[2];
+       next;
+}
+
+
+##################################################
+# simple sort function
+function sort(ARRAY, ELEMENTS) {
+        for (i = 1; i <= ELEMENTS; ++i) {
+                for (j = i; (j-1) in ARRAY && (j) in ARRAY && ARRAY[j-1] > ARRAY[j]; --j) {
+                        temp = ARRAY[j];
+                       ARRAY[j] = ARRAY[j-1];
+                       ARRAY[j-1] = temp;
+               }
+        }
+       return;
+}    
+
+
+##################################################
+# output code from list of defined
+# expects: ARRAY     an array of things defined
+#          ELEMENTS  number of elements in ARRAY
+#          TITLE     title for section
+# returns: nothing 
+function output(ARRAY, ELEMENTS, TITLE) {
+       
+       # add section header
+       print "\n\t/* Show " TITLE " */";
+       print "\toutput(screen, \"\\n " TITLE ":\\n\");\n";
+       
+
+       # sort element using bubble sort (slow, but easy)
+       sort(ARRAY, ELEMENTS);
+
+       # loop through array of defines, outputting code
+       for (i = 0; i < ELEMENTS; i++) {
+               print "#ifdef " ARRAY[i];
+               
+               # I don't know which one to use....
+               
+               print "\toutput(screen, \"   " ARRAY[i] "\\n\");";
+               #printf "\toutput(screen, \"   %s\\n   %s\\n\\n\");\n", comments_ary[ARRAY[i]], ARRAY[i];
+               #printf "\toutput(screen, \"   %-35s   %s\\n\");\n", ARRAY[i], comments_ary[ARRAY[i]];
+
+               print "#endif";
+       }
+       return;
+}
+
+END {
+       ##################################################
+       # add code to show various options
+       print "/* Output various other options (as gleaned from include/config.h.in) */";
+       output(sys_ary,     sys_i,     "System Headers");
+       output(headers_ary, headers_i, "Headers");
+       output(utmp_ary,    utmp_i,    "UTMP Options");
+       output(have_ary,    have_i,    "HAVE_* Defines");
+       output(with_ary,    with_i,    "--with Options");
+       output(misc_ary,    misc_i,    "Build Options");
+
+       ##################################################
+       # add code to display the various type sizes
+       print "       /* Output the sizes of the various types */";
+       print "       output(screen, \"\\nType sizes:\\n\");";
+       print "       output(screen, \"   sizeof(char):    %d\\n\",sizeof(char));";
+       print "       output(screen, \"   sizeof(int):     %d\\n\",sizeof(int));";
+       print "       output(screen, \"   sizeof(long):    %d\\n\",sizeof(long));";
+       print "       output(screen, \"   sizeof(uint8):   %d\\n\",sizeof(uint8));";
+       print "       output(screen, \"   sizeof(uint16):  %d\\n\",sizeof(uint16));";
+       print "       output(screen, \"   sizeof(uint32):  %d\\n\",sizeof(uint32));";
+       print "       output(screen, \"   sizeof(short):   %d\\n\",sizeof(short));";
+       print "       output(screen, \"   sizeof(void*):   %d\\n\",sizeof(void*));";
+
+       ##################################################
+       # add code to give information about modules
+       print "       output(screen, \"\\nBuiltin modules:\\n\");";
+       print "       output(screen, \"   %s\\n\", STRING_STATIC_MODULES);";
+
+       print "}";
+
+}
+
index 5f2a5c4cf75b63243388947ab92430c37ecd05d2..d2b1fd5b2eeb174567eb6b9e8ba175b7ca234227 100644 (file)
@@ -1,2 +1,3 @@
 *.po
 *.po32
+build_options.c