PageRenderTime 58ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/m4/ax_enable_builddir.m4

https://github.com/vadmium/module-init-tools
m4 | 302 lines | 214 code | 1 blank | 87 comment | 0 complexity | d0ac938e7e8ff2fa538828c038e55461 MD5 | raw file
  1. # ===========================================================================
  2. # http://autoconf-archive.cryp.to/ax_enable_builddir.html
  3. # ===========================================================================
  4. #
  5. # SYNOPSIS
  6. #
  7. # AX_ENABLE_BUILDDIR [(dirstring-or-command [,Makefile.mk [,-all]])]
  8. #
  9. # DESCRIPTION
  10. #
  11. # If the current configure was run within the srcdir then we move all
  12. # configure-files into a subdir and let the configure steps continue
  13. # there. We provide an option --disable-builddir to suppress the move into
  14. # a separate builddir.
  15. #
  16. # Defaults:
  17. #
  18. # $1 = $host (overridden with $HOST)
  19. # $2 = Makefile.mk
  20. # $3 = -all
  21. #
  22. # This macro must be called before AM_INIT_AUTOMAKE. It creates a default
  23. # toplevel srcdir Makefile from the information found in the created
  24. # toplevel builddir Makefile. It just copies the variables and
  25. # rule-targets, each extended with a default rule-execution that recurses
  26. # into the build directory of the current "HOST". You can override the
  27. # auto-dection through `config.guess` and build-time of course, as in
  28. #
  29. # make HOST=i386-mingw-cross
  30. #
  31. # which can of course set at configure time as well using
  32. #
  33. # configure --host=i386-mingw-cross
  34. #
  35. # After the default has been created, additional rules can be appended
  36. # that will not just recurse into the subdirectories and only ever exist
  37. # in the srcdir toplevel makefile - these parts are read from the $2 =
  38. # Makefile.mk file
  39. #
  40. # The automatic rules are usually scanning the toplevel Makefile for lines
  41. # like '#### $host |$builddir' to recognize the place where to recurse
  42. # into. Usually, the last one is the only one used. However, almost all
  43. # targets have an additional "*-all" rule which makes the script to
  44. # recurse into _all_ variants of the current HOST (!!) setting. The "-all"
  45. # suffix can be overriden for the macro as well.
  46. #
  47. # a special rule is only given for things like "dist" that will copy the
  48. # tarball from the builddir to the sourcedir (or $(PUB)) for reason of
  49. # convenience.
  50. #
  51. # LAST MODIFICATION
  52. #
  53. # 2009-03-09
  54. #
  55. # COPYLEFT
  56. #
  57. # Copyright (c) 2009 Guido U. Draheim <guidod@gmx.de>
  58. # Copyright (c) 2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
  59. #
  60. # This program is free software; you can redistribute it and/or modify it
  61. # under the terms of the GNU General Public License as published by the
  62. # Free Software Foundation; either version 2 of the License, or (at your
  63. # option) any later version.
  64. #
  65. # This program is distributed in the hope that it will be useful, but
  66. # WITHOUT ANY WARRANTY; without even the implied warranty of
  67. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  68. # Public License for more details.
  69. #
  70. # You should have received a copy of the GNU General Public License along
  71. # with this program. If not, see <http://www.gnu.org/licenses/>.
  72. #
  73. # As a special exception, the respective Autoconf Macro's copyright owner
  74. # gives unlimited permission to copy, distribute and modify the configure
  75. # scripts that are the output of Autoconf when processing the Macro. You
  76. # need not follow the terms of the GNU General Public License when using
  77. # or distributing such scripts, even though portions of the text of the
  78. # Macro appear in them. The GNU General Public License (GPL) does govern
  79. # all other use of the material that constitutes the Autoconf Macro.
  80. #
  81. # This special exception to the GPL applies to versions of the Autoconf
  82. # Macro released by the Autoconf Macro Archive. When you make and
  83. # distribute a modified version of the Autoconf Macro, you may extend this
  84. # special exception to the GPL to apply to your modified version as well.
  85. AC_DEFUN([AX_ENABLE_BUILDDIR],[
  86. AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
  87. AC_REQUIRE([AX_CONFIGURE_ARGS])[]dnl
  88. AC_REQUIRE([AM_AUX_DIR_EXPAND])[]dnl
  89. AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl
  90. AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
  91. AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
  92. AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
  93. SUB="."
  94. AC_ARG_ENABLE([builddir], AC_HELP_STRING(
  95. [--disable-builddir],[disable automatic build in subdir of sources])
  96. ,[SUB="$enableval"], [SUB="auto"])
  97. if test ".$ac_srcdir_defaulted" != ".no" ; then
  98. if test ".$srcdir" = ".." ; then
  99. if test -f config.status ; then
  100. AC_MSG_NOTICE(toplevel srcdir already configured... skipping subdir build)
  101. else
  102. test ".$SUB" = "." && SUB="."
  103. test ".$SUB" = ".no" && SUB="."
  104. test ".$TARGET" = "." && TARGET="$target"
  105. test ".$SUB" = ".auto" && SUB="m4_ifval([$1], [$1],[$TARGET])"
  106. if test ".$SUB" != ".." ; then # we know where to go and
  107. AS_MKDIR_P([$SUB])
  108. echo __.$SUB.__ > $SUB/conftest.tmp
  109. cd $SUB
  110. if grep __.$SUB.__ conftest.tmp >/dev/null 2>/dev/null ; then
  111. rm conftest.tmp
  112. AC_MSG_RESULT([continue configure in default builddir "./$SUB"])
  113. else
  114. AC_MSG_ERROR([could not change to default builddir "./$SUB"])
  115. fi
  116. srcdir=`echo "$SUB" |
  117. sed -e 's,^\./,,;s,[[^/]]$,&/,;s,[[^/]]*/,../,g;s,[[/]]$,,;'`
  118. # going to restart from subdirectory location
  119. test -f $srcdir/config.log && mv $srcdir/config.log .
  120. test -f $srcdir/confdefs.h && mv $srcdir/confdefs.h .
  121. test -f $srcdir/conftest.log && mv $srcdir/conftest.log .
  122. test -f $srcdir/$cache_file && mv $srcdir/$cache_file .
  123. AC_MSG_RESULT(....exec $SHELL $srcdir/[$]0 "--srcdir=$srcdir" "--enable-builddir=$SUB" ${1+"[$]@"})
  124. case "[$]0" in # restart
  125. [/\\]*) eval $SHELL "'[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
  126. *) eval $SHELL "'$srcdir/[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
  127. esac ; exit $?
  128. fi
  129. fi
  130. fi fi
  131. test ".$SUB" = ".auto" && SUB="."
  132. dnl ac_path_prog uses "set dummy" to override $@ which would defeat the "exec"
  133. AC_PATH_PROG(SED,gsed sed, sed)
  134. AUX="$am_aux_dir"
  135. AS_VAR_POPDEF([SED])dnl
  136. AS_VAR_POPDEF([AUX])dnl
  137. AS_VAR_POPDEF([SUB])dnl
  138. AC_CONFIG_COMMANDS([buildir],[dnl .............. config.status ..............
  139. AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
  140. AS_VAR_PUSHDEF([TOP],[top_srcdir])dnl
  141. AS_VAR_PUSHDEF([SRC],[ac_top_srcdir])dnl
  142. AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
  143. AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
  144. pushdef([END],[Makefile.mk])dnl
  145. pushdef([_ALL],[ifelse([$3],,[-all],[$3])])dnl
  146. SRC="$ax_enable_builddir_srcdir"
  147. if test ".$SUB" = ".." ; then
  148. if test -f "$TOP/Makefile" ; then
  149. AC_MSG_NOTICE([skipping TOP/Makefile - left untouched])
  150. else
  151. AC_MSG_NOTICE([skipping TOP/Makefile - not created])
  152. fi
  153. else
  154. if test -f "$SRC/Makefile" ; then
  155. a=`grep "^VERSION " "$SRC/Makefile"` ; b=`grep "^VERSION " Makefile`
  156. test "$a" != "$b" && rm "$SRC/Makefile"
  157. fi
  158. if test -f "$SRC/Makefile" ; then
  159. echo "$SRC/Makefile : $SRC/Makefile.in" > $tmp/conftemp.mk
  160. echo " []@ echo 'REMOVED,,,' >\$[]@" >> $tmp/conftemp.mk
  161. eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null"
  162. if grep '^REMOVED,,,' "$SRC/Makefile" >/dev/null
  163. then rm $SRC/Makefile ; fi
  164. cp $tmp/conftemp.mk $SRC/makefiles.mk~ ## DEBUGGING
  165. fi
  166. if test ! -f "$SRC/Makefile" ; then
  167. AC_MSG_NOTICE([create TOP/Makefile guessed from local Makefile])
  168. x='`' ; cat >$tmp/conftemp.sed <<_EOF
  169. /^\$/n
  170. x
  171. /^\$/bS
  172. x
  173. /\\\\\$/{H;d;}
  174. {H;s/.*//;x;}
  175. bM
  176. :S
  177. x
  178. /\\\\\$/{h;d;}
  179. {h;s/.*//;x;}
  180. :M
  181. s/\\(\\n\\) /\\1 /g
  182. /^ /d
  183. /^[[ ]]*[[\\#]]/d
  184. /^VPATH *=/d
  185. s/^srcdir *=.*/srcdir = ./
  186. s/^top_srcdir *=.*/top_srcdir = ./
  187. /[[:=]]/!d
  188. /^\\./d
  189. dnl Now handle rules (i.e. lines containing ":" but not " = ").
  190. / = /b
  191. / .= /b
  192. /:/!b
  193. s/:.*/:/
  194. s/ / /g
  195. s/ \\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/ \\1 \\1[]_ALL\\2/g
  196. s/^\\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/\\1 \\1[]_ALL\\2/
  197. s/ / /g
  198. /^all all[]_ALL[[ :]]/i\\
  199. all-configured : all[]_ALL
  200. dnl dist-all exists... and would make for dist-all-all
  201. s/ [[a-zA-Z0-9-]]*[]_ALL [[a-zA-Z0-9-]]*[]_ALL[]_ALL//g
  202. /[]_ALL[]_ALL/d
  203. a\\
  204. @ HOST="\$(HOST)\" \\\\\\
  205. ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
  206. ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
  207. ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
  208. ; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\
  209. ; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\
  210. ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
  211. ; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\
  212. ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
  213. ; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done
  214. dnl special rule add-on: "dist" copies the tarball to $(PUB). (source tree)
  215. /dist[]_ALL *:/a\\
  216. @ HOST="\$(HOST)\" \\\\\\
  217. ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
  218. ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
  219. ; found=$x echo \$\$BUILD | wc -w $x \\\\\\
  220. ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\
  221. ; if test "\$\$found" -eq "0" ; then : \\\\\\
  222. ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
  223. ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
  224. ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\
  225. ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
  226. dnl special rule add-on: "dist-foo" copies all the archives to $(PUB). (source tree)
  227. /dist-[[a-zA-Z0-9]]*[]_ALL *:/a\\
  228. @ HOST="\$(HOST)\" \\\\\\
  229. ; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\
  230. ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
  231. ; found=$x echo \$\$BUILD | wc -w $x \\\\\\
  232. ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\
  233. ; if test "\$\$found" -eq "0" ; then : \\\\\\
  234. ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
  235. ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
  236. ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\
  237. ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
  238. dnl special rule add-on: "distclean" removes all local builddirs completely
  239. /distclean[]_ALL *:/a\\
  240. @ HOST="\$(HOST)\" \\\\\\
  241. ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
  242. ; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\
  243. ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
  244. ; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\
  245. ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
  246. ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
  247. ; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\
  248. ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
  249. ; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\
  250. ; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\
  251. ; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile
  252. _EOF
  253. cp "$tmp/conftemp.sed" "$SRC/makefile.sed~" ## DEBUGGING
  254. $SED -f $tmp/conftemp.sed Makefile >$SRC/Makefile
  255. if test -f "$SRC/m4_ifval([$2],[$2],[END])" ; then
  256. AC_MSG_NOTICE([extend TOP/Makefile with TOP/m4_ifval([$2],[$2],[END])])
  257. cat $SRC/END >>$SRC/Makefile
  258. fi ; xxxx="####"
  259. echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$SRC/Makefile
  260. # sanity check
  261. if grep '^; echo "MAKE ' $SRC/Makefile >/dev/null ; then
  262. AC_MSG_NOTICE([buggy sed found - it deletes tab in "a" text parts])
  263. $SED -e '/^@ HOST=/s/^/ /' -e '/^; /s/^/ /' $SRC/Makefile \
  264. >$SRC/Makefile~
  265. (test -s $SRC/Makefile~ && mv $SRC/Makefile~ $SRC/Makefile) 2>/dev/null
  266. fi
  267. else
  268. xxxx="\\#\\#\\#\\#"
  269. # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed
  270. echo "s!^$xxxx [[^|]]* | *$SUB *\$!$xxxx ...... $SUB!" >$tmp/conftemp.sed
  271. $SED -f "$tmp/conftemp.sed" "$SRC/Makefile" >$tmp/mkfile.tmp
  272. cp "$tmp/conftemp.sed" "$SRC/makefiles.sed~" ## DEBUGGING
  273. cp "$tmp/mkfile.tmp" "$SRC/makefiles.out~" ## DEBUGGING
  274. if cmp -s "$SRC/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then
  275. AC_MSG_NOTICE([keeping TOP/Makefile from earlier configure])
  276. rm "$tmp/mkfile.tmp"
  277. else
  278. AC_MSG_NOTICE([reusing TOP/Makefile from earlier configure])
  279. mv "$tmp/mkfile.tmp" "$SRC/Makefile"
  280. fi
  281. fi
  282. AC_MSG_NOTICE([build in $SUB (HOST=$ax_enable_builddir_host)])
  283. xxxx="####"
  284. echo "$xxxx" "$ax_enable_builddir_host" "|$SUB" >>$SRC/Makefile
  285. fi
  286. popdef([END])dnl
  287. AS_VAR_POPDEF([SED])dnl
  288. AS_VAR_POPDEF([AUX])dnl
  289. AS_VAR_POPDEF([SRC])dnl
  290. AS_VAR_POPDEF([TOP])dnl
  291. AS_VAR_POPDEF([SUB])dnl
  292. ],[dnl
  293. ax_enable_builddir_srcdir="$srcdir" # $srcdir
  294. ax_enable_builddir_host="$HOST" # $HOST / $host
  295. ax_enable_builddir_version="$VERSION" # $VERSION
  296. ax_enable_builddir_package="$PACKAGE" # $PACKAGE
  297. ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX
  298. ax_enable_builddir_sed="$ax_enable_builddir_sed" # $SED
  299. ax_enable_builddir="$ax_enable_builddir" # $SUB
  300. ])dnl
  301. ])