make 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. # Copyright (C) Igor Sysoev
  2. # Copyright (C) Nginx, Inc.
  3. echo "creating $NGX_MAKEFILE"
  4. mkdir -p $NGX_OBJS/src/core $NGX_OBJS/src/event $NGX_OBJS/src/event/modules \
  5. $NGX_OBJS/src/event/quic \
  6. $NGX_OBJS/src/os/unix $NGX_OBJS/src/os/win32 \
  7. $NGX_OBJS/src/http $NGX_OBJS/src/http/v2 $NGX_OBJS/src/http/v3 \
  8. $NGX_OBJS/src/http/modules $NGX_OBJS/src/http/modules/perl \
  9. $NGX_OBJS/src/mail \
  10. $NGX_OBJS/src/stream \
  11. $NGX_OBJS/src/misc
  12. ngx_objs_dir=$NGX_OBJS$ngx_regex_dirsep
  13. ngx_use_pch=`echo $NGX_USE_PCH | sed -e "s/\//$ngx_regex_dirsep/g"`
  14. cat << END > $NGX_MAKEFILE
  15. CC = $CC
  16. CFLAGS = $CFLAGS
  17. CPP = $CPP
  18. LINK = $LINK
  19. END
  20. if test -n "$NGX_PERL_CFLAGS"; then
  21. echo NGX_PERL_CFLAGS = $NGX_PERL_CFLAGS >> $NGX_MAKEFILE
  22. echo NGX_PM_CFLAGS = $NGX_PM_CFLAGS >> $NGX_MAKEFILE
  23. echo NGX_PM_LDFLAGS = $NGX_PM_LDFLAGS >> $NGX_MAKEFILE
  24. fi
  25. # ALL_INCS, required by the addons and by OpenWatcom C precompiled headers
  26. ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS $STREAM_INCS\
  27. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
  28. -e "s/\//$ngx_regex_dirsep/g"`
  29. cat << END >> $NGX_MAKEFILE
  30. ALL_INCS = $ngx_include_opt$ngx_incs
  31. END
  32. ngx_all_srcs="$CORE_SRCS"
  33. # the core dependencies and include paths
  34. ngx_deps=`echo $CORE_DEPS $NGX_AUTO_CONFIG_H $NGX_PCH \
  35. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  36. -e "s/\//$ngx_regex_dirsep/g"`
  37. ngx_incs=`echo $CORE_INCS $NGX_OBJS \
  38. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
  39. -e "s/\//$ngx_regex_dirsep/g"`
  40. cat << END >> $NGX_MAKEFILE
  41. CORE_DEPS = $ngx_deps
  42. CORE_INCS = $ngx_include_opt$ngx_incs
  43. END
  44. # the http dependencies and include paths
  45. if [ $HTTP = YES ]; then
  46. ngx_all_srcs="$ngx_all_srcs $HTTP_SRCS"
  47. ngx_deps=`echo $HTTP_DEPS \
  48. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  49. -e "s/\//$ngx_regex_dirsep/g"`
  50. ngx_incs=`echo $HTTP_INCS \
  51. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
  52. -e "s/\//$ngx_regex_dirsep/g"`
  53. cat << END >> $NGX_MAKEFILE
  54. HTTP_DEPS = $ngx_deps
  55. HTTP_INCS = $ngx_include_opt$ngx_incs
  56. END
  57. fi
  58. # the mail dependencies and include paths
  59. if [ $MAIL != NO ]; then
  60. if [ $MAIL = YES ]; then
  61. ngx_all_srcs="$ngx_all_srcs $MAIL_SRCS"
  62. fi
  63. ngx_deps=`echo $MAIL_DEPS \
  64. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  65. -e "s/\//$ngx_regex_dirsep/g"`
  66. ngx_incs=`echo $MAIL_INCS \
  67. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
  68. -e "s/\//$ngx_regex_dirsep/g"`
  69. cat << END >> $NGX_MAKEFILE
  70. MAIL_DEPS = $ngx_deps
  71. MAIL_INCS = $ngx_include_opt$ngx_incs
  72. END
  73. fi
  74. # the stream dependencies and include paths
  75. if [ $STREAM != NO ]; then
  76. if [ $STREAM = YES ]; then
  77. ngx_all_srcs="$ngx_all_srcs $STREAM_SRCS"
  78. fi
  79. ngx_deps=`echo $STREAM_DEPS \
  80. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  81. -e "s/\//$ngx_regex_dirsep/g"`
  82. ngx_incs=`echo $STREAM_INCS \
  83. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
  84. -e "s/\//$ngx_regex_dirsep/g"`
  85. cat << END >> $NGX_MAKEFILE
  86. STREAM_DEPS = $ngx_deps
  87. STREAM_INCS = $ngx_include_opt$ngx_incs
  88. END
  89. fi
  90. ngx_all_srcs="$ngx_all_srcs $MISC_SRCS"
  91. if test -n "$NGX_ADDON_SRCS$DYNAMIC_MODULES"; then
  92. cat << END >> $NGX_MAKEFILE
  93. ADDON_DEPS = \$(CORE_DEPS) $NGX_ADDON_DEPS
  94. END
  95. fi
  96. # nginx
  97. ngx_all_srcs=`echo $ngx_all_srcs | sed -e "s/\//$ngx_regex_dirsep/g"`
  98. for ngx_src in $NGX_ADDON_SRCS
  99. do
  100. ngx_obj="addon/`basename \`dirname $ngx_src\``"
  101. test -d $NGX_OBJS/$ngx_obj || mkdir -p $NGX_OBJS/$ngx_obj
  102. ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \
  103. | sed -e "s/\//$ngx_regex_dirsep/g"`
  104. ngx_all_srcs="$ngx_all_srcs $ngx_obj"
  105. done
  106. ngx_all_objs=`echo $ngx_all_srcs \
  107. | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \
  108. -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \
  109. -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \
  110. -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"`
  111. ngx_modules_c=`echo $NGX_MODULES_C | sed -e "s/\//$ngx_regex_dirsep/g"`
  112. ngx_modules_obj=`echo $ngx_modules_c | sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
  113. if test -n "$NGX_RES"; then
  114. ngx_res=$NGX_RES
  115. else
  116. ngx_res="$NGX_RC $NGX_ICONS"
  117. ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"`
  118. fi
  119. ngx_deps=`echo $ngx_all_objs $ngx_modules_obj $ngx_res $LINK_DEPS \
  120. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  121. -e "s/\//$ngx_regex_dirsep/g"`
  122. ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \
  123. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
  124. -e "s/\//$ngx_regex_dirsep/g"`
  125. ngx_libs=
  126. if test -n "$NGX_LD_OPT$CORE_LIBS"; then
  127. ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS \
  128. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
  129. fi
  130. ngx_link=${CORE_LINK:+`echo $CORE_LINK \
  131. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
  132. ngx_main_link=${MAIN_LINK:+`echo $MAIN_LINK \
  133. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
  134. cat << END >> $NGX_MAKEFILE
  135. build: binary modules manpage
  136. binary: $NGX_OBJS${ngx_dirsep}nginx$ngx_binext
  137. $NGX_OBJS${ngx_dirsep}nginx$ngx_binext: $ngx_deps$ngx_spacer
  138. \$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_binext$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
  139. $ngx_rcc
  140. $ngx_long_end
  141. modules:
  142. END
  143. # ngx_modules.c
  144. if test -n "$NGX_PCH"; then
  145. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  146. else
  147. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS)"
  148. fi
  149. cat << END >> $NGX_MAKEFILE
  150. $ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c
  151. $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
  152. END
  153. # the core sources
  154. for ngx_src in $CORE_SRCS
  155. do
  156. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  157. ngx_obj=`echo $ngx_src \
  158. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  159. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  160. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  161. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  162. cat << END >> $NGX_MAKEFILE
  163. $ngx_obj: \$(CORE_DEPS)$ngx_cont$ngx_src
  164. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  165. END
  166. done
  167. # the http sources
  168. if [ $HTTP = YES ]; then
  169. if test -n "$NGX_PCH"; then
  170. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  171. else
  172. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(HTTP_INCS)"
  173. ngx_perl_cc="\$(CC) $ngx_compile_opt \$(NGX_PERL_CFLAGS)"
  174. ngx_perl_cc="$ngx_perl_cc \$(CORE_INCS) \$(HTTP_INCS)"
  175. fi
  176. for ngx_source in $HTTP_SRCS
  177. do
  178. ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
  179. ngx_obj=`echo $ngx_src \
  180. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  181. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  182. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  183. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  184. if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then
  185. cat << END >> $NGX_MAKEFILE
  186. $ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
  187. $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  188. END
  189. else
  190. cat << END >> $NGX_MAKEFILE
  191. $ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
  192. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  193. END
  194. fi
  195. done
  196. fi
  197. # the mail sources
  198. if [ $MAIL = YES ]; then
  199. if test -n "$NGX_PCH"; then
  200. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  201. else
  202. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(MAIL_INCS)"
  203. fi
  204. for ngx_src in $MAIL_SRCS
  205. do
  206. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  207. ngx_obj=`echo $ngx_src \
  208. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  209. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  210. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  211. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  212. cat << END >> $NGX_MAKEFILE
  213. $ngx_obj: \$(CORE_DEPS) \$(MAIL_DEPS)$ngx_cont$ngx_src
  214. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  215. END
  216. done
  217. fi
  218. # the stream sources
  219. if [ $STREAM = YES ]; then
  220. if test -n "$NGX_PCH"; then
  221. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  222. else
  223. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(STREAM_INCS)"
  224. fi
  225. for ngx_src in $STREAM_SRCS
  226. do
  227. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  228. ngx_obj=`echo $ngx_src \
  229. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  230. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  231. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  232. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  233. cat << END >> $NGX_MAKEFILE
  234. $ngx_obj: \$(CORE_DEPS) \$(STREAM_DEPS)$ngx_cont$ngx_src
  235. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  236. END
  237. done
  238. fi
  239. # the misc sources
  240. if test -n "$MISC_SRCS"; then
  241. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  242. for ngx_src in $MISC_SRCS
  243. do
  244. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  245. ngx_obj=`echo $ngx_src \
  246. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  247. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  248. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  249. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  250. cat << END >> $NGX_MAKEFILE
  251. $ngx_obj: \$(CORE_DEPS) $ngx_cont$ngx_src
  252. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  253. END
  254. done
  255. fi
  256. # the addons sources
  257. if test -n "$NGX_ADDON_SRCS"; then
  258. ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  259. for ngx_src in $NGX_ADDON_SRCS
  260. do
  261. ngx_obj="addon/`basename \`dirname $ngx_src\``"
  262. ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \
  263. | sed -e "s/\//$ngx_regex_dirsep/g"`
  264. ngx_obj=`echo $ngx_obj \
  265. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  266. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  267. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  268. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  269. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  270. cat << END >> $NGX_MAKEFILE
  271. $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
  272. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  273. END
  274. done
  275. fi
  276. # the addons config.make
  277. if test -n "$NGX_ADDONS$DYNAMIC_ADDONS"; then
  278. for ngx_addon_dir in $NGX_ADDONS $DYNAMIC_ADDONS
  279. do
  280. if test -f $ngx_addon_dir/config.make; then
  281. . $ngx_addon_dir/config.make
  282. fi
  283. done
  284. fi
  285. # Win32 resource file
  286. if test -n "$NGX_RES"; then
  287. ngx_res=`echo "$NGX_RES: $NGX_RC $NGX_ICONS" \
  288. | sed -e "s/\//$ngx_regex_dirsep/g"`
  289. ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"`
  290. cat << END >> $NGX_MAKEFILE
  291. $ngx_res
  292. $ngx_rcc
  293. END
  294. fi
  295. # the precompiled headers
  296. if test -n "$NGX_PCH"; then
  297. echo "#include <ngx_config.h>" > $NGX_OBJS/ngx_pch.c
  298. ngx_pch="src/core/ngx_config.h $OS_CONFIG $NGX_OBJS/ngx_auto_config.h"
  299. ngx_pch=`echo "$NGX_PCH: $ngx_pch" | sed -e "s/\//$ngx_regex_dirsep/g"`
  300. ngx_src="\$(CC) \$(CFLAGS) $NGX_BUILD_PCH $ngx_compile_opt \$(ALL_INCS)"
  301. ngx_src="$ngx_src $ngx_objout$NGX_OBJS/ngx_pch.obj $NGX_OBJS/ngx_pch.c"
  302. ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
  303. cat << END >> $NGX_MAKEFILE
  304. $ngx_pch
  305. $ngx_src
  306. END
  307. fi
  308. # dynamic modules
  309. if test -n "$NGX_PCH"; then
  310. ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
  311. else
  312. ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) \$(ALL_INCS)"
  313. ngx_perl_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(NGX_PERL_CFLAGS)"
  314. ngx_perl_cc="$ngx_perl_cc \$(ALL_INCS)"
  315. fi
  316. for ngx_module in $DYNAMIC_MODULES
  317. do
  318. eval ngx_module_srcs="\$${ngx_module}_SRCS"
  319. eval ngx_module_shrd="\$${ngx_module}_SHRD"
  320. eval eval ngx_module_libs="\\\"\$${ngx_module}_LIBS\\\""
  321. eval ngx_module_modules="\$${ngx_module}_MODULES"
  322. eval ngx_module_order="\$${ngx_module}_ORDER"
  323. ngx_modules_c=$NGX_OBJS/${ngx_module}_modules.c
  324. cat << END > $ngx_modules_c
  325. #include <ngx_config.h>
  326. #include <ngx_core.h>
  327. END
  328. for mod in $ngx_module_modules
  329. do
  330. echo "extern ngx_module_t $mod;" >> $ngx_modules_c
  331. done
  332. echo >> $ngx_modules_c
  333. echo 'ngx_module_t *ngx_modules[] = {' >> $ngx_modules_c
  334. for mod in $ngx_module_modules
  335. do
  336. echo " &$mod," >> $ngx_modules_c
  337. done
  338. cat << END >> $ngx_modules_c
  339. NULL
  340. };
  341. END
  342. echo 'char *ngx_module_names[] = {' >> $ngx_modules_c
  343. for mod in $ngx_module_modules
  344. do
  345. echo " \"$mod\"," >> $ngx_modules_c
  346. done
  347. cat << END >> $ngx_modules_c
  348. NULL
  349. };
  350. END
  351. echo 'char *ngx_module_order[] = {' >> $ngx_modules_c
  352. for mod in $ngx_module_order
  353. do
  354. echo " \"$mod\"," >> $ngx_modules_c
  355. done
  356. cat << END >> $ngx_modules_c
  357. NULL
  358. };
  359. END
  360. ngx_modules_c=`echo $ngx_modules_c | sed -e "s/\//$ngx_regex_dirsep/g"`
  361. ngx_modules_obj=`echo $ngx_modules_c \
  362. | sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
  363. ngx_module_objs=
  364. for ngx_src in $ngx_module_srcs $ngx_module_shrd
  365. do
  366. case "$ngx_src" in
  367. src/*)
  368. ngx_obj=$ngx_src
  369. ;;
  370. *)
  371. ngx_obj="addon/`basename \`dirname $ngx_src\``"
  372. mkdir -p $NGX_OBJS/$ngx_obj
  373. ngx_obj="$ngx_obj/`basename $ngx_src`"
  374. ;;
  375. esac
  376. ngx_module_objs="$ngx_module_objs $ngx_obj"
  377. done
  378. ngx_module_objs=`echo $ngx_module_objs \
  379. | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \
  380. -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \
  381. -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \
  382. -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"`
  383. ngx_deps=`echo $ngx_module_objs $ngx_modules_obj $LINK_DEPS \
  384. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
  385. -e "s/\//$ngx_regex_dirsep/g"`
  386. ngx_objs=`echo $ngx_module_objs $ngx_modules_obj \
  387. | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
  388. -e "s/\//$ngx_regex_dirsep/g"`
  389. ngx_obj=$NGX_OBJS$ngx_dirsep$ngx_module$ngx_modext
  390. if [ "$NGX_PLATFORM" = win32 ]; then
  391. ngx_module_libs="$CORE_LIBS $ngx_module_libs"
  392. fi
  393. ngx_libs=
  394. if test -n "$NGX_LD_OPT$ngx_module_libs"; then
  395. ngx_libs=`echo $NGX_LD_OPT $ngx_module_libs \
  396. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
  397. fi
  398. ngx_link=${CORE_LINK:+`echo $CORE_LINK \
  399. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
  400. ngx_module_link=${MODULE_LINK:+`echo $MODULE_LINK \
  401. | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
  402. cat << END >> $NGX_MAKEFILE
  403. modules: $ngx_obj
  404. $ngx_obj: $ngx_deps$ngx_spacer
  405. \$(LINK) $ngx_long_start$ngx_binout$ngx_obj$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_module_link
  406. $ngx_long_end
  407. $ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c
  408. $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
  409. END
  410. for ngx_source in $ngx_module_srcs
  411. do
  412. case "$ngx_source" in
  413. src/*)
  414. ngx_obj=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
  415. ;;
  416. *)
  417. ngx_obj="addon/`basename \`dirname $ngx_source\``"
  418. ngx_obj=`echo $ngx_obj/\`basename $ngx_source\` \
  419. | sed -e "s/\//$ngx_regex_dirsep/g"`
  420. ;;
  421. esac
  422. ngx_obj=`echo $ngx_obj \
  423. | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
  424. -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
  425. -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
  426. -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
  427. ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
  428. if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then
  429. cat << END >> $NGX_MAKEFILE
  430. $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
  431. $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  432. END
  433. else
  434. cat << END >> $NGX_MAKEFILE
  435. $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
  436. $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
  437. END
  438. fi
  439. done
  440. done