1BEGIN { 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 2 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, write to the Free Software"; 20 print " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."; 21 print "*/"; 22 print ""; 23 print "#include \"includes.h\""; 24 print "#include \"build_env.h\""; 25 print "#include \"dynconfig.h\""; 26 print ""; 27 print "static void output(BOOL screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);"; 28 print "void build_options(BOOL screen);"; 29 print ""; 30 print ""; 31 print "/****************************************************************************"; 32 print "helper function for build_options"; 33 print "****************************************************************************/"; 34 print "static void output(BOOL screen, const char *format, ...)"; 35 print "{"; 36 print " char *ptr;"; 37 print " va_list ap;"; 38 print " "; 39 print " va_start(ap, format);"; 40 print " vasprintf(&ptr,format,ap);"; 41 print " va_end(ap);"; 42 print ""; 43 print " if (screen) {"; 44 print " d_printf(\"%s\", ptr);"; 45 print " } else {"; 46 print " DEBUG(4,(\"%s\", ptr));"; 47 print " }"; 48 print " "; 49 print " SAFE_FREE(ptr);"; 50 print "}"; 51 print ""; 52 print "/****************************************************************************"; 53 print "options set at build time for the samba suite"; 54 print "****************************************************************************/"; 55 print "void build_options(BOOL screen)"; 56 print "{"; 57 print " if ((DEBUGLEVEL < 4) && (!screen)) {"; 58 print " return;"; 59 print " }"; 60 print ""; 61 print "#ifdef _BUILD_ENV_H"; 62 print " /* Output information about the build environment */"; 63 print " output(screen,\"Build environment:\\n\");"; 64 print " output(screen,\" Built by: %s@%s\\n\",BUILD_ENV_USER,BUILD_ENV_HOST);"; 65 print " output(screen,\" Built on: %s\\n\",BUILD_ENV_DATE);"; 66 print ""; 67 print " output(screen,\" Built using: %s\\n\",BUILD_ENV_COMPILER);"; 68 print " output(screen,\" Build host: %s\\n\",BUILD_ENV_UNAME);"; 69 print " output(screen,\" SRCDIR: %s\\n\",BUILD_ENV_SRCDIR);"; 70 print " output(screen,\" BUILDDIR: %s\\n\",BUILD_ENV_BUILDDIR);"; 71 print ""; 72 print " "; 73 print "#endif"; 74 print ""; 75 76 print " /* Output various paths to files and directories */"; 77 print " output(screen,\"\\nPaths:\\n\");"; 78 79 print " output(screen,\" SBINDIR: %s\\n\", dyn_SBINDIR);"; 80 print " output(screen,\" BINDIR: %s\\n\", dyn_BINDIR);"; 81 print " output(screen,\" SWATDIR: %s\\n\", dyn_SWATDIR);"; 82 83 print " output(screen,\" CONFIGFILE: %s\\n\", dyn_CONFIGFILE);"; 84 print " output(screen,\" LOGFILEBASE: %s\\n\", dyn_LOGFILEBASE);"; 85 print " output(screen,\" LMHOSTSFILE: %s\\n\",dyn_LMHOSTSFILE);"; 86 87 print " output(screen,\" LIBDIR: %s\\n\",dyn_LIBDIR);"; 88 print " output(screen,\" SHLIBEXT: %s\\n\",dyn_SHLIBEXT);"; 89 90 print " output(screen,\" LOCKDIR: %s\\n\",dyn_LOCKDIR);"; 91 print " output(screen,\" PIDDIR: %s\\n\", dyn_PIDDIR);"; 92 93 print " output(screen,\" SMB_PASSWD_FILE: %s\\n\",dyn_SMB_PASSWD_FILE);"; 94 print " output(screen,\" PRIVATE_DIR: %s\\n\",dyn_PRIVATE_DIR);"; 95 print ""; 96 97 98################################################## 99# predefine first element of *_ary 100# predefine *_i (num of elements in *_ary) 101 with_ary[0]=""; 102 with_i=0; 103 have_ary[0]=""; 104 have_i=0; 105 utmp_ary[0]=""; 106 utmp_i=0; 107 misc_ary[0]=""; 108 misc_i=0; 109 sys_ary[0]=""; 110 sys_i=0; 111 headers_ary[0]=""; 112 headers_i=0; 113 in_comment = 0; 114} 115 116# capture single line comments 117/^\/\* (.*?)\*\// { 118 last_comment = $0; 119 next; 120} 121 122# end capture multi-line comments 123/(.*?)\*\// { 124 last_comment = last_comment $0; 125 in_comment = 0; 126 next; 127} 128 129# capture middle lines of multi-line comments 130in_comment { 131 last_comment = last_comment $0; 132 next; 133} 134 135# begin capture multi-line comments 136/^\/\* (.*?)/ { 137 last_comment = $0; 138 in_comment = 1; 139 next 140} 141 142################################################## 143# if we have an #undef and a last_comment, store it 144/^\#undef/ { 145 split($0,a); 146 comments_ary[a[2]] = last_comment; 147 last_comment = ""; 148} 149 150################################################## 151# for each line, sort into appropriate section 152# then move on 153 154/^\#undef WITH/ { 155 with_ary[with_i++] = a[2]; 156 # we want (I think) to allow --with to show up in more than one place, so no next 157} 158 159 160/^\#undef HAVE_UT_UT_/ || /^\#undef .*UTMP/ { 161 utmp_ary[utmp_i++] = a[2]; 162 next; 163} 164 165/^\#undef HAVE_SYS_.*?_H$/ { 166 sys_ary[sys_i++] = a[2]; 167 next; 168} 169 170/^\#undef HAVE_.*?_H$/ { 171 headers_ary[headers_i++] = a[2]; 172 next; 173} 174 175/^\#undef HAVE_/ { 176 have_ary[have_i++] = a[2]; 177 next; 178} 179 180/^\#undef/ { 181 misc_ary[misc_i++] = a[2]; 182 next; 183} 184 185 186################################################## 187# simple sort function 188function sort(ARRAY, ELEMENTS) { 189 for (i = 1; i <= ELEMENTS; ++i) { 190 for (j = i; (j-1) in ARRAY && (j) in ARRAY && ARRAY[j-1] > ARRAY[j]; --j) { 191 temp = ARRAY[j]; 192 ARRAY[j] = ARRAY[j-1]; 193 ARRAY[j-1] = temp; 194 } 195 } 196 return; 197} 198 199 200################################################## 201# output code from list of defined 202# expects: ARRAY an array of things defined 203# ELEMENTS number of elements in ARRAY 204# TITLE title for section 205# returns: nothing 206function output(ARRAY, ELEMENTS, TITLE) { 207 208 # add section header 209 print "\n\t/* Show " TITLE " */"; 210 print "\toutput(screen, \"\\n " TITLE ":\\n\");\n"; 211 212 213 # sort element using bubble sort (slow, but easy) 214 sort(ARRAY, ELEMENTS); 215 216 # loop through array of defines, outputting code 217 for (i = 0; i < ELEMENTS; i++) { 218 print "#ifdef " ARRAY[i]; 219 220 # I don't know which one to use.... 221 222 print "\toutput(screen, \" " ARRAY[i] "\\n\");"; 223 #printf "\toutput(screen, \" %s\\n %s\\n\\n\");\n", comments_ary[ARRAY[i]], ARRAY[i]; 224 #printf "\toutput(screen, \" %-35s %s\\n\");\n", ARRAY[i], comments_ary[ARRAY[i]]; 225 226 print "#endif"; 227 } 228 return; 229} 230 231END { 232 ################################################## 233 # add code to show various options 234 print "/* Output various other options (as gleaned from include/config.h.in) */"; 235 output(sys_ary, sys_i, "System Headers"); 236 output(headers_ary, headers_i, "Headers"); 237 output(utmp_ary, utmp_i, "UTMP Options"); 238 output(have_ary, have_i, "HAVE_* Defines"); 239 output(with_ary, with_i, "--with Options"); 240 output(misc_ary, misc_i, "Build Options"); 241 242 ################################################## 243 # add code to display the various type sizes 244 print " /* Output the sizes of the various types */"; 245 print " output(screen, \"\\nType sizes:\\n\");"; 246 print " output(screen, \" sizeof(char): %lu\\n\",(unsigned long)sizeof(char));"; 247 print " output(screen, \" sizeof(int): %lu\\n\",(unsigned long)sizeof(int));"; 248 print " output(screen, \" sizeof(long): %lu\\n\",(unsigned long)sizeof(long));"; 249 print "#if HAVE_LONGLONG" 250 print " output(screen, \" sizeof(long long): %lu\\n\",(unsigned long)sizeof(long long));"; 251 print "#endif" 252 print " output(screen, \" sizeof(uint8): %lu\\n\",(unsigned long)sizeof(uint8));"; 253 print " output(screen, \" sizeof(uint16): %lu\\n\",(unsigned long)sizeof(uint16));"; 254 print " output(screen, \" sizeof(uint32): %lu\\n\",(unsigned long)sizeof(uint32));"; 255 print " output(screen, \" sizeof(short): %lu\\n\",(unsigned long)sizeof(short));"; 256 print " output(screen, \" sizeof(void*): %lu\\n\",(unsigned long)sizeof(void*));"; 257 print " output(screen, \" sizeof(size_t): %lu\\n\",(unsigned long)sizeof(size_t));"; 258 print " output(screen, \" sizeof(off_t): %lu\\n\",(unsigned long)sizeof(off_t));"; 259 print " output(screen, \" sizeof(ino_t): %lu\\n\",(unsigned long)sizeof(ino_t));"; 260 print " output(screen, \" sizeof(dev_t): %lu\\n\",(unsigned long)sizeof(dev_t));"; 261 262 ################################################## 263 # add code to give information about modules 264 print " output(screen, \"\\nBuiltin modules:\\n\");"; 265 print " output(screen, \" %s\\n\", STRING_STATIC_MODULES);"; 266 267 print "}"; 268 269} 270 271