autodetect
上传用户:lampled
上传日期:2007-01-07
资源大小:94k
文件大小:8k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. # Copyright (C) 1995, 1996 by Sven Berkvens (sven@stack.nl)
  3. #
  4. # This script attemps to guess as many of the config.h settings as possible.
  5. # This is handy, but not always entirely successful. I still need to
  6. # experiment with GNU's autoconf someday, but I haven't found the time yet.
  7. # You might need to edit some "defines" below:
  8. includedir="/usr/include"
  9. tmpfile="/tmp/autodetect.$$.c"
  10. cc="`awk '/^CC.*=.*$/ {print $3}' < Makefile`"
  11. # Check if echo understand -n (only HP/UX doesn't seem to I far as I've heard)
  12. if echo -n 'Testing echo... ' 2>/dev/null
  13. then
  14. echo 'Done (-n is accepted)'
  15. echoarg="-n"
  16. else
  17. echo "Echo does not support the -n flag (don't worry)"
  18. echoarg=""
  19. fi
  20. # Delete the temporary file
  21. rm -fr "$tmpfile"
  22. # Make a function that will return 0 if the temporary file can
  23. # be compiled. If not, return 1.
  24. checkcompile() {
  25. if "$cc" "$tmpfile" -o "$tmpfile".out > /dev/null 2>&1
  26. then
  27. rm -f "$tmpfile"
  28. echo "Yes!" >&2
  29. return 0
  30. else
  31. rm -f "$tmpfile"
  32. echo "Nope..." >&2
  33. return 1
  34. fi
  35. }
  36. # Print the defines
  37. echo "The main include directory is: $includedir"
  38. echo "The compiler that will be used is: $cc"
  39. # Begin of script
  40. rm -fr "$tmpfile"
  41. if [ ! -f config.h.generic ]
  42. then
  43. echo No config.h.generic found! >&2
  44. exit 1
  45. fi
  46. if [ -f config.h ]
  47. then
  48. echo A config.h already exists. Renaming it to config.h.old. >&2
  49. mv config.h config.h.old || { echo Rename failed! >&2 ; exit 1 ; }
  50. fi
  51. echo Building config.h... >&2
  52. while read define symbol rest
  53. do
  54. if [ "$define" = "/*" -a "$symbol" = "No" ]
  55. then
  56. echo "$define $symbol $rest"
  57. cat
  58. continue
  59. fi
  60. if [ "$rest" != "" ]
  61. then
  62. case "$symbol" in
  63. PATH_*)
  64. prog="`echo "$symbol" | sed -e 's,^PATH_,,' | tr '[A-Z]_' '[a-z]/'`"
  65. found=0
  66. echo $echoarg "Searching for $prog... " >&2
  67. for p in `echo $PATH | tr ':' ' '`
  68. do
  69. if [ -x "$p"/"$prog" ]
  70. then
  71. echo "Found it in $p" >&2
  72. rest=""$p/$prog""
  73. found=1
  74. break
  75. fi
  76. done
  77. if [ "$found" = 0 ]
  78. then
  79. echo "Could not find it!" >&2
  80. define="#undef"
  81. rest=""
  82. fi
  83. ;;
  84. esac
  85. echo "$define $symbol $rest"
  86. continue
  87. fi
  88. case "$define"
  89. in
  90. #define | #undef)
  91. case "$symbol"
  92. in
  93. HAVE_*_H)
  94. hfile="`echo "$symbol" | sed -e 's,^HAVE_,,' -e 's,_H$,,' | 
  95. tr '[A-Z]_' '[a-z]/'`".h
  96. if [ "$hfile" = strings.h -a -f "${includedir}/string.h" -a -f "${includedir}/strings.h" ]
  97. then
  98. echo $echoarg 'Checking whether you can use string.h and strings.h together... ' >&2
  99. echo '#include <string.h>' > "$tmpfile"
  100. echo '#include <strings.h>' >> "$tmpfile"
  101. echo 'main() { }' >> "$tmpfile"
  102. if checkcompile
  103. then
  104. echo '#define HAVE_STRINGS_H'
  105. echo 'Using string.h and strings.h (they go together)' >&2
  106. continue
  107. else
  108. echo '#undef HAVE_STRINGS_H'
  109. echo 'Using string.h instead of strings.h (you have both)' >&2
  110. continue
  111. fi
  112. fi
  113. echo $echoarg Checking for "$hfile"...' ' >&2
  114. if [ -f "${includedir}/${hfile}" ]
  115. then
  116. echo "#define $symbol $rest"
  117. echo Found >&2
  118. else
  119. echo "#undef $symbol $rest"
  120. echo Not found >&2
  121. fi
  122. ;;
  123. NEED_SYS_ERRLIST_DECL)
  124. echo $echoarg "Checking if you can live without declaring sys_nerr... " >&2
  125. cat > "$tmpfile" << EOF
  126. #include <errno.h>
  127. #include <stdio.h>
  128. main(){int temp = sys_nerr;}
  129. EOF
  130. if checkcompile
  131. then
  132. echo "#undef $symbol $rest"
  133. else
  134. echo "#define $symbol $rest"
  135. fi
  136. ;;
  137. NEED_DECL_ENVIRON)
  138. echo $echoarg "Checking if you can live without declaring environ... " >&2
  139. cat > "$tmpfile" << EOF
  140. #include <unistd.h>
  141. #include <stdio.h>
  142. main(){char **temp = environ;}
  143. EOF
  144. if checkcompile
  145. then
  146. echo "#undef $symbol $rest"
  147. else
  148. echo "#define $symbol $rest"
  149. fi
  150. ;;
  151. NEED_OPTARG_AND_OPTIND)
  152. echo $echoarg "Checking if you can live without declaring optarg and optind... " >&2
  153. echo '#include <stdlib.h>' > "$tmpfile"
  154. if [ -f "$includedir"/getopt.h ]
  155. then
  156. echo '#include <getopt.h>' >> "$tmpfile"
  157. fi
  158. echo 'main() { int a = optind; }' >> "$tmpfile"
  159. if checkcompile
  160. then
  161. echo "#undef $symbol $rest"
  162. else
  163. echo "#define $symbol $rest"
  164. fi
  165. ;;
  166. HAVE_*)
  167. func="`echo "$symbol" | sed -e 's,^HAVE_,,' | tr '[A-Z]' '[a-z]'`"
  168. echo $echoarg Checking if you have function "$func"'()... ' >&2
  169. echo 'main(){ '"$func"' (); }' > "$tmpfile"
  170. if checkcompile
  171. then
  172. echo "#define $symbol $rest"
  173. else
  174. echo "#undef $symbol $rest"
  175. fi
  176. ;;
  177. NO*_T)
  178. name="`echo "$symbol" | sed -e 's,^NO,,' | tr '[A-Z]' '[a-z]'`"
  179. echo $echoarg Checking if you have type "$name"'... ' >&2
  180. echo '#include <sys/types.h>' > "$tmpfile"
  181. echo '#include <sys/stat.h>' >> "$tmpfile"
  182. echo "$name" 'temp; int main(){}' >> "$tmpfile"
  183. if checkcompile
  184. then
  185. echo "#undef $symbol $rest"
  186. else
  187. echo "#define $symbol $rest"
  188. fi
  189. ;;
  190. NOPROTOS)
  191. echo $echoarg Checking if you can handle prototypes...' ' >&2
  192. echo "int temp(int); int main(){}" > "$tmpfile"
  193. if checkcompile
  194. then
  195. echo "#undef NOPROTOS $rest"
  196. else
  197. echo "#define NOPROTOS $rest"
  198. fi
  199. ;;
  200. NOFORWARDS)
  201. echo $echoarg Checking if you can handle forwards...' ' >&2
  202. echo "int temp(); int main(){}" > "$tmpfile"
  203. if checkcompile
  204. then
  205. echo "#undef NOFORWARDS $rest"
  206. else
  207. echo "#define NOFORWARDS $rest"
  208. fi
  209. ;;
  210. NONEWSTYLE)
  211. echo $echoarg Checking if you can handle new style decls...' ' >&2
  212. echo 'int main(int argc, char *argv[]){}' > "$tmpfile"
  213. if checkcompile
  214. then
  215. echo "#undef NONEWSTYLE $rest"
  216. else
  217. echo "#define NONEWSTYLE $rest"
  218. fi
  219. ;;
  220. NOSTATIC)
  221. echo $echoarg Checking if you have static...' ' >&2
  222. echo 'static int temp; int main(){}' > "$tmpfile"
  223. if checkcompile
  224. then
  225. echo "#undef NOSTATIC $rest"
  226. else
  227. echo "#define NOSTATIC $rest"
  228. fi
  229. ;;
  230. NOCONST)
  231. echo $echoarg Checking if you have const...' ' >&2
  232. echo 'const int temp; int main(){}' > "$tmpfile"
  233. if checkcompile
  234. then
  235. echo "#undef NOCONST $rest"
  236. else
  237. echo "#define NOCONST $rest"
  238. fi
  239. ;;
  240. NOEXTERN)
  241. echo $echoarg Checking if you have extern...' ' >&2
  242. echo 'extern int printf(); int main(){}' > "$tmpfile"
  243. if checkcompile
  244. then
  245. echo "#undef NOEXTERN $rest"
  246. else
  247. echo "#define NOEXTERN $rest"
  248. fi
  249. ;;
  250. NOVOID)
  251. echo $echoarg Checking if you have void...' ' >&2
  252. echo 'void main(){}' > "$tmpfile"
  253. if checkcompile
  254. then
  255. echo "#undef NOVOID $rest"
  256. else
  257. echo "#define NOVOID $rest"
  258. fi
  259. ;;
  260. SYS_TIME_WITH_TIME)
  261. echo $echoarg Checking if you can handle time.h and sys/time.h together...' ' >&2
  262. cat << EOF > "$tmpfile"
  263. #include <sys/types.h>
  264. #include <sys/time.h>
  265. #include <time.h>
  266. main(){}
  267. EOF
  268. if checkcompile
  269. then
  270. echo "#define SYS_TIME_WITH_TIME"
  271. else
  272. echo "#undef SYS_TIME_WITH_TIME"
  273. fi
  274. ;;
  275. THISDOMAIN)
  276. echo $echoarg "Autodetecting this domain's name... " >&2
  277. domain="`hostname | sed 's/^[^.]*//'`"
  278. if [ "$domain" = "." -o "$domain" = "" ]
  279. then
  280. domain=."`domainname`"
  281. fi
  282. if [ "$domain" = "." -o "$domain" = ".(none)" ]
  283. then
  284. domain=."`uname -n | sed 's/^[^.]*//'`"
  285. fi
  286. if [ "$domain" = "." ]
  287. then
  288. echo "Failed... Check config.h" >&2
  289. echo "$define $symbol $rest"
  290. else
  291. echo "$domain" >&2
  292. echo "#define THISDOMAIN "'"'"$domain"'"'
  293. fi
  294. ;;
  295. *)
  296. echo "No autodetect possible for $symbol"... See config.h. >&2
  297. echo "$define $symbol $rest"
  298. ;;
  299. esac
  300. ;;
  301. *)
  302. echo "$define $symbol $rest"
  303. ;;
  304. esac
  305. done < config.h.generic > config.h
  306. echo "Done! Please check config.h to correct any wrong guesses..." >&2
  307. echo "Also check the Makefile: you might need to adjust CC, CFLAGS and LDFLAGS"
  308. exit 0