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>