PageRenderTime 25ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/samba-3.5.6/source3/script/mkbuildoptions.awk

https://github.com/theuni/XBMC-deps
AWK | 274 lines | 203 code | 38 blank | 33 comment | 0 complexity | c97b1b8d29afbc62b7ac81011a3f66a1 MD5 | raw file
  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. print " /* Output various paths to files and directories */";
  77. print " output(screen,\"\\nPaths:\\n\");";
  78. print " output(screen,\" SBINDIR: %s\\n\", get_dyn_SBINDIR());";
  79. print " output(screen,\" BINDIR: %s\\n\", get_dyn_BINDIR());";
  80. print " output(screen,\" SWATDIR: %s\\n\", get_dyn_SWATDIR());";
  81. print " output(screen,\" CONFIGFILE: %s\\n\", get_dyn_CONFIGFILE());";
  82. print " output(screen,\" LOGFILEBASE: %s\\n\", get_dyn_LOGFILEBASE());";
  83. print " output(screen,\" LMHOSTSFILE: %s\\n\",get_dyn_LMHOSTSFILE());";
  84. print " output(screen,\" LIBDIR: %s\\n\",get_dyn_LIBDIR());";
  85. print " output(screen,\" MODULESDIR: %s\\n\",get_dyn_MODULESDIR());";
  86. print " output(screen,\" SHLIBEXT: %s\\n\",get_dyn_SHLIBEXT());";
  87. print " output(screen,\" LOCKDIR: %s\\n\",get_dyn_LOCKDIR());";
  88. print " output(screen,\" STATEDIR: %s\\n\",get_dyn_STATEDIR());";
  89. print " output(screen,\" CACHEDIR: %s\\n\",get_dyn_CACHEDIR());";
  90. print " output(screen,\" PIDDIR: %s\\n\", get_dyn_PIDDIR());";
  91. print " output(screen,\" SMB_PASSWD_FILE: %s\\n\",get_dyn_SMB_PASSWD_FILE());";
  92. print " output(screen,\" PRIVATE_DIR: %s\\n\",get_dyn_PRIVATE_DIR());";
  93. print "";
  94. ##################################################
  95. # predefine first element of *_ary
  96. # predefine *_i (num of elements in *_ary)
  97. with_ary[0]="";
  98. with_i=0;
  99. have_ary[0]="";
  100. have_i=0;
  101. utmp_ary[0]="";
  102. utmp_i=0;
  103. misc_ary[0]="";
  104. misc_i=0;
  105. sys_ary[0]="";
  106. sys_i=0;
  107. headers_ary[0]="";
  108. headers_i=0;
  109. in_comment = 0;
  110. }
  111. # capture single line comments
  112. /^\/\* (.*?)\*\// {
  113. last_comment = $0;
  114. next;
  115. }
  116. # end capture multi-line comments
  117. /(.*?)\*\// {
  118. last_comment = last_comment $0;
  119. in_comment = 0;
  120. next;
  121. }
  122. # capture middle lines of multi-line comments
  123. in_comment {
  124. last_comment = last_comment $0;
  125. next;
  126. }
  127. # begin capture multi-line comments
  128. /^\/\* (.*?)/ {
  129. last_comment = $0;
  130. in_comment = 1;
  131. next
  132. }
  133. ##################################################
  134. # if we have an #undef and a last_comment, store it
  135. /^\#undef/ {
  136. split($0,a);
  137. comments_ary[a[2]] = last_comment;
  138. last_comment = "";
  139. }
  140. ##################################################
  141. # for each line, sort into appropriate section
  142. # then move on
  143. /^\#undef WITH/ {
  144. with_ary[with_i++] = a[2];
  145. # we want (I think) to allow --with to show up in more than one place, so no next
  146. }
  147. /^\#undef HAVE_UT_UT_/ || /^\#undef .*UTMP/ {
  148. utmp_ary[utmp_i++] = a[2];
  149. next;
  150. }
  151. /^\#undef HAVE_SYS_.*?_H$/ {
  152. sys_ary[sys_i++] = a[2];
  153. next;
  154. }
  155. /^\#undef HAVE_.*?_H$/ {
  156. headers_ary[headers_i++] = a[2];
  157. next;
  158. }
  159. /^\#undef HAVE_/ {
  160. have_ary[have_i++] = a[2];
  161. next;
  162. }
  163. /^\#undef/ {
  164. misc_ary[misc_i++] = a[2];
  165. next;
  166. }
  167. ##################################################
  168. # simple sort function
  169. function sort(ARRAY, ELEMENTS) {
  170. for (i = 1; i <= ELEMENTS; ++i) {
  171. for (j = i; (j-1) in ARRAY && (j) in ARRAY && ARRAY[j-1] > ARRAY[j]; --j) {
  172. temp = ARRAY[j];
  173. ARRAY[j] = ARRAY[j-1];
  174. ARRAY[j-1] = temp;
  175. }
  176. }
  177. return;
  178. }
  179. ##################################################
  180. # output code from list of defined
  181. # expects: ARRAY an array of things defined
  182. # ELEMENTS number of elements in ARRAY
  183. # TITLE title for section
  184. # returns: nothing
  185. function output(ARRAY, ELEMENTS, TITLE) {
  186. # add section header
  187. print "\n\t/* Show " TITLE " */";
  188. print "\toutput(screen, \"\\n " TITLE ":\\n\");\n";
  189. # sort element using bubble sort (slow, but easy)
  190. sort(ARRAY, ELEMENTS);
  191. # loop through array of defines, outputting code
  192. for (i = 0; i < ELEMENTS; i++) {
  193. print "#ifdef " ARRAY[i];
  194. # I don't know which one to use....
  195. print "\toutput(screen, \" " ARRAY[i] "\\n\");";
  196. #printf "\toutput(screen, \" %s\\n %s\\n\\n\");\n", comments_ary[ARRAY[i]], ARRAY[i];
  197. #printf "\toutput(screen, \" %-35s %s\\n\");\n", ARRAY[i], comments_ary[ARRAY[i]];
  198. print "#endif";
  199. }
  200. return;
  201. }
  202. END {
  203. ##################################################
  204. # add code to show various options
  205. print "/* Output various other options (as gleaned from include/config.h.in) */";
  206. output(sys_ary, sys_i, "System Headers");
  207. output(headers_ary, headers_i, "Headers");
  208. output(utmp_ary, utmp_i, "UTMP Options");
  209. output(have_ary, have_i, "HAVE_* Defines");
  210. output(with_ary, with_i, "--with Options");
  211. output(misc_ary, misc_i, "Build Options");
  212. ##################################################
  213. # add code to display the various type sizes
  214. print " /* Output the sizes of the various types */";
  215. print " output(screen, \"\\nType sizes:\\n\");";
  216. print " output(screen, \" sizeof(char): %lu\\n\",(unsigned long)sizeof(char));";
  217. print " output(screen, \" sizeof(int): %lu\\n\",(unsigned long)sizeof(int));";
  218. print " output(screen, \" sizeof(long): %lu\\n\",(unsigned long)sizeof(long));";
  219. print "#if HAVE_LONGLONG"
  220. print " output(screen, \" sizeof(long long): %lu\\n\",(unsigned long)sizeof(long long));";
  221. print "#endif"
  222. print " output(screen, \" sizeof(uint8): %lu\\n\",(unsigned long)sizeof(uint8));";
  223. print " output(screen, \" sizeof(uint16): %lu\\n\",(unsigned long)sizeof(uint16));";
  224. print " output(screen, \" sizeof(uint32): %lu\\n\",(unsigned long)sizeof(uint32));";
  225. print " output(screen, \" sizeof(short): %lu\\n\",(unsigned long)sizeof(short));";
  226. print " output(screen, \" sizeof(void*): %lu\\n\",(unsigned long)sizeof(void*));";
  227. print " output(screen, \" sizeof(size_t): %lu\\n\",(unsigned long)sizeof(size_t));";
  228. print " output(screen, \" sizeof(off_t): %lu\\n\",(unsigned long)sizeof(off_t));";
  229. print " output(screen, \" sizeof(ino_t): %lu\\n\",(unsigned long)sizeof(ino_t));";
  230. print " output(screen, \" sizeof(dev_t): %lu\\n\",(unsigned long)sizeof(dev_t));";
  231. ##################################################
  232. # add code to give information about modules
  233. print " output(screen, \"\\nBuiltin modules:\\n\");";
  234. print " output(screen, \" %s\\n\", STRING_STATIC_MODULES);";
  235. print "}";
  236. }