Annotation of embedaddon/curl/m4/xc-am-iface.m4, revision 1.1
1.1 ! misho 1: #---------------------------------------------------------------------------
! 2: #
! 3: # xc-am-iface.m4
! 4: #
! 5: # Copyright (c) 2013 - 2020 Daniel Stenberg <daniel@haxx.se>
! 6: #
! 7: # Permission to use, copy, modify, and distribute this software for any
! 8: # purpose with or without fee is hereby granted, provided that the above
! 9: # copyright notice and this permission notice appear in all copies.
! 10: #
! 11: # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 12: # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 13: # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 14: # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 15: # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 16: # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 17: # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 18: #
! 19: #---------------------------------------------------------------------------
! 20:
! 21: # serial 1
! 22:
! 23:
! 24: dnl _XC_AUTOMAKE_BODY
! 25: dnl -------------------------------------------------
! 26: dnl Private macro.
! 27: dnl
! 28: dnl This macro performs embedding of automake initialization
! 29: dnl code into configure script. When automake version 1.14 or
! 30: dnl newer is used at configure script generation time, this
! 31: dnl results in 'subdir-objects' automake option being used.
! 32: dnl When using automake versions older than 1.14 this option
! 33: dnl is not used when generating configure script.
! 34: dnl
! 35: dnl Existence of automake _AM_PROG_CC_C_O m4 private macro
! 36: dnl is used to differentiate automake version 1.14 from older
! 37: dnl ones which lack this macro.
! 38:
! 39: m4_define([_XC_AUTOMAKE_BODY],
! 40: [dnl
! 41: ## --------------------------------------- ##
! 42: ## Start of automake initialization code ##
! 43: ## --------------------------------------- ##
! 44: m4_ifdef([_AM_PROG_CC_C_O],
! 45: [
! 46: AM_INIT_AUTOMAKE([subdir-objects])
! 47: ],[
! 48: AM_INIT_AUTOMAKE
! 49: ])dnl
! 50: ## ------------------------------------- ##
! 51: ## End of automake initialization code ##
! 52: ## ------------------------------------- ##
! 53: dnl
! 54: m4_define([$0], [])[]dnl
! 55: ])
! 56:
! 57:
! 58: dnl XC_AUTOMAKE
! 59: dnl -------------------------------------------------
! 60: dnl Public macro.
! 61: dnl
! 62: dnl This macro embeds automake machinery into configure
! 63: dnl script regardless of automake version used in order
! 64: dnl to generate configure script.
! 65: dnl
! 66: dnl When using automake version 1.14 or newer, automake
! 67: dnl initialization option 'subdir-objects' is used to
! 68: dnl generate the configure script, otherwise this option
! 69: dnl is not used.
! 70:
! 71: AC_DEFUN([XC_AUTOMAKE],
! 72: [dnl
! 73: AC_PREREQ([2.50])dnl
! 74: dnl
! 75: AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl
! 76: dnl
! 77: _XC_AUTOMAKE_BODY
! 78: dnl
! 79: m4_ifdef([AM_INIT_AUTOMAKE],
! 80: [m4_undefine([AM_INIT_AUTOMAKE])])dnl
! 81: dnl
! 82: m4_define([$0], [])[]dnl
! 83: ])
! 84:
! 85:
! 86: dnl _XC_AMEND_DISTCLEAN_BODY ([LIST-OF-SUBDIRS])
! 87: dnl -------------------------------------------------
! 88: dnl Private macro.
! 89: dnl
! 90: dnl This macro performs shell code embedding into
! 91: dnl configure script in order to modify distclean
! 92: dnl and maintainer-clean targets of makefiles which
! 93: dnl are located in given list of subdirs.
! 94: dnl
! 95: dnl See XC_AMEND_DISTCLEAN comments for details.
! 96:
! 97: m4_define([_XC_AMEND_DISTCLEAN_BODY],
! 98: [dnl
! 99: ## ---------------------------------- ##
! 100: ## Start of distclean amending code ##
! 101: ## ---------------------------------- ##
! 102:
! 103: for xc_subdir in [$1]
! 104: do
! 105:
! 106: if test ! -f "$xc_subdir/Makefile"; then
! 107: echo "$xc_msg_err $xc_subdir/Makefile file not found. $xc_msg_abrt" >&2
! 108: exit 1
! 109: fi
! 110:
! 111: # Fetch dependency tracking file list from Makefile include lines.
! 112:
! 113: xc_inc_lines=`grep '^include .*(DEPDIR)' "$xc_subdir/Makefile" 2>/dev/null`
! 114: xc_cnt_words=`echo "$xc_inc_lines" | wc -w | tr -d "$xc_space$xc_tab"`
! 115:
! 116: # --disable-dependency-tracking might have been used, consequently
! 117: # there is nothing to amend without a dependency tracking file list.
! 118:
! 119: if test $xc_cnt_words -gt 0; then
! 120:
! 121: AC_MSG_NOTICE([amending $xc_subdir/Makefile])
! 122:
! 123: # Build Makefile specific patch hunk.
! 124:
! 125: xc_p="$xc_subdir/xc_patch.tmp"
! 126:
! 127: xc_rm_depfiles=`echo "$xc_inc_lines" \
! 128: | $SED 's%include% -rm -f%' 2>/dev/null`
! 129:
! 130: xc_dep_subdirs=`echo "$xc_inc_lines" \
! 131: | $SED 's%include[[ ]][[ ]]*%%' 2>/dev/null \
! 132: | $SED 's%(DEPDIR)/.*%(DEPDIR)%' 2>/dev/null \
! 133: | sort | uniq`
! 134:
! 135: echo "$xc_rm_depfiles" >$xc_p
! 136:
! 137: for xc_dep_dir in $xc_dep_subdirs; do
! 138: echo "${xc_tab}@xm_dep_cnt=\`ls $xc_dep_dir | wc -l 2>/dev/null\`; \\" >>$xc_p
! 139: echo "${xc_tab}if test \$\$xm_dep_cnt -eq 0 && test -d $xc_dep_dir; then \\" >>$xc_p
! 140: echo "${xc_tab} rm -rf $xc_dep_dir; \\" >>$xc_p
! 141: echo "${xc_tab}fi" >>$xc_p
! 142: done
! 143:
! 144: # Build Makefile patching sed scripts.
! 145:
! 146: xc_s1="$xc_subdir/xc_script_1.tmp"
! 147: xc_s2="$xc_subdir/xc_script_2.tmp"
! 148: xc_s3="$xc_subdir/xc_script_3.tmp"
! 149:
! 150: cat >$xc_s1 <<\_EOT
! 151: /^distclean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{
! 152: s/^.*(DEPDIR)/___xc_depdir_line___/
! 153: }
! 154: /^maintainer-clean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{
! 155: s/^.*(DEPDIR)/___xc_depdir_line___/
! 156: }
! 157: _EOT
! 158:
! 159: cat >$xc_s2 <<\_EOT
! 160: /___xc_depdir_line___$/{
! 161: N
! 162: /___xc_depdir_line___$/D
! 163: }
! 164: _EOT
! 165:
! 166: cat >$xc_s3 <<_EOT
! 167: /^___xc_depdir_line___/{
! 168: r $xc_p
! 169: d
! 170: }
! 171: _EOT
! 172:
! 173: # Apply patch to Makefile and cleanup.
! 174:
! 175: $SED -f "$xc_s1" "$xc_subdir/Makefile" >"$xc_subdir/Makefile.tmp1"
! 176: $SED -f "$xc_s2" "$xc_subdir/Makefile.tmp1" >"$xc_subdir/Makefile.tmp2"
! 177: $SED -f "$xc_s3" "$xc_subdir/Makefile.tmp2" >"$xc_subdir/Makefile.tmp3"
! 178:
! 179: if test -f "$xc_subdir/Makefile.tmp3"; then
! 180: mv -f "$xc_subdir/Makefile.tmp3" "$xc_subdir/Makefile"
! 181: fi
! 182:
! 183: test -f "$xc_subdir/Makefile.tmp1" && rm -f "$xc_subdir/Makefile.tmp1"
! 184: test -f "$xc_subdir/Makefile.tmp2" && rm -f "$xc_subdir/Makefile.tmp2"
! 185: test -f "$xc_subdir/Makefile.tmp3" && rm -f "$xc_subdir/Makefile.tmp3"
! 186:
! 187: test -f "$xc_p" && rm -f "$xc_p"
! 188: test -f "$xc_s1" && rm -f "$xc_s1"
! 189: test -f "$xc_s2" && rm -f "$xc_s2"
! 190: test -f "$xc_s3" && rm -f "$xc_s3"
! 191:
! 192: fi
! 193:
! 194: done
! 195:
! 196: ## -------------------------------- ##
! 197: ## End of distclean amending code ##
! 198: ## -------------------------------- ##
! 199: dnl
! 200: m4_define([$0], [])[]dnl
! 201: ])
! 202:
! 203:
! 204: dnl XC_AMEND_DISTCLEAN ([LIST-OF-SUBDIRS])
! 205: dnl -------------------------------------------------
! 206: dnl Public macro.
! 207: dnl
! 208: dnl This macro embeds shell code into configure script
! 209: dnl that amends, at configure runtime, the distclean
! 210: dnl and maintainer-clean targets of Makefiles located
! 211: dnl in all subdirs given in the mandatory white-space
! 212: dnl separated list argument.
! 213: dnl
! 214: dnl Embedding only takes place when using automake 1.14
! 215: dnl or newer, otherwise amending code is not included
! 216: dnl in generated configure script.
! 217: dnl
! 218: dnl distclean and maintainer-clean targets are modified
! 219: dnl to avoid unconditional removal of dependency subdirs
! 220: dnl which triggers distclean and maintainer-clean errors
! 221: dnl when using automake 'subdir-objects' option along
! 222: dnl with per-target objects and source files existing in
! 223: dnl multiple subdirs used for different build targets.
! 224: dnl
! 225: dnl New behavior first removes each dependency tracking
! 226: dnl file independently, and only removes each dependency
! 227: dnl subdir when it finds out that it no longer holds any
! 228: dnl dependency tracking file.
! 229: dnl
! 230: dnl When configure option --disable-dependency-tracking
! 231: dnl is used no amending takes place given that there are
! 232: dnl no dependency tracking files.
! 233:
! 234: AC_DEFUN([XC_AMEND_DISTCLEAN],
! 235: [dnl
! 236: AC_PREREQ([2.50])dnl
! 237: dnl
! 238: m4_ifdef([_AC_OUTPUT_MAIN_LOOP],
! 239: [m4_provide_if([_AC_OUTPUT_MAIN_LOOP], [],
! 240: [m4_fatal([call to AC_OUTPUT needed before $0])])])dnl
! 241: dnl
! 242: m4_if([$#], [1], [], [m4_fatal([$0: wrong number of arguments])])dnl
! 243: m4_if([$1], [], [m4_fatal([$0: missing argument])])dnl
! 244: dnl
! 245: AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl
! 246: dnl
! 247: m4_ifdef([_AM_PROG_CC_C_O],
! 248: [
! 249: _XC_AMEND_DISTCLEAN_BODY([$1])
! 250: ])dnl
! 251: m4_define([$0], [])[]dnl
! 252: ])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>