Annotation of embedaddon/curl/m4/xc-am-iface.m4, revision 1.1.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>