| 1 | BEGIN {
 | 
|---|
| 2 |         print "/* ";
 | 
|---|
| 3 |         print "   Unix SMB/CIFS implementation.";
 | 
|---|
| 4 |         print "   Build Options for Samba Suite";
 | 
|---|
| 5 |         print "   Copyright (C) Vance Lankhaar <vlankhaar@linux.ca> 2003";
 | 
|---|
| 6 |         print "   Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001";
 | 
|---|
| 7 |         print "   ";
 | 
|---|
| 8 |         print "   This program is free software; you can redistribute it and/or modify";
 | 
|---|
| 9 |         print "   it under the terms of the GNU General Public License as published by";
 | 
|---|
| 10 |         print "   the Free Software Foundation; either version 3 of the License, or";
 | 
|---|
| 11 |         print "   (at your option) any later version.";
 | 
|---|
| 12 |         print "   ";
 | 
|---|
| 13 |         print "   This program is distributed in the hope that it will be useful,";
 | 
|---|
| 14 |         print "   but WITHOUT ANY WARRANTY; without even the implied warranty of";
 | 
|---|
| 15 |         print "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the";
 | 
|---|
| 16 |         print "   GNU General Public License for more details.";
 | 
|---|
| 17 |         print "   ";
 | 
|---|
| 18 |         print "   You should have received a copy of the GNU General Public License";
 | 
|---|
| 19 |         print "   along with this program; if not, see <http://www.gnu.org/licenses/>."
 | 
|---|
| 20 |         print "*/";
 | 
|---|
| 21 |         print "";
 | 
|---|
| 22 |         print "#include \"includes.h\"";
 | 
|---|
| 23 |         print "#include \"build_env.h\"";
 | 
|---|
| 24 |         print "#include \"dynconfig.h\"";
 | 
|---|
| 25 |         print "";
 | 
|---|
| 26 |         print "static int output(bool screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);";
 | 
|---|
| 27 |         print "void build_options(bool screen);";
 | 
|---|
| 28 |         print "";
 | 
|---|
| 29 |         print "";
 | 
|---|
| 30 |         print "/****************************************************************************";
 | 
|---|
| 31 |         print "helper function for build_options";
 | 
|---|
| 32 |         print "****************************************************************************/";
 | 
|---|
| 33 |         print "static int output(bool screen, const char *format, ...)";
 | 
|---|
| 34 |         print "{";
 | 
|---|
| 35 |         print "       char *ptr = NULL;";
 | 
|---|
| 36 |         print "       int ret = 0;";
 | 
|---|
| 37 |         print "       va_list ap;";
 | 
|---|
| 38 |         print "       ";
 | 
|---|
| 39 |         print "       va_start(ap, format);";
 | 
|---|
| 40 |         print "       ret = vasprintf(&ptr,format,ap);";
 | 
|---|
| 41 |         print "       va_end(ap);";
 | 
|---|
| 42 |         print "";
 | 
|---|
| 43 |         print "       if (screen) {";
 | 
|---|
| 44 |         print "              d_printf(\"%s\", ptr ? ptr : \"\");";
 | 
|---|
| 45 |         print "       } else {";
 | 
|---|
| 46 |         print "        DEBUG(4,(\"%s\", ptr ? ptr : \"\"));";
 | 
|---|
| 47 |         print "       }";
 | 
|---|
| 48 |         print "       ";
 | 
|---|
| 49 |         print "       SAFE_FREE(ptr);";
 | 
|---|
| 50 |         print "       return ret;";
 | 
|---|
| 51 |         print "}";
 | 
|---|
| 52 |         print "";
 | 
|---|
| 53 |         print "/****************************************************************************";
 | 
|---|
| 54 |         print "options set at build time for the samba suite";
 | 
|---|
| 55 |         print "****************************************************************************/";
 | 
|---|
| 56 |         print "void build_options(bool screen)";
 | 
|---|
| 57 |         print "{";
 | 
|---|
| 58 |         print "       if ((DEBUGLEVEL < 4) && (!screen)) {";
 | 
|---|
| 59 |         print "        return;";
 | 
|---|
| 60 |         print "       }";
 | 
|---|
| 61 |         print "";
 | 
|---|
| 62 |         print "#ifdef _BUILD_ENV_H";
 | 
|---|
| 63 |         print "       /* Output information about the build environment */";
 | 
|---|
| 64 |         print "       output(screen,\"Build environment:\\n\");";
 | 
|---|
| 65 |         print "       output(screen,\"   Built by:    %s@%s\\n\",BUILD_ENV_USER,BUILD_ENV_HOST);";
 | 
|---|
| 66 |         print "       output(screen,\"   Built on:    %s\\n\",BUILD_ENV_DATE);";
 | 
|---|
| 67 |         print "";
 | 
|---|
| 68 |         print "       output(screen,\"   Built using: %s\\n\",BUILD_ENV_COMPILER);";
 | 
|---|
| 69 |         print "       output(screen,\"   Build host:  %s\\n\",BUILD_ENV_UNAME);";
 | 
|---|
| 70 |         print "       output(screen,\"   SRCDIR:      %s\\n\",BUILD_ENV_SRCDIR);";
 | 
|---|
| 71 |         print "       output(screen,\"   BUILDDIR:    %s\\n\",BUILD_ENV_BUILDDIR);";
 | 
|---|
| 72 |         print "";
 | 
|---|
| 73 |         print "     ";
 | 
|---|
| 74 |         print "#endif";
 | 
|---|
| 75 |         print "";
 | 
|---|
| 76 | 
 | 
|---|
| 77 |         print "       /* Output various paths to files and directories */";
 | 
|---|
| 78 |         print "       output(screen,\"\\nPaths:\\n\");";
 | 
|---|
| 79 | 
 | 
|---|
| 80 |         print "       output(screen,\"   SBINDIR: %s\\n\", get_dyn_SBINDIR());";
 | 
|---|
| 81 |         print "       output(screen,\"   BINDIR: %s\\n\", get_dyn_BINDIR());";
 | 
|---|
| 82 |         print "       output(screen,\"   SWATDIR: %s\\n\", get_dyn_SWATDIR());";
 | 
|---|
| 83 | 
 | 
|---|
| 84 |         print "       output(screen,\"   CONFIGFILE: %s\\n\", get_dyn_CONFIGFILE());";
 | 
|---|
| 85 |         print "       output(screen,\"   LOGFILEBASE: %s\\n\", get_dyn_LOGFILEBASE());";
 | 
|---|
| 86 |         print "       output(screen,\"   LMHOSTSFILE: %s\\n\",get_dyn_LMHOSTSFILE());";
 | 
|---|
| 87 | 
 | 
|---|
| 88 |         print "       output(screen,\"   LIBDIR: %s\\n\",get_dyn_LIBDIR());";
 | 
|---|
| 89 |         print "       output(screen,\"   MODULESDIR: %s\\n\",get_dyn_MODULESDIR());";
 | 
|---|
| 90 |         print "       output(screen,\"   SHLIBEXT: %s\\n\",get_dyn_SHLIBEXT());";
 | 
|---|
| 91 | 
 | 
|---|
| 92 |         print "       output(screen,\"   LOCKDIR: %s\\n\",get_dyn_LOCKDIR());";
 | 
|---|
| 93 |         print "       output(screen,\"   STATEDIR: %s\\n\",get_dyn_STATEDIR());";
 | 
|---|
| 94 |         print "       output(screen,\"   CACHEDIR: %s\\n\",get_dyn_CACHEDIR());";
 | 
|---|
| 95 |         print "       output(screen,\"   PIDDIR: %s\\n\", get_dyn_PIDDIR());";
 | 
|---|
| 96 | 
 | 
|---|
| 97 |         print "       output(screen,\"   SMB_PASSWD_FILE: %s\\n\",get_dyn_SMB_PASSWD_FILE());";
 | 
|---|
| 98 |         print "       output(screen,\"   PRIVATE_DIR: %s\\n\",get_dyn_PRIVATE_DIR());";
 | 
|---|
| 99 |         print "";
 | 
|---|
| 100 | 
 | 
|---|
| 101 | 
 | 
|---|
| 102 | ##################################################
 | 
|---|
| 103 | # predefine first element of *_ary
 | 
|---|
| 104 | # predefine *_i (num of elements in *_ary)
 | 
|---|
| 105 |         with_ary[0]="";
 | 
|---|
| 106 |         with_i=0;
 | 
|---|
| 107 |         have_ary[0]="";
 | 
|---|
| 108 |         have_i=0;
 | 
|---|
| 109 |         utmp_ary[0]="";
 | 
|---|
| 110 |         utmp_i=0;
 | 
|---|
| 111 |         misc_ary[0]="";
 | 
|---|
| 112 |         misc_i=0;
 | 
|---|
| 113 |         sys_ary[0]="";
 | 
|---|
| 114 |         sys_i=0;
 | 
|---|
| 115 |         headers_ary[0]="";
 | 
|---|
| 116 |         headers_i=0;
 | 
|---|
| 117 |         in_comment = 0;
 | 
|---|
| 118 | }
 | 
|---|
| 119 | 
 | 
|---|
| 120 | # capture single line comments
 | 
|---|
| 121 | /^\/\* (.*?)\*\// {
 | 
|---|
| 122 |         last_comment = $0;
 | 
|---|
| 123 |         next;
 | 
|---|
| 124 | }
 | 
|---|
| 125 | 
 | 
|---|
| 126 | # end capture multi-line comments
 | 
|---|
| 127 | /(.*?)\*\// {
 | 
|---|
| 128 |         last_comment = last_comment $0;
 | 
|---|
| 129 |         in_comment = 0;
 | 
|---|
| 130 |         next;
 | 
|---|
| 131 | }
 | 
|---|
| 132 | 
 | 
|---|
| 133 | # capture middle lines of multi-line comments
 | 
|---|
| 134 | in_comment {
 | 
|---|
| 135 |         last_comment = last_comment $0;
 | 
|---|
| 136 |         next;
 | 
|---|
| 137 | }
 | 
|---|
| 138 | 
 | 
|---|
| 139 | # begin capture multi-line comments
 | 
|---|
| 140 | /^\/\* (.*?)/ {
 | 
|---|
| 141 |         last_comment = $0;
 | 
|---|
| 142 |         in_comment = 1;
 | 
|---|
| 143 |         next
 | 
|---|
| 144 | }
 | 
|---|
| 145 | 
 | 
|---|
| 146 | ##################################################
 | 
|---|
| 147 | # if we have an #undef and a last_comment, store it
 | 
|---|
| 148 | /^\#define/ {
 | 
|---|
| 149 |         split($0,a);
 | 
|---|
| 150 |         comments_ary[a[2]] = last_comment;
 | 
|---|
| 151 |         last_comment = "";
 | 
|---|
| 152 | }
 | 
|---|
| 153 | 
 | 
|---|
| 154 | ##################################################
 | 
|---|
| 155 | # for each line, sort into appropriate section
 | 
|---|
| 156 | # then move on
 | 
|---|
| 157 | 
 | 
|---|
| 158 | /^\#define WITH/ {
 | 
|---|
| 159 |         with_ary[with_i++] = a[2];
 | 
|---|
| 160 |         # we want (I think) to allow --with to show up in more than one place, so no next
 | 
|---|
| 161 | }
 | 
|---|
| 162 | 
 | 
|---|
| 163 | 
 | 
|---|
| 164 | /^\#define HAVE_UT_UT_/ || /^\#define .*UTMP/ {
 | 
|---|
| 165 |         utmp_ary[utmp_i++] = a[2];
 | 
|---|
| 166 |         next;
 | 
|---|
| 167 | }
 | 
|---|
| 168 | 
 | 
|---|
| 169 | /^\#define HAVE_SYS_.*?_H$/ {
 | 
|---|
| 170 |         sys_ary[sys_i++] = a[2];
 | 
|---|
| 171 |         next;
 | 
|---|
| 172 | }
 | 
|---|
| 173 | 
 | 
|---|
| 174 | /^\#define HAVE_.*?_H$/ {
 | 
|---|
| 175 |         headers_ary[headers_i++] = a[2];
 | 
|---|
| 176 |         next;
 | 
|---|
| 177 | }
 | 
|---|
| 178 | 
 | 
|---|
| 179 | /^\#define HAVE_/ {
 | 
|---|
| 180 |         have_ary[have_i++] = a[2];
 | 
|---|
| 181 |         next;
 | 
|---|
| 182 | }
 | 
|---|
| 183 | 
 | 
|---|
| 184 | /^\#define/ {
 | 
|---|
| 185 |         misc_ary[misc_i++] = a[2];
 | 
|---|
| 186 |         next;
 | 
|---|
| 187 | }
 | 
|---|
| 188 | 
 | 
|---|
| 189 | 
 | 
|---|
| 190 | ##################################################
 | 
|---|
| 191 | # simple sort function
 | 
|---|
| 192 | function sort(ARRAY, ELEMENTS) {
 | 
|---|
| 193 |         for (i = 1; i <= ELEMENTS; ++i) {
 | 
|---|
| 194 |                 for (j = i; (j-1) in ARRAY && (j) in ARRAY && ARRAY[j-1] > ARRAY[j]; --j) {
 | 
|---|
| 195 |                         temp = ARRAY[j];
 | 
|---|
| 196 |                         ARRAY[j] = ARRAY[j-1];
 | 
|---|
| 197 |                         ARRAY[j-1] = temp;
 | 
|---|
| 198 |                 }
 | 
|---|
| 199 |         }
 | 
|---|
| 200 |         return;
 | 
|---|
| 201 | }
 | 
|---|
| 202 | 
 | 
|---|
| 203 | 
 | 
|---|
| 204 | ##################################################
 | 
|---|
| 205 | # output code from list of defined
 | 
|---|
| 206 | # expects: ARRAY     an array of things defined
 | 
|---|
| 207 | #          ELEMENTS  number of elements in ARRAY
 | 
|---|
| 208 | #          TITLE     title for section
 | 
|---|
| 209 | # returns: nothing
 | 
|---|
| 210 | function output(ARRAY, ELEMENTS, TITLE) {
 | 
|---|
| 211 | 
 | 
|---|
| 212 |         # add section header
 | 
|---|
| 213 |         print "\n\t/* Show " TITLE " */";
 | 
|---|
| 214 |         print "\toutput(screen, \"\\n " TITLE ":\\n\");\n";
 | 
|---|
| 215 | 
 | 
|---|
| 216 | 
 | 
|---|
| 217 |         # sort element using bubble sort (slow, but easy)
 | 
|---|
| 218 |         sort(ARRAY, ELEMENTS);
 | 
|---|
| 219 | 
 | 
|---|
| 220 |         # loop through array of defines, outputting code
 | 
|---|
| 221 |         for (i = 0; i < ELEMENTS; i++) {
 | 
|---|
| 222 |                 print "#ifdef " ARRAY[i];
 | 
|---|
| 223 | 
 | 
|---|
| 224 |                 # I don't know which one to use....
 | 
|---|
| 225 | 
 | 
|---|
| 226 |                 print "\toutput(screen, \"   " ARRAY[i] "\\n\");";
 | 
|---|
| 227 |                 #printf "\toutput(screen, \"   %s\\n   %s\\n\\n\");\n", comments_ary[ARRAY[i]], ARRAY[i];
 | 
|---|
| 228 |                 #printf "\toutput(screen, \"   %-35s   %s\\n\");\n", ARRAY[i], comments_ary[ARRAY[i]];
 | 
|---|
| 229 | 
 | 
|---|
| 230 |                 print "#endif";
 | 
|---|
| 231 |         }
 | 
|---|
| 232 |         return;
 | 
|---|
| 233 | }
 | 
|---|
| 234 | 
 | 
|---|
| 235 | END {
 | 
|---|
| 236 |         ##################################################
 | 
|---|
| 237 |         # add code to show various options
 | 
|---|
| 238 |         print "/* Output various other options (as gleaned from include/config.h.in) */";
 | 
|---|
| 239 |         output(sys_ary,     sys_i,     "System Headers");
 | 
|---|
| 240 |         output(headers_ary, headers_i, "Headers");
 | 
|---|
| 241 |         output(utmp_ary,    utmp_i,    "UTMP Options");
 | 
|---|
| 242 |         output(have_ary,    have_i,    "HAVE_* Defines");
 | 
|---|
| 243 |         output(with_ary,    with_i,    "--with Options");
 | 
|---|
| 244 |         output(misc_ary,    misc_i,    "Build Options");
 | 
|---|
| 245 | 
 | 
|---|
| 246 |         ##################################################
 | 
|---|
| 247 |         # add code to display the various type sizes
 | 
|---|
| 248 |         print "       /* Output the sizes of the various types */";
 | 
|---|
| 249 |         print "       output(screen, \"\\nType sizes:\\n\");";
 | 
|---|
| 250 |         print "       output(screen, \"   sizeof(char):         %lu\\n\",(unsigned long)sizeof(char));";
 | 
|---|
| 251 |         print "       output(screen, \"   sizeof(int):          %lu\\n\",(unsigned long)sizeof(int));";
 | 
|---|
| 252 |         print "       output(screen, \"   sizeof(long):         %lu\\n\",(unsigned long)sizeof(long));";
 | 
|---|
| 253 |         print "#if HAVE_LONGLONG"
 | 
|---|
| 254 |         print "       output(screen, \"   sizeof(long long):    %lu\\n\",(unsigned long)sizeof(long long));";
 | 
|---|
| 255 |         print "#endif"
 | 
|---|
| 256 |         print "       output(screen, \"   sizeof(uint8):        %lu\\n\",(unsigned long)sizeof(uint8));";
 | 
|---|
| 257 |         print "       output(screen, \"   sizeof(uint16):       %lu\\n\",(unsigned long)sizeof(uint16));";
 | 
|---|
| 258 |         print "       output(screen, \"   sizeof(uint32):       %lu\\n\",(unsigned long)sizeof(uint32));";
 | 
|---|
| 259 |         print "       output(screen, \"   sizeof(short):        %lu\\n\",(unsigned long)sizeof(short));";
 | 
|---|
| 260 |         print "       output(screen, \"   sizeof(void*):        %lu\\n\",(unsigned long)sizeof(void*));";
 | 
|---|
| 261 |         print "       output(screen, \"   sizeof(size_t):       %lu\\n\",(unsigned long)sizeof(size_t));";
 | 
|---|
| 262 |         print "       output(screen, \"   sizeof(off_t):        %lu\\n\",(unsigned long)sizeof(off_t));";
 | 
|---|
| 263 |         print "       output(screen, \"   sizeof(ino_t):        %lu\\n\",(unsigned long)sizeof(ino_t));";
 | 
|---|
| 264 |         print "       output(screen, \"   sizeof(dev_t):        %lu\\n\",(unsigned long)sizeof(dev_t));";
 | 
|---|
| 265 | 
 | 
|---|
| 266 |         ##################################################
 | 
|---|
| 267 |         # add code to give information about modules
 | 
|---|
| 268 |         print "       output(screen, \"\\nBuiltin modules:\\n\");";
 | 
|---|
| 269 |         print "       output(screen, \"   %s\\n\", STRING_STATIC_MODULES);";
 | 
|---|
| 270 | 
 | 
|---|
| 271 |         print "}";
 | 
|---|
| 272 | 
 | 
|---|
| 273 | }
 | 
|---|