1 # $NetBSD: bsd.wrapper.mk,v 1.87 2012/07/08 19:57:10 marino Exp $
3 # Copyright (c) 2005 The NetBSD Foundation, Inc.
6 # This code is derived from software contributed to The NetBSD Foundation
9 # Redistribution and use in source and binary forms, with or without
10 # modification, are permitted provided that the following conditions
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
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
55 .if
${PKG_DEBUG_LEVEL} != "0" || defined
(PKG_VERBOSE
)
56 ECHO_WRAPPER_MSG?
= ${ECHO}
58 ECHO_WRAPPER_MSG?
= ${TRUE}
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}
71 ### BEGIN: after the barrier
73 .if exists
(${_COOKIE.barrier
})
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
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
99 WRAPPER_REORDER_CMDS?
= # empty
100 .if
!empty
(WRAPPER_REORDER_CMDS
)
101 MAKE_ENV
+= WRAPPER_REORDER
=yes
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
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}//}
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
125 # WRAPPER_CC, WRAPPER_LD, etc. are the full paths to the wrapper
128 # _WRAP_ALIASES.CC, _WRAP_ALIASES.LD, etc. are the other names by
129 # which each wrapper may be invoked.
136 .if
!empty
(USE_TOOLS
:C
/:.
*//:Mimake
)
137 IMAKE?
= ${X11BASE}/bin
/imake
142 .if
!empty
(PKGSRC_COMPILER
:Mxlc
) && ${OPSYS} == "AIX"
143 CC_R?
= ${_XLC_DIR}/bin
/cc_r
145 CXX_R?
= ${_XLC_DIR}/bin
/c
++_r
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_}
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
}
167 ${_wrappee_}:= ${${_wrappee_}:C
/^
/_asdf_
/1:M_asdf_
*:S
/^_asdf_
//:T
} ${${_wrappee_}:C
/^
/_asdf_
/1:N_asdf_
*}
170 # WRAPPER_<wrappee> is the full path to the wrapper script, plus any
171 # trailing arguments to <wrappee>.
173 WRAPPER_
${_wrappee_}= ${WRAPPER_BINDIR}/${${_wrappee_}}
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
184 # _WRAP_*.<wrappee> variables represent "template methods" of the main
185 # wrapper script. This allows individual wrappers to be customized to
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}
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_}
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
}
245 _WRAP_CMD_SINK.CC
= ${WRAPPER_TMPDIR}/cmd-sink-icc-cc
246 _WRAP_CMD_SINK.CXX
= ${_WRAP_CMD_SINK.CC
}
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
}
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
}
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
}
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
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
}
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
}
305 PKG_FAIL_REASON
+= "xlc unsupported on ${OPSYS}"
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
}
316 .if
!empty
(PKGSRC_COMPILER
:Mgcc
)
317 _WRAP_TRANSFORM.CC
= ${WRAPPER_TMPDIR}/transform-gcc
318 _WRAP_TRANSFORM.CXX
= ${_WRAP_TRANSFORM.CC
}
321 _WRAP_CMD_SINK.LD
= ${WRAPPER_TMPDIR}/cmd-sink-ld
322 _WRAP_SKIP_TRANSFORM.IMAKE
= yes
325 # XXX This section is ${OPSYS}-specific and shouldn't be here.
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
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
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
380 # Filter to scrunch shell scripts by removing comments and empty lines.
381 _WRAP_SH_CRUNCH_FILTER
= ${AWK} ' \
383 /^[[:space:]]*\#/ || NF == 0 { next } \
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" \
425 _WRAP_COOKIE.
${_wrappee_}= ${WRAPPER_DIR}/.wrapper_
${_wrappee_}_done
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_}} \
445 ${_WRAP_TRANSFORM.
${_wrappee_}}
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"; \
451 wrappee
="${PKG_${_wrappee_}:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}"; \
454 *) save_IFS
="$$IFS"; \
456 for
dir in
$${PATH}; do \
462 if
${TEST} -f
"$${dir}/$$wrappee" -o \
463 -h
"$${dir}/$$wrappee"; then \
464 wrappee
="$${dir}/$$wrappee"; \
471 if
${TEST} ! -x
"$$wrappee"; then \
473 ${ECHO_WRAPPER_MSG} "Warning: unable to generate ${_wrappee_} wrapper script: \`$$wrappee'"; \
477 case
$$gen_wrapper in \
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} \
485 ${CHMOD} +x
$$wrapper; \
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_}}
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
}; \
502 .endfor
# _WRAPPEES_UNIQUE
504 .for _target_ in
${WRAPPER_TARGETS}
505 generate-wrappers
: ${_target_}
515 cmd-sink-darwin-xlc \
520 cmd-sink-interix-gcc \
526 cmd-sink-solaris-imake \
527 cmd-sink-sunpro-cxx \
528 cmd-sink-unixware-gcc \
534 transform-mipspro-cc \
535 transform-mipspro-ucode-cc \
536 transform-sunpro-cc \
539 ${WRAPPER_TMPDIR}/${w}: ${WRAPPER_SRCDIR}/${w}
540 ${RUN} ${MKDIR} ${.TARGET
:H
}
541 ${RUN} ${CAT} ${.ALLSRC
} |
${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET
}
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
}
564 .if
!target
(${_WRAP_GEN_REORDER})
565 ${_WRAP_GEN_REORDER}: \
567 ${WRAPPER_SRCDIR}/gen-reorder.sh
568 ${RUN} ${MKDIR} ${.TARGET
:H
}
570 ${CAT} ${WRAPPER_SRCDIR}/gen-reorder.sh \
571 |
${SED} ${_WRAP_SUBST_SED} \
572 |
${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET
}
573 ${RUN} ${CHMOD} +x
${.TARGET
}
576 .if
!target
(${_WRAP_GEN_TRANSFORM})
577 ${_WRAP_GEN_TRANSFORM}: \
579 ${WRAPPER_SRCDIR}/gen-transform.sh
580 ${RUN} ${MKDIR} ${.TARGET
:H
}
582 ${CAT} ${WRAPPER_SRCDIR}/gen-transform.sh \
583 |
${SED} ${_WRAP_SUBST_SED} \
584 |
${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET
}
585 ${RUN} ${CHMOD} +x
${.TARGET
}
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
}
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
}
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} \
607 .if
!target
(${_WRAP_UNTRANSFORM_SEDFILE})
608 ${_WRAP_UNTRANSFORM_SEDFILE}: ${_WRAP_GEN_TRANSFORM}
609 ${RUN} ${MKDIR} ${.TARGET
:H
}
611 ${_WRAP_GEN_TRANSFORM} untransform
${_WRAP_TRANSFORM_CMDS} \
615 .for _wrappee_ in
${_WRAPPEES}
616 . if
!target
(${_WRAP_EMPTY_FILE})
618 ${RUN} ${MKDIR} ${.TARGET
:H
}
619 ${RUN} ${TOUCH} ${TOUCH_ARGS} ${.TARGET
}
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
}
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
}
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
}
640 . if
!target
(${_WRAP_CACHE.
${_wrappee_}})
641 ${_WRAP_CACHE.
${_wrappee_}}:
642 ${RUN} ${MKDIR} ${.TARGET
:H
}
643 ${RUN} echo
"cache_lookup() { cachehit=no; }" > ${.TARGET
}
646 . if
!target
(${_WRAP_CACHE_BODY.
${_wrappee_}})
647 ${_WRAP_CACHE_BODY.
${_wrappee_}}:
648 ${RUN} ${MKDIR} ${.TARGET
:H
}
649 ${RUN} ${TOUCH} ${TOUCH_ARGS} ${.TARGET
}
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
}
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
}
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
}
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
= \
681 ${ECHO} "__dummy-entry__" && \
682 ${FIND} .
-type f \
( ${_UNWRAP_PATTERNS
:C
/.
*/-o
-name
"&"/g
:S
/-o
//1} \
) -print \
683 |
${SED} -e
's|^\./||' \
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}
701 ### END: after the barrier
704 ######################################################################
705 ######################################################################
706 ######################################################################
708 _COOKIE.wrapper
= ${WRKDIR}/.wrapper_done
712 . if exists
(${_COOKIE.wrapper
})
715 . elif defined
(_PKGSRC_BARRIER
)
716 wrapper
: check-vulnerable patch acquire-wrapper-lock
${_COOKIE.wrapper
} release-wrapper-lock
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
})
730 ${_COOKIE.wrapper
}: real-wrapper
734 real-wrapper
: wrapper-message wrapper-vars pre-wrapper do-wrapper post-wrapper wrapper-cookie error-check
736 .PHONY
: 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
747 .if
!target
(pre-wrapper
)
752 .if
!target
(post-wrapper
)
757 .PHONY
: wrapper-cookie
759 ${RUN} [ ! -f
${_COOKIE.wrapper
} ]
760 ${RUN} ${MKDIR} ${_COOKIE.wrapper
:H
}
761 ${RUN} ${ECHO} ${PKGNAME} > ${_COOKIE.wrapper
}