Fixup fromcvs/togit conversion
[minix-pkgsrc.git] / mk / wrapper / bsd.wrapper.mk
blobc6db9c2b32cf6c7ab32fc55e4235c81328ad2c63
1 # $NetBSD: bsd.wrapper.mk,v 1.87 2012/07/08 19:57:10 marino Exp $
3 # Copyright (c) 2005 The NetBSD Foundation, Inc.
4 # All rights reserved.
6 # This code is derived from software contributed to The NetBSD Foundation
7 # by Johnny C. Lam.
9 # Redistribution and use in source and binary forms, with or without
10 # modification, are permitted provided that the following conditions
11 # are met:
12 # 1. Redistributions of source code must retain the above copyright
13 # notice, this list of conditions and the following disclaimer.
14 # 2. Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in the
16 # documentation and/or other materials provided with the distribution.
17 # 3. All advertising materials mentioning features or use of this software
18 # must display the following acknowledgement:
19 # This product includes software developed by the NetBSD
20 # Foundation, Inc. and its contributors.
21 # 4. Neither the name of The NetBSD Foundation nor the names of its
22 # contributors may be used to endorse or promote products derived
23 # from this software without specific prior written permission.
25 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
29 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 # POSSIBILITY OF SUCH DAMAGE.
37 # Package-settable variables:
39 # WRAPPER_REORDER_CMDS
40 # A list of library reordering specifications to make sure that the
41 # linker sees the libraries in the correct order.
43 # Each of the specifications has the form reorder:l:foo:bar, which
44 # means that -lfoo will always come before -lbar in the linker
45 # command line.
47 # Keywords: libs order reorder wrapper
50 .include "../../mk/wrapper/wrapper-defs.mk"
52 # pkgsrc bmake does not (yet) correctly handle ${VAR} > 0 because
53 # ${VAR} is treated as a string, so we must use a string comparison
54 # operator.
55 .if ${PKG_DEBUG_LEVEL} != "0" || defined(PKG_VERBOSE)
56 ECHO_WRAPPER_MSG?= ${ECHO}
57 .else
58 ECHO_WRAPPER_MSG?= ${TRUE}
59 .endif
61 .PHONY: generate-wrappers
63 .include "../../mk/buildlink3/bsd.buildlink3.mk"
65 # Prepend ${WRAPPER_BINDIR} to the PATH so that the wrappers are found
66 # first when searching for executables.
68 PREPEND_PATH+= ${WRAPPER_BINDIR}
70 ###
71 ### BEGIN: after the barrier
72 ###
73 .if exists(${_COOKIE.barrier})
75 _WRAPPER_DEBUG?= no
76 CONFIGURE_ENV+= WRAPPER_DEBUG=${_WRAPPER_DEBUG:Q}
77 MAKE_ENV+= WRAPPER_DEBUG=${_WRAPPER_DEBUG:Q}
78 SCRIPTS_ENV+= WRAPPER_DEBUG="${_WRAPPER_DEBUG}"
80 # The caching code, which greatly speeds up the build process, doesn't
81 # work correctly on certain platforms.
83 _WRAP_BROKEN_CACHE= Darwin-5.*-*
85 .if !defined(WRAPPER_UPDATE_CACHE)
86 WRAPPER_UPDATE_CACHE?= yes
87 . for _pattern_ in ${_WRAP_BROKEN_CACHE}
88 . if !empty(MACHINE_PLATFORM:M${_pattern_})
89 WRAPPER_UPDATE_CACHE= no
90 . endif
91 . endfor
92 .endif
93 CONFIGURE_ENV+= WRAPPER_UPDATE_CACHE=${WRAPPER_UPDATE_CACHE:Q}
94 MAKE_ENV+= WRAPPER_UPDATE_CACHE=${WRAPPER_UPDATE_CACHE:Q}
96 # Only do the (expensive) reordering step if we have reordering
97 # transformations.
99 WRAPPER_REORDER_CMDS?= # empty
100 .if !empty(WRAPPER_REORDER_CMDS)
101 MAKE_ENV+= WRAPPER_REORDER=yes
102 .endif
104 # Remove rpath options if _USE_RPATH is "no".
105 .if defined(_USE_RPATH) && !empty(_USE_RPATH:M[nN][oO])
106 _WRAP_TRANSFORM_CMDS+= no-rpath
107 .endif
109 # Add any package-specified transformations.
110 _WRAP_TRANSFORM_CMDS+= ${WRAPPER_TRANSFORM_CMDS}
112 # _WRAP_PATH is the path we embed in the wrapper scripts for subsequent
113 # calls to the toolchain. We don't need to wrap them again because they
114 # are already being called with the correct arguments.
116 .if !defined(_WRAP_PATH)
117 _WRAP_PATH= ${PATH:S/${WRAPPER_BINDIR}://:S/:${WRAPPER_BINDIR}//}
118 .endif
119 MAKEVARS+= _WRAP_PATH
121 # Generate wrapper scripts for the compiler tools. These wrapper
122 # scripts are to be used instead of the actual compiler tools when
123 # building software.
125 # WRAPPER_CC, WRAPPER_LD, etc. are the full paths to the wrapper
126 # scripts.
128 # _WRAP_ALIASES.CC, _WRAP_ALIASES.LD, etc. are the other names by
129 # which each wrapper may be invoked.
131 WRAPPEES+= AS
132 WRAPPEES+= CC
133 WRAPPEES+= CPP
134 WRAPPEES+= CXX
135 WRAPPEES+= FC
136 .if !empty(USE_TOOLS:C/:.*//:Mimake)
137 IMAKE?= ${X11BASE}/bin/imake
138 WRAPPEES+= IMAKE
139 .endif
140 WRAPPEES+= LD
142 .if !empty(PKGSRC_COMPILER:Mxlc) && ${OPSYS} == "AIX"
143 CC_R?= ${_XLC_DIR}/bin/cc_r
144 WRAPPEES+= CC_R
145 CXX_R?= ${_XLC_DIR}/bin/c++_r
146 WRAPPEES+= CXX_R
147 .endif
149 _WRAPPEE_UNIQUE_CMDS= # empty
150 .for _wrappee_ in ${WRAPPEES}
151 _WRAPPEES+= ${_wrappee_}
152 _WRAPPEE_${_wrappee_}= ${${_wrappee_}:T:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}
153 . if empty(_WRAPPEE_UNIQUE_CMDS:M${_WRAPPEE_${_wrappee_}})
154 _WRAPPEE_UNIQUE_CMDS+= ${_WRAPPEE_${_wrappee_}}
155 _WRAPPEES_UNIQUE+= ${_wrappee_}
156 . endif
157 .endfor # WRAPPEES
159 .for _wrappee_ in ${_WRAPPEES}
161 # Strip the leading paths from the toolchain variables since we manipulate
162 # the PATH to use the correct executable.
164 . if empty(${_wrappee_}:C/^/_asdf_/1:N_asdf_*)
165 ${_wrappee_}:= ${${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//:T}
166 . else
167 ${_wrappee_}:= ${${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//:T} ${${_wrappee_}:C/^/_asdf_/1:N_asdf_*}
168 . endif
170 # WRAPPER_<wrappee> is the full path to the wrapper script, plus any
171 # trailing arguments to <wrappee>.
173 WRAPPER_${_wrappee_}= ${WRAPPER_BINDIR}/${${_wrappee_}}
174 .endfor # _WRAPPEES
176 _WRAP_ALIASES.AS= as
177 _WRAP_ALIASES.CC= cc gcc ada
178 _WRAP_ALIASES.CXX= c++ g++ CC cxx
179 _WRAP_ALIASES.CPP= cpp
180 _WRAP_ALIASES.FC= f77 g77 gfortran
181 _WRAP_ALIASES.IMAKE= imake
182 _WRAP_ALIASES.LD= ld
184 # _WRAP_*.<wrappee> variables represent "template methods" of the main
185 # wrapper script. This allows individual wrappers to be customized to
186 # some degree:
188 _WRAP_ENV?= PATH="${_WRAP_PATH}"; export PATH
189 _WRAP_EMPTY_FILE?= ${WRAPPER_TMPDIR}/empty
190 _WRAP_ARG_PP?= ${_WRAP_EMPTY_FILE}
191 _WRAP_ARG_PP_MAIN?= ${WRAPPER_TMPDIR}/arg-pp-main
192 _WRAP_ARG_SOURCE?= ${WRAPPER_TMPDIR}/arg-source
193 _WRAP_BUILDCMD?= ${WRAPPER_TMPDIR}/buildcmd
194 _WRAP_CACHE?= ${WRAPPER_TMPDIR}/cache
195 _WRAP_CACHE_BODY?= ${WRAPPER_TMPDIR}/cache-body
196 _WRAP_CLEANUP?= ${_WRAP_EMPTY_FILE}
197 _WRAP_CMD_SINK?= ${WRAPPER_TMPDIR}/cmd-sink
198 _WRAP_GEN_REORDER?= ${WRAPPER_TMPDIR}/gen-reorder
199 _WRAP_GEN_TRANSFORM?= ${WRAPPER_TMPDIR}/gen-transform
200 _WRAP_LOG?= ${WRKLOG}
201 _WRAP_LOGIC?= ${WRAPPER_TMPDIR}/logic
202 _WRAP_REORDERLIBS?= ${WRAPPER_TMPDIR}/reorderlibs
203 _WRAP_SCAN?= ${WRAPPER_TMPDIR}/scan
204 _WRAP_SHELL_LIB?= ${WRAPPER_TMPDIR}/shell-lib
205 _WRAP_SUBR_SH?= ${WRAPPER_TMPDIR}/wrapper-subr.sh
206 _WRAP_SKIP_TRANSFORM?= no
207 _WRAP_TRANSFORM?= ${_WRAP_EMPTY_FILE}
208 _WRAP_TRANSFORM_SED?= # empty
209 _WRAP_TRANSFORM_SEDFILE?= ${WRAPPER_TMPDIR}/transform.sed
210 _WRAP_UNTRANSFORM_SEDFILE?= ${WRAPPER_TMPDIR}/untransform.sed
212 # Generate the transformation sedfiles if we need them.
213 .if !empty(_WRAP_TRANSFORM_CMDS)
214 generate-wrappers: ${_WRAP_TRANSFORM_SEDFILE} ${_WRAP_UNTRANSFORM_SEDFILE}
215 _WRAP_TRANSFORM_SED+= -f ${_WRAP_TRANSFORM_SEDFILE}
216 _UNWRAP_SED= -f ${_WRAP_UNTRANSFORM_SEDFILE}
217 .endif
219 .for _wrappee_ in ${_WRAPPEES}
220 _WRAPPER_SH.${_wrappee_}= ${WRAPPER_SRCDIR}/wrapper.sh
221 _WRAP_ENV.${_wrappee_}?= ${_WRAP_ENV}
222 _WRAP_EXTRA_ARGS.${_wrappee_}?= # empty
223 _WRAP_ARG_PP.${_wrappee_}?= ${_WRAP_ARG_PP}
224 _WRAP_ARG_PP_MAIN.${_wrappee_}?= ${_WRAP_ARG_PP_MAIN}
225 _WRAP_ARG_SOURCE.${_wrappee_}?= ${_WRAP_ARG_SOURCE}
226 _WRAP_BUILDCMD.${_wrappee_}?= ${_WRAP_BUILDCMD}
227 _WRAP_CACHE.${_wrappee_}?= ${_WRAP_CACHE}
228 _WRAP_CACHE_BODY.${_wrappee_}?= ${_WRAP_CACHE_BODY}
229 _WRAP_CLEANUP.${_wrappee_}?= ${_WRAP_CLEANUP}
230 _WRAP_CMD_SINK.${_wrappee_}?= ${_WRAP_CMD_SINK}
231 _WRAP_LOG.${_wrappee_}?= ${_WRAP_LOG}
232 _WRAP_LOGIC.${_wrappee_}?= ${_WRAP_LOGIC}
233 _WRAP_SCAN.${_wrappee_}?= ${_WRAP_SCAN}
234 _WRAP_TRANSFORM.${_wrappee_}?= ${_WRAP_TRANSFORM}
235 _WRAP_TRANSFORM_SED.${_wrappee_}?= ${_WRAP_TRANSFORM_SED}
236 _WRAP_SKIP_TRANSFORM.${_wrappee_}?= ${_WRAP_SKIP_TRANSFORM}
237 _WRAP_TYPE.${_wrappee_}?= ${_wrappee_}
238 .endfor # _WRAPPEES
240 .if !empty(PKGSRC_COMPILER:Micc)
241 . if !empty(CC_VERSION:M8.1) || !empty(CC_VERSION:M9.0)
242 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-icc81-cc
243 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
244 . else
245 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-icc-cc
246 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
247 . endif
248 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-icc-cc
249 _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC}
250 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-icc-cc
251 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
252 .endif
254 .if !empty(PKGSRC_COMPILER:Mmipspro)
255 _WRAP_ARG_PP.CC= ${WRAPPER_TMPDIR}/arg-pp-mipspro-cc
256 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-mipspro-cc
257 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-mipspro-cc
258 _WRAP_ARG_PP.CXX= ${_WRAP_ARG_PP.CC}
259 _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC}
260 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
261 .endif
263 .if !empty(PKGSRC_COMPILER:Mmipspro-ucode)
264 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-mipspro-ucode-cc
265 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-mipspro-ucode-cc
266 _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC}
267 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
268 .endif
270 .if !empty(PKGSRC_COMPILER:Mido)
271 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-ido-cc
272 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-ido-cc
273 # enable C++ style (//) commments with the IDO cc
274 # just in case increase the optimization threshold from the default 1000
275 _WRAP_EXTRA_ARGS.CC+= -Xcpluscomm -Olimit 6000
276 .endif
278 .if !empty(PKGSRC_COMPILER:Msunpro)
279 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-sunpro-cc
280 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-sunpro-cc
281 _WRAP_ARG_PP.CXX= ${WRAPPER_TMPDIR}/arg-pp-sunpro-cxx
282 _WRAP_CACHE.CXX= ${WRAPPER_TMPDIR}/cache-sunpro-cxx
283 _WRAP_CACHE_BODY.CXX= ${WRAPPER_TMPDIR}/cache-body-sunpro-cxx
284 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
285 _WRAP_CMD_SINK.CXX= ${WRAPPER_TMPDIR}/cmd-sink-sunpro-cxx
286 _WRAP_CACHE_BODY.CPP= ${_WRAP_CACHE_BODY.CC}
287 _WRAP_TRANSFORM.CPP= ${_WRAP_TRANSFORM.CC}
288 .endif
290 .if !empty(PKGSRC_COMPILER:Mxlc)
291 . if ${OPSYS} == "AIX"
292 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-aix-xlc
293 _WRAP_CMD_SINK.CC_R= ${_WRAP_CMD_SINK.CC}
294 _WRAP_CMD_SINK.CPP= ${_WRAP_CMD_SINK.CC}
295 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
296 _WRAP_CMD_SINK.CXX_R= ${_WRAP_CMD_SINK.CC}
297 . elif ${OPSYS} == "Darwin"
298 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-darwin-xlc
299 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
300 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-xlc-cc
301 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-xlc-cc
302 _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC}
303 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
304 . else
305 PKG_FAIL_REASON+= "xlc unsupported on ${OPSYS}"
306 . endif
307 .endif
309 .if !empty(PKGSRC_COMPILER:Mccc)
310 _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-ccc-cc
311 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-ccc-cc
312 _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC}
313 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
314 .endif
316 .if !empty(PKGSRC_COMPILER:Mgcc)
317 _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-gcc
318 _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC}
319 .endif
321 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-ld
322 _WRAP_SKIP_TRANSFORM.IMAKE= yes
324 # XXX
325 # XXX This section is ${OPSYS}-specific and shouldn't be here.
326 # XXX
327 .if ${OPSYS} == "Interix"
328 _WRAP_EXTRA_ARGS.CC+= -D_ALL_SOURCE
329 _WRAP_EXTRA_ARGS.CXX+= -D_ALL_SOURCE
330 _WRAP_EXTRA_ARGS.CPP+= -D_ALL_SOURCE
331 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-interix-gcc
332 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
333 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-interix-ld
334 .elif ${OPSYS} == "Darwin"
335 _WRAP_ARG_PP.CC= ${WRAPPER_TMPDIR}/arg-pp-darwin-gcc
336 _WRAP_ARG_PP.CXX= ${_WRAP_ARG_PP.CC}
337 _WRAP_ARG_PP.LD= ${_WRAP_ARG_PP.CC}
338 .elif ${OPSYS} == "UnixWare"
339 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-unixware-gcc
340 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
341 _WRAP_CMD_SINK.LD= ${_WRAP_CMD_SINK.CC}
342 .elif ${OPSYS} == "OSF1"
343 _WRAP_EXTRA_ARGS.CC+= -D_POSIX_PII_SOCKET
344 _WRAP_EXTRA_ARGS.CXX+= -D_POSIX_PII_SOCKET -D__USE_STD_IOSTREAM
345 _WRAP_EXTRA_ARGS.CPP+= -D_POSIX_PII_SOCKET
346 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-osf1-cc
347 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
348 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-osf1-ld
349 .elif ${OPSYS} == "HPUX"
350 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-hpux-cc
351 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
352 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-hpux-ld
353 .elif ${OPSYS} == "AIX"
354 _WRAP_CMD_SINK.CC?= ${WRAPPER_TMPDIR}/cmd-sink-aix-cc
355 _WRAP_CMD_SINK.CXX?= ${_WRAP_CMD_SINK.CC}
356 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-aix-ld
357 _WRAP_CACHE_BODY.CC?= ${WRAPPER_TMPDIR}/cache-body-aix-cc
358 _WRAP_CACHE_BODY.CC_R?= ${WRAPPER_TMPDIR}/cache-body-aix-cc
359 _WRAP_TRANSFORM.CC?= ${WRAPPER_TMPDIR}/transform-aix-cc
360 _WRAP_TRANSFORM.CC_R?= ${WRAPPER_TMPDIR}/transform-aix-cc
361 _WRAP_CACHE_BODY.CXX?= ${_WRAP_CACHE_BODY.CC}
362 _WRAP_TRANSFORM.CXX?= ${_WRAP_TRANSFORM.CC}
363 .elif ${OPSYS} == "IRIX"
364 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-irix-cc
365 _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC}
366 _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-irix-ld
367 .endif
369 .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
370 _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-cross-gcc
371 _WRAP_CMD_SINK.CPP= ${WRAPPER_TMPDIR}/cmd-sink-cross-cpp
372 _WRAP_CMD_SINK.CXX= ${WRAPPER_TMPDIR}/cmd-sink-cross-gxx
373 .endif
375 .if ${OPSYS} == "SunOS" && !empty(PKGSRC_COMPILER:Mgcc)
376 _WRAP_CMD_SINK.IMAKE= ${WRAPPER_TMPDIR}/cmd-sink-solaris-imake
377 _WRAP_CACHE_BODY.IMAKE= ${WRAPPER_TMPDIR}/cache-body-solaris-imake
378 .endif
380 # Filter to scrunch shell scripts by removing comments and empty lines.
381 _WRAP_SH_CRUNCH_FILTER= ${AWK} ' \
382 /^\#!/ { print } \
383 /^[[:space:]]*\#/ || NF == 0 { next } \
384 /.*/ { print } \
387 _WRAP_SUBST_SED= \
388 -e "s|@ABI@|${ABI:Q}|g" \
389 -e "s|@CAT@|${CAT:Q}|g" \
390 -e "s|@ECHO@|${ECHO:Q}|g" \
391 -e "s|@EXPR@|${EXPR:Q}|g" \
392 -e "s|@MV@|${MV}|g" \
393 -e "s|@SED@|${SED:Q}|g" \
394 -e "s|@TEST@|${TEST:Q}|g" \
395 -e "s|@WRAPPER_SHELL@|${WRAPPER_SHELL:Q}|g" \
396 -e "s|@_WRAP_LOG@|${_WRAP_LOG:Q}|g" \
397 -e "s|@_WRAP_REORDERLIBS@|${_WRAP_REORDERLIBS:Q}|g" \
398 -e "s|@_WRAP_SHELL_LIB@|${_WRAP_SHELL_LIB:Q}|g" \
399 -e "s|@_WRAP_SUBR_SH@|${_WRAP_SUBR_SH}|g"
401 .for _wrappee_ in ${_WRAPPEES}
402 _WRAP_SUBST_SED.${_wrappee_}= \
403 -e "s|@_WRAP_EMPTY_FILE@|${_WRAP_EMPTY_FILEQ}|g" \
404 -e "s|@_WRAP_ENV@|${_WRAP_ENV.${_wrappee_}:Q}|g" \
405 -e "s|@_WRAP_EXTRA_ARGS@|${_WRAP_EXTRA_ARGS.${_wrappee_}:Q}|g" \
406 -e "s|@_WRAP_ARG_PP@|${_WRAP_ARG_PP.${_wrappee_}:Q}|g" \
407 -e "s|@_WRAP_ARG_PP_MAIN@|${_WRAP_ARG_PP_MAIN.${_wrappee_}:Q}|g" \
408 -e "s|@_WRAP_ARG_SOURCE@|${_WRAP_ARG_SOURCE.${_wrappee_}:Q}|g" \
409 -e "s|@_WRAP_BUILDCMD@|${_WRAP_BUILDCMD.${_wrappee_}:Q}|g" \
410 -e "s|@_WRAP_CACHE@|${_WRAP_CACHE.${_wrappee_}:Q}|g" \
411 -e "s|@_WRAP_CACHE_BODY@|${_WRAP_CACHE_BODY.${_wrappee_}:Q}|g" \
412 -e "s|@_WRAP_CLEANUP@|${_WRAP_CLEANUP.${_wrappee_}:Q}|g" \
413 -e "s|@_WRAP_CMD_SINK@|${_WRAP_CMD_SINK.${_wrappee_}:Q}|g" \
414 -e "s|@_WRAP_LOG@|${_WRAP_LOG.${_wrappee_}:Q}|g" \
415 -e "s|@_WRAP_LOGIC@|${_WRAP_LOGIC.${_wrappee_}:Q}|g" \
416 -e "s|@_WRAP_SCAN@|${_WRAP_SCAN.${_wrappee_}:Q}|g" \
417 -e "s|@_WRAP_SKIP_TRANSFORM@|${_WRAP_SKIP_TRANSFORM.${_wrappee_}:Q}|g" \
418 -e "s|@_WRAP_TRANSFORM@|${_WRAP_TRANSFORM.${_wrappee_}:Q}|g" \
419 -e "s|@_WRAP_TRANSFORM_SED@|${_WRAP_TRANSFORM_SED.${_wrappee_}:Q}|g" \
420 -e "s|@_WRAP_TYPE@|${_WRAP_TYPE.${_wrappee_}}|g" \
421 -e "s|@WRAPPER_DEBUG@|${_WRAPPER_DEBUG}|g" \
422 -e "s|@WRAPPER_UPDATE_CACHE@|${WRAPPER_UPDATE_CACHE}|g" \
423 ${_WRAP_SUBST_SED}
425 _WRAP_COOKIE.${_wrappee_}= ${WRAPPER_DIR}/.wrapper_${_wrappee_}_done
426 .endfor # _WRAPPEES
428 .for _wrappee_ in ${_WRAPPEES_UNIQUE}
429 PKG_${_wrappee_}?= ${${_wrappee_}}
430 generate-wrappers: ${_WRAP_COOKIE.${_wrappee_}}
431 ${_WRAP_COOKIE.${_wrappee_}}: \
432 ${_WRAPPER_SH.${_wrappee_}} \
433 ${_WRAP_ARG_PP.${_wrappee_}} \
434 ${_WRAP_ARG_PP_MAIN.${_wrappee_}} \
435 ${_WRAP_ARG_SOURCE.${_wrappee_}} \
436 ${_WRAP_BUILDCMD.${_wrappee_}} \
437 ${_WRAP_CACHE.${_wrappee_}} \
438 ${_WRAP_CLEANUP.${_wrappee_}} \
439 ${_WRAP_CMD_SINK.${_wrappee_}} \
440 ${_WRAP_LOGIC.${_wrappee_}} \
441 ${_WRAP_REORDERLIBS} \
442 ${_WRAP_SCAN.${_wrappee_}} \
443 ${_WRAP_SHELL_LIB} \
444 ${_WRAP_SUBR_SH} \
445 ${_WRAP_TRANSFORM.${_wrappee_}}
446 ${RUN} \
447 wrapper="${WRAPPER_${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}"; \
448 if [ -x "$$wrapper" ]; then ${ECHO_WRAPPER_MSG} "=> $$wrapper already exists. Skipping"; exit 0; fi; \
449 ${ECHO_WRAPPER_MSG} "=> Creating ${_wrappee_} wrapper: $$wrapper"; \
450 gen_wrapper=yes; \
451 wrappee="${PKG_${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}"; \
452 case $$wrappee in \
453 /*) ;; \
454 *) save_IFS="$$IFS"; \
455 IFS=":"; \
456 for dir in $${PATH}; do \
457 IFS="$$save_IFS"; \
458 case $${dir} in \
459 *${WRAPPER_DIR}*) \
460 ;; \
461 *) \
462 if ${TEST} -f "$${dir}/$$wrappee" -o \
463 -h "$${dir}/$$wrappee"; then \
464 wrappee="$${dir}/$$wrappee"; \
465 break; \
466 fi; \
467 ;; \
468 esac; \
469 done; \
470 IFS="$$save_IFS"; \
471 if ${TEST} ! -x "$$wrappee"; then \
472 gen_wrapper=no; \
473 ${ECHO_WRAPPER_MSG} "Warning: unable to generate ${_wrappee_} wrapper script: \`$$wrappee'"; \
474 fi; \
475 ;; \
476 esac; \
477 case $$gen_wrapper in \
478 yes) \
479 ${MKDIR} `${DIRNAME} $$wrapper`; \
480 ${CAT} ${_WRAPPER_SH.${_wrappee_}} | \
481 ${SED} ${_WRAP_SUBST_SED.${_wrappee_}} \
482 -e "s|@WRAPPEE@|$$wrappee|g" | \
483 ${_WRAP_SH_CRUNCH_FILTER} \
484 > $$wrapper; \
485 ${CHMOD} +x $$wrapper; \
486 ;; \
487 esac
488 ${RUN} ${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
490 . for _alias_ in ${_WRAP_ALIASES.${_wrappee_}:S/^/${WRAPPER_BINDIR}\//}
491 . if !target(${_alias_})
492 generate-wrappers: ${_alias_}
493 ${_alias_}: ${_WRAP_COOKIE.${_wrappee_}}
494 ${RUN} \
495 wrapper="${WRAPPER_${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}"; \
496 if [ ! -x ${.TARGET} -a -x $$wrapper ]; then \
497 ${ECHO_WRAPPER_MSG} "=> Linking ${_wrappee_} wrapper: ${.TARGET}"; \
498 ${LN} -f${WRAPPER_USE_SYMLINK:Ds} $$wrapper ${.TARGET}; \
500 . endif
501 . endfor
502 .endfor # _WRAPPEES_UNIQUE
504 .for _target_ in ${WRAPPER_TARGETS}
505 generate-wrappers: ${_target_}
506 .endfor
508 .for w in \
509 arg-pp-darwin-gcc \
510 arg-pp-mipspro-cc \
511 arg-pp-sunpro-cxx \
512 cmd-sink-aix-cc \
513 cmd-sink-aix-ld \
514 cmd-sink-aix-xlc \
515 cmd-sink-darwin-xlc \
516 cmd-sink-icc-cc \
517 cmd-sink-icc81-cc \
518 cmd-sink-irix-cc \
519 cmd-sink-irix-ld \
520 cmd-sink-interix-gcc \
521 cmd-sink-ld \
522 cmd-sink-osf1-cc \
523 cmd-sink-osf1-ld \
524 cmd-sink-hpux-cc \
525 cmd-sink-hpux-ld \
526 cmd-sink-solaris-imake \
527 cmd-sink-sunpro-cxx \
528 cmd-sink-unixware-gcc \
529 transform-aix-cc \
530 transform-ccc-cc \
531 transform-gcc \
532 transform-icc-cc \
533 transform-ido-cc \
534 transform-mipspro-cc \
535 transform-mipspro-ucode-cc \
536 transform-sunpro-cc \
537 transform-xlc-cc \
538 wrapper-subr.sh
539 ${WRAPPER_TMPDIR}/${w}: ${WRAPPER_SRCDIR}/${w}
540 ${RUN} ${MKDIR} ${.TARGET:H}
541 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
542 .endfor
544 .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
545 _WRAP_CROSS_GCC_FILTER+= ${SED} \
546 -e "s|@CROSS_DESTDIR@|${_CROSS_DESTDIR:Q}|g" \
547 -e "s|@PREFIX@|${PREFIX:Q}|g"
548 ${WRAPPER_TMPDIR}/cmd-sink-cross-gcc: ${WRAPPER_SRCDIR}/cmd-sink-cross-gcc
549 ${RUN} ${MKDIR} ${.TARGET:H}
550 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_CROSS_GCC_FILTER} | \
551 ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
553 ${WRAPPER_TMPDIR}/cmd-sink-cross-cpp: ${WRAPPER_SRCDIR}/cmd-sink-cross-cpp
554 ${RUN} ${MKDIR} ${.TARGET:H}
555 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_CROSS_GCC_FILTER} | \
556 ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
558 ${WRAPPER_TMPDIR}/cmd-sink-cross-gxx: ${WRAPPER_SRCDIR}/cmd-sink-cross-gxx
559 ${RUN} ${MKDIR} ${.TARGET:H}
560 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_CROSS_GCC_FILTER} | \
561 ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
562 .endif
564 .if !target(${_WRAP_GEN_REORDER})
565 ${_WRAP_GEN_REORDER}: \
566 ${_WRAP_SHELL_LIB} \
567 ${WRAPPER_SRCDIR}/gen-reorder.sh
568 ${RUN} ${MKDIR} ${.TARGET:H}
569 ${RUN} \
570 ${CAT} ${WRAPPER_SRCDIR}/gen-reorder.sh \
571 | ${SED} ${_WRAP_SUBST_SED} \
572 | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
573 ${RUN} ${CHMOD} +x ${.TARGET}
574 .endif
576 .if !target(${_WRAP_GEN_TRANSFORM})
577 ${_WRAP_GEN_TRANSFORM}: \
578 ${_WRAP_SHELL_LIB} \
579 ${WRAPPER_SRCDIR}/gen-transform.sh
580 ${RUN} ${MKDIR} ${.TARGET:H}
581 ${RUN} \
582 ${CAT} ${WRAPPER_SRCDIR}/gen-transform.sh \
583 | ${SED} ${_WRAP_SUBST_SED} \
584 | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
585 ${RUN} ${CHMOD} +x ${.TARGET}
586 .endif
588 .if !target(${_WRAP_REORDERLIBS})
589 ${_WRAP_REORDERLIBS}: ${_WRAP_GEN_REORDER}
590 ${RUN} ${MKDIR} ${.TARGET:H}
591 ${RUN} ${_WRAP_GEN_REORDER} ${WRAPPER_REORDER_CMDS} > ${.TARGET}
592 .endif
594 . if !target(${_WRAP_SHELL_LIB})
595 ${_WRAP_SHELL_LIB}: ${.CURDIR}/../../mk/scripts/shell-lib
596 ${RUN} ${MKDIR} ${.TARGET:H}
597 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
598 . endif
600 .if !target(${_WRAP_TRANSFORM_SEDFILE})
601 ${_WRAP_TRANSFORM_SEDFILE}: ${_WRAP_GEN_TRANSFORM}
602 ${RUN} ${MKDIR} ${.TARGET:H}
603 ${RUN} ${_WRAP_GEN_TRANSFORM} transform ${_WRAP_TRANSFORM_CMDS} \
604 > ${.TARGET}
605 .endif
607 .if !target(${_WRAP_UNTRANSFORM_SEDFILE})
608 ${_WRAP_UNTRANSFORM_SEDFILE}: ${_WRAP_GEN_TRANSFORM}
609 ${RUN} ${MKDIR} ${.TARGET:H}
610 ${RUN} \
611 ${_WRAP_GEN_TRANSFORM} untransform ${_WRAP_TRANSFORM_CMDS} \
612 > ${.TARGET}
613 .endif
615 .for _wrappee_ in ${_WRAPPEES}
616 . if !target(${_WRAP_EMPTY_FILE})
617 ${_WRAP_EMPTY_FILE}:
618 ${RUN} ${MKDIR} ${.TARGET:H}
619 ${RUN} ${TOUCH} ${TOUCH_ARGS} ${.TARGET}
620 . endif
622 . if !target(${_WRAP_ARG_PP_MAIN.${_wrappee_}})
623 ${_WRAP_ARG_PP_MAIN.${_wrappee_}}: ${WRAPPER_SRCDIR}/arg-pp-main
624 ${RUN} ${MKDIR} ${.TARGET:H}
625 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
626 . endif
628 . if !target(${_WRAP_ARG_SOURCE.${_wrappee_}})
629 ${_WRAP_ARG_SOURCE.${_wrappee_}}: ${WRAPPER_SRCDIR}/arg-source
630 ${RUN} ${MKDIR} ${.TARGET:H}
631 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
632 . endif
634 . if !target(${_WRAP_BUILDCMD.${_wrappee_}})
635 ${_WRAP_BUILDCMD.${_wrappee_}}: ${WRAPPER_SRCDIR}/buildcmd
636 ${RUN} ${MKDIR} ${.TARGET:H}
637 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
638 . endif
640 . if !target(${_WRAP_CACHE.${_wrappee_}})
641 ${_WRAP_CACHE.${_wrappee_}}:
642 ${RUN} ${MKDIR} ${.TARGET:H}
643 ${RUN} echo "cache_lookup() { cachehit=no; }" > ${.TARGET}
644 . endif
646 . if !target(${_WRAP_CACHE_BODY.${_wrappee_}})
647 ${_WRAP_CACHE_BODY.${_wrappee_}}:
648 ${RUN} ${MKDIR} ${.TARGET:H}
649 ${RUN} ${TOUCH} ${TOUCH_ARGS} ${.TARGET}
650 . endif
652 . if !target(${_WRAP_CMD_SINK.${_wrappee_}})
653 ${_WRAP_CMD_SINK.${_wrappee_}}: ${WRAPPER_SRCDIR}/cmd-sink
654 ${RUN} ${MKDIR} ${.TARGET:H}
655 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
656 . endif
658 . if !target(${_WRAP_LOGIC.${_wrappee_}})
659 ${_WRAP_LOGIC.${_wrappee_}}: ${WRAPPER_SRCDIR}/logic
660 ${RUN} ${MKDIR} ${.TARGET:H}
661 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
662 . endif
664 . if !target(${_WRAP_SCAN.${_wrappee_}})
665 ${_WRAP_SCAN.${_wrappee_}}: ${WRAPPER_SRCDIR}/scan
666 ${RUN} ${MKDIR} ${.TARGET:H}
667 ${RUN} ${CAT} ${.ALLSRC} | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET}
668 . endif
669 .endfor # _WRAPPEES
671 # UNWRAP_PATTERNS and UNWRAP_FILES list shell globs and files relative to
672 # ${WRKSRC} that need to be "unwrapped".
674 UNWRAP_PATTERNS?= # empty
675 _UNWRAP_PATTERNS= ${UNWRAP_PATTERNS}
676 _UNWRAP_PATTERNS+= *-config
677 _UNWRAP_PATTERNS+= *Conf.sh
678 _UNWRAP_PATTERNS+= *.pc
679 _UNWRAP_PATTERNS_FIND_cmd= \
680 cd ${WRKSRC} && \
681 ${ECHO} "__dummy-entry__" && \
682 ${FIND} . -type f \( ${_UNWRAP_PATTERNS:C/.*/-o -name "&"/g:S/-o//1} \) -print \
683 | ${SED} -e 's|^\./||' \
684 | ${SORT} -u
685 UNWRAP_FILES?= # empty
686 _UNWRAP_FILES= ${UNWRAP_FILES} \
687 ${_UNWRAP_PATTERNS_FIND_cmd:sh:N__dummy-entry__}
688 _UNWRAP_SED?= # empty
690 SUBST_CLASSES+= unwrap
691 SUBST_STAGE.unwrap= post-build
692 SUBST_MESSAGE.unwrap= Unwrapping files-to-be-installed.
693 SUBST_FILES.unwrap= ${_UNWRAP_FILES}
694 SUBST_SED.unwrap= ${_UNWRAP_SED}
695 .if defined(_WRAPPER_DEBUG) && !empty(_WRAPPER_DEBUG:M[yY][eE][sS])
696 SUBST_POSTCMD.unwrap= ${DO_NADA}
697 .endif
699 .endif
701 ### END: after the barrier
704 ######################################################################
705 ######################################################################
706 ######################################################################
708 _COOKIE.wrapper= ${WRKDIR}/.wrapper_done
710 .PHONY: wrapper
711 .if !target(wrapper)
712 . if exists(${_COOKIE.wrapper})
713 wrapper:
714 @${DO_NADA}
715 . elif defined(_PKGSRC_BARRIER)
716 wrapper: check-vulnerable patch acquire-wrapper-lock ${_COOKIE.wrapper} release-wrapper-lock
717 . else
718 wrapper: barrier
719 . endif
720 .endif
722 .PHONY: acquire-wrapper-lock release-wrapper-lock
723 acquire-wrapper-lock: acquire-lock
724 release-wrapper-lock: release-lock
726 .if exists(${_COOKIE.wrapper})
727 ${_COOKIE.wrapper}:
728 @${DO_NADA}
729 .else
730 ${_COOKIE.wrapper}: real-wrapper
731 .endif
733 .PHONY: real-wrapper
734 real-wrapper: wrapper-message wrapper-vars pre-wrapper do-wrapper post-wrapper wrapper-cookie error-check
736 .PHONY: wrapper-message
737 wrapper-message:
738 @${PHASE_MSG} "Creating toolchain wrappers for ${PKGNAME}"
740 .PHONY: pre-wrapper do-wrapper post-wrapper
742 .if !target(do-wrapper)
743 do-wrapper: generate-wrappers
744 @${DO_NADA}
745 .endif
747 .if !target(pre-wrapper)
748 pre-wrapper:
749 @${DO_NADA}
750 .endif
752 .if !target(post-wrapper)
753 post-wrapper:
754 @${DO_NADA}
755 .endif
757 .PHONY: wrapper-cookie
758 wrapper-cookie:
759 ${RUN} [ ! -f ${_COOKIE.wrapper} ]
760 ${RUN} ${MKDIR} ${_COOKIE.wrapper:H}
761 ${RUN} ${ECHO} ${PKGNAME} > ${_COOKIE.wrapper}