diff options
author | jlam <jlam> | 2005-01-18 17:25:13 +0000 |
---|---|---|
committer | jlam <jlam> | 2005-01-18 17:25:13 +0000 |
commit | 5bf47c8e524507d3eda65e97c734007b6dc49335 (patch) | |
tree | b6c271637ab4764fb1a765319d1152c53eda7910 /mk/wrapper | |
parent | 33d644ca7de28b12372c0ced6cf6871607cd2f88 (diff) | |
download | pkgsrc-5bf47c8e524507d3eda65e97c734007b6dc49335.tar.gz |
Split out the argument pre-processing logic into its own script
arg-pp-main, and allow for wrapper-specific hooks to extend the
pre-processing through _WRAP_ARG_PP.<wrappee>. Move the Darwin
GCC-related preprocessing into arg-pp-darwin-gcc, and create a
arg-pp-mipspro-cc that understands -LANG:<feature> and -LIST:<feature>
so that they're not confused with the usual -Ldir options.
Diffstat (limited to 'mk/wrapper')
-rw-r--r-- | mk/wrapper/NOTES | 34 | ||||
-rw-r--r-- | mk/wrapper/arg-pp-darwin-gcc | 55 | ||||
-rw-r--r-- | mk/wrapper/arg-pp-main | 159 | ||||
-rw-r--r-- | mk/wrapper/arg-pp-mipspro-cc | 48 | ||||
-rw-r--r-- | mk/wrapper/bsd.wrapper.mk | 39 | ||||
-rw-r--r-- | mk/wrapper/logic | 154 | ||||
-rw-r--r-- | mk/wrapper/wrapper.sh | 4 |
7 files changed, 329 insertions, 164 deletions
diff --git a/mk/wrapper/NOTES b/mk/wrapper/NOTES index 0a84bf22672..342781d35da 100644 --- a/mk/wrapper/NOTES +++ b/mk/wrapper/NOTES @@ -1,4 +1,4 @@ -$NetBSD: NOTES,v 1.1 2004/09/21 15:01:41 jlam Exp $ +$NetBSD: NOTES,v 1.2 2005/01/18 17:25:13 jlam Exp $ ==> {"$@"} ,--> {argbuf} ,--> {cmdbuf} @@ -8,24 +8,24 @@ $NetBSD: NOTES,v 1.1 2004/09/21 15:01:41 jlam Exp $ | | | | | | v v | | | | | | - [scan] [arg-source] `--> [logic] `--> [cmd-sink] + [scan] [arg-source] `--> [logic] `--------> [cmd-sink] - ^ ^ ^ ^ - | | | | - ,-----------------' | | | - | ,-------' `---. | - | | | | - v v v v + ^ ^ ^ ^ ^ ^ + ,-----------------------------' | | | | | + | ,-------------------' | | | | + | | ,-------------' | | | + | | | ,---' `-------. | + v v v v v v - [cache] [transform.sed] [transform] [buildcmd] + [arg-pp-main] [arg-pp] [cache] [transform.sed] [transform] [buildcmd] - | - ,-- {cmd} <--| - {cmd} <===| | - `-- {libs} <--' + | + ,-- {cmd} <--| + {cmd} <===| | + `-- {libs} <--' - ^ - | - v + ^ + | + v - [reorderlibs] + [reorderlibs] diff --git a/mk/wrapper/arg-pp-darwin-gcc b/mk/wrapper/arg-pp-darwin-gcc new file mode 100644 index 00000000000..bfa86ea0bf2 --- /dev/null +++ b/mk/wrapper/arg-pp-darwin-gcc @@ -0,0 +1,55 @@ +# $NetBSD: arg-pp-darwin-gcc,v 1.1 2005/01/18 17:25:13 jlam Exp $ +# +# Copyright (c) 2005 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the NetBSD +# Foundation, Inc. and its contributors. +# 4. Neither the name of The NetBSD Foundation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +case $arg in +###################################################################### +# Darwin's linker uses: +# +# -dylib_file /path/shlib:/path2/shlib +# -dylib_install_name /path/shlib +# -install_name /path/shlib +# +# to pass the installed locations for the shared libraries to the +# linker, and we need to pass the extra argument unmodified. The +# purpose of -seg_addr_table_filename is more obscure, but Darwin's +# imake rules use it. +###################################################################### +-dylib_file|-dylib_install_name|-install_name|-seg_addr_table_filename) + skipargs=1 + argok=yes + argmatch=yes + ;; +esac diff --git a/mk/wrapper/arg-pp-main b/mk/wrapper/arg-pp-main new file mode 100644 index 00000000000..98f4eb4aabf --- /dev/null +++ b/mk/wrapper/arg-pp-main @@ -0,0 +1,159 @@ +# $NetBSD: arg-pp-main,v 1.1 2005/01/18 17:25:13 jlam Exp $ +# +# Copyright (c) 2005 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the NetBSD +# Foundation, Inc. and its contributors. +# 4. Neither the name of The NetBSD Foundation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +case $arg in +###################################################################### +# Split direct paths to shared libraries into the "-Ldir -llib" +# equivalent. +###################################################################### +/*/lib*.so|/*/lib*.so.[0-9]*) + dir="${arg%/lib*}" + lib="${arg#$dir/lib}" + case $lib in + */*) argok=yes; argmatch=yes ;; + *.so) lib="${lib%.so}" ;; + *.so.[0-9]*) lib="${lib%.so.[0-9]*}" ;; + esac + prepend_queue argbuf "-l$lib" + $debug_log $wrapperlog " (arg-pp-main) pre: -l$lib" + prepend_queue argbuf "-L$dir" + $debug_log $wrapperlog " (arg-pp-main) pre: -L$dir" + ;; +/*/lib*.sl|/*/lib*.sl.[0-9]*) # HP-UX + dir="${arg%/lib*}" + lib="${arg#$dir/lib}" + case $lib in + */*) argok=yes; argmatch=yes ;; + *.sl) lib="${lib%.sl}" ;; + *.sl.[0-9]*) lib="${lib%.sl.[0-9]*}" ;; + esac + prepend_queue argbuf "-l$lib" + $debug_log $wrapperlog " (arg-pp-main) pre: -l$lib" + prepend_queue argbuf "-L$dir" + $debug_log $wrapperlog " (arg-pp-main) pre: -L$dir" + ;; +/*/lib*.dylib) # Darwin + dir="${arg%/lib*.dylib}" + lib="${arg#$dir/lib}" + case $lib in + */*) argok=yes; argmatch=yes ;; + *.dylib) lib="${lib%.dylib}" ;; + esac + prepend_queue argbuf "-l$lib" + $debug_log $wrapperlog " (arg-pp-main) pre: -l$lib" + prepend_queue argbuf "-L$dir" + $debug_log $wrapperlog " (arg-pp-main) pre: -L$dir" + ;; +###################################################################### +# Remove extraneous comma in "-Wl,-R,/dir" and in "-Wl,-L,/dir". +###################################################################### +-Wl,-L,*) + arg="-Wl,-L${arg#-Wl,-L,}" + $debug_log $wrapperlog " (arg-pp-main) pre: $arg" + prepend_queue argbuf "$arg" + argmatch=yes + ;; +-Wl,-R,*) + arg="-Wl,-R${arg#-Wl,-R,}" + $debug_log $wrapperlog " (arg-pp-main) pre: $arg" + prepend_queue argbuf "$arg" + argmatch=yes + ;; +###################################################################### +# Merge "-Wl,-R -Wl,/dir" into a single "-Wl,-R/dir". Same for -Wl,-L, +# -Wl,-rpath and -Wl,-rpath-link. +###################################################################### +-Wl,-[LR]) + pop_queue argbuf nextarg + $debug_log $wrapperlog " (arg-pp-main) pop: $nextarg" + shquote "${nextarg#-Wl,}"; nextarg="$shquoted" + $debug_log $wrapperlog " (arg-pp-main) pre: $arg$nextarg" + prepend_queue argbuf "$arg$nextarg" + argmatch=yes + ;; +-Wl,-rpath|-Wl,-rpath-link|-Wl,--rpath) + pop_queue argbuf nextarg + $debug_log $wrapperlog " (arg-pp-main) pop: $nextarg" + shquote "${nextarg#-Wl,}"; nextarg="$shquoted" + $debug_log $wrapperlog " (arg-pp-main) pre: $arg,$nextarg" + prepend_queue argbuf "$arg,$nextarg" + argmatch=yes + ;; +###################################################################### +# Remove rpath options that try to add relative paths to the runtime +# library search path. This basically cleans up after lazy programmers +# who can't write Makefiles. +###################################################################### +-R[!/]*|-Wl,-R[!/]*|\ +-Wl,-rpath,[!/]*|-Wl,-rpath-link,[!/]*|-Wl,--rpath,[!/]*) + $debug_log $wrapperlog " (arg-pp-main) drop: $arg" + argmatch=yes + ;; +###################################################################### +# Remove consecutive, repeated library options. +###################################################################### +-l*) + head_queue argbuf nextarg + while $test "$nextarg" = "$arg"; do + pop_queue argbuf nextarg + $debug_log $wrapperlog " (arg-pp-main) drop: $nextarg" + if queue_is_empty argbuf; then + break + else + head_queue argbuf nextarg + fi + done + argok=yes + argmatch=yes + ;; +####################################################################### +# The -o option takes an extra argument that should be passed unmodified. +####################################################################### +-o) + skipargs=1 + argok=yes + argmatch=yes + ;; +####################################################################### +# GNU ld uses "--dynamic-linker /path/to/shared/object" to set the +# dynamic linker code for ELF executables. +####################################################################### +--dynamic-linker) + skipargs=1 + argok=yes + argmatch=yes + ;; +esac diff --git a/mk/wrapper/arg-pp-mipspro-cc b/mk/wrapper/arg-pp-mipspro-cc new file mode 100644 index 00000000000..f8cc1466e2c --- /dev/null +++ b/mk/wrapper/arg-pp-mipspro-cc @@ -0,0 +1,48 @@ +# $NetBSD: arg-pp-mipspro-cc,v 1.1 2005/01/18 17:25:13 jlam Exp $ +# +# Copyright (c) 2005 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the NetBSD +# Foundation, Inc. and its contributors. +# 4. Neither the name of The NetBSD Foundation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +case $arg in +###################################################################### +# MIPSpro uses -LANG:<feature> and -LIST:<feature> as knobs for the +# compiler, but we don't want them to be confused with the usual +# -Ldir options, so just pass them verbatim onward. +###################################################################### +-LANG:*|-LIST:*) + do_transform=no + argok=yes + argmatch=yes + ;; +esac diff --git a/mk/wrapper/bsd.wrapper.mk b/mk/wrapper/bsd.wrapper.mk index c96637857b5..b0c89f25465 100644 --- a/mk/wrapper/bsd.wrapper.mk +++ b/mk/wrapper/bsd.wrapper.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.wrapper.mk,v 1.18 2005/01/11 18:08:20 jlam Exp $ +# $NetBSD: bsd.wrapper.mk,v 1.19 2005/01/18 17:25:13 jlam Exp $ # # Copyright (c) 2004 The NetBSD Foundation, Inc. # All rights reserved. @@ -180,6 +180,8 @@ _WRAP_ALIASES.LD= ld # _WRAP_ENV?= PATH="${_WRAP_PATH}"; export PATH _WRAP_EMPTY_FILE?= ${WRAPPER_TMPDIR}/empty +_WRAP_ARG_PP?= ${_WRAP_EMPTY_FILE} +_WRAP_ARG_PP_MAIN?= ${WRAPPER_TMPDIR}/arg-pp-main _WRAP_ARG_SOURCE?= ${WRAPPER_TMPDIR}/arg-source _WRAP_BUILDCMD?= ${WRAPPER_TMPDIR}/buildcmd _WRAP_CACHE?= ${WRAPPER_TMPDIR}/cache @@ -212,6 +214,8 @@ _UNWRAP_SED= -f ${_WRAP_UNTRANSFORM_SEDFILE} _WRAPPER_SH.${_wrappee_}= ${WRAPPER_SRCDIR}/wrapper.sh _WRAP_ENV.${_wrappee_}?= ${_WRAP_ENV} _WRAP_EXTRA_ARGS.${_wrappee_}?= # empty +_WRAP_ARG_PP.${_wrappee_}?= ${_WRAP_ARG_PP} +_WRAP_ARG_PP_MAIN.${_wrappee_}?= ${_WRAP_ARG_PP_MAIN} _WRAP_ARG_SOURCE.${_wrappee_}?= ${_WRAP_ARG_SOURCE} _WRAP_BUILDCMD.${_wrappee_}?= ${_WRAP_BUILDCMD} _WRAP_CACHE.${_wrappee_}?= ${_WRAP_CACHE} @@ -235,8 +239,10 @@ _WRAP_CMD_SINK.LD= ${_WRAP_CMD_SINK.CC} .endif .if !empty(PKGSRC_COMPILER:Mmipspro) +_WRAP_ARG_PP.CC= ${WRAPPER_TMPDIR}/arg-pp-mipspro-cc _WRAP_CACHE_BODY.CC= ${WRAPPER_TMPDIR}/cache-body-mipspro-cc _WRAP_TRANSFORM.CC= ${WRAPPER_TMPDIR}/transform-mipspro-cc +_WRAP_ARG_PP.CXX= ${_WRAP_ARG_PP.CC} _WRAP_CACHE_BODY.CXX= ${_WRAP_CACHE_BODY.CC} _WRAP_TRANSFORM.CXX= ${_WRAP_TRANSFORM.CC} .endif @@ -284,14 +290,18 @@ _WRAP_EXTRA_ARGS.CPP+= -D_ALL_SOURCE _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-interix-gcc _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC} _WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-interix-ld +.elif ${OPSYS} == "Darwin" +_WRAP_ARG_PP.CC= ${WRAPPER_TMPDIR}/arg-pp-darwin-gcc +_WRAP_ARG_PP.CXX= ${_WRAP_ARG_PP.CC} +_WRAP_ARG_PP.LD= ${_WRAP_ARG_PP.CC} .elif ${OPSYS} == "UnixWare" _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-unixware-gcc _WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC} _WRAP_CMD_SINK.LD= ${_WRAP_CMD_SINK.CC} .elif ${OPSYS} == "OSF1" -_WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-osf1-ld _WRAP_CMD_SINK.CC= ${WRAPPER_TMPDIR}/cmd-sink-osf1-cc -_WRAP_CMD_SINK.CXX= ${WRAPPER_TMPDIR}/cmd-sink-osf1-cc +_WRAP_CMD_SINK.CXX= ${_WRAP_CMD_SINK.CC} +_WRAP_CMD_SINK.LD= ${WRAPPER_TMPDIR}/cmd-sink-osf1-ld .endif # Filter to scrunch shell scripts by removing comments and empty lines. @@ -314,6 +324,8 @@ _WRAP_SUBST_SED= \ _WRAP_SUBST_SED.${_wrappee_}= \ -e "s|@_WRAP_ENV@|${_WRAP_ENV.${_wrappee_}:Q}|g" \ -e "s|@_WRAP_EXTRA_ARGS@|${_WRAP_EXTRA_ARGS.${_wrappee_}:Q}|g" \ + -e "s|@_WRAP_ARG_PP@|${_WRAP_ARG_PP.${_wrappee_}:Q}|g" \ + -e "s|@_WRAP_ARG_PP_MAIN@|${_WRAP_ARG_PP_MAIN.${_wrappee_}:Q}|g" \ -e "s|@_WRAP_ARG_SOURCE@|${_WRAP_ARG_SOURCE.${_wrappee_}:Q}|g" \ -e "s|@_WRAP_BUILDCMD@|${_WRAP_BUILDCMD.${_wrappee_}:Q}|g" \ -e "s|@_WRAP_CACHE@|${_WRAP_CACHE.${_wrappee_}:Q}|g" \ @@ -340,6 +352,8 @@ PKG_${_wrappee_}?= ${${_wrappee_}} do-wrapper: ${_WRAP_COOKIE.${_wrappee_}} ${_WRAP_COOKIE.${_wrappee_}}: \ ${_WRAPPER_SH.${_wrappee_}} \ + ${_WRAP_ARG_PP.${_wrappee_}} \ + ${_WRAP_ARG_PP_MAIN.${_wrappee_}} \ ${_WRAP_ARG_SOURCE.${_wrappee_}} \ ${_WRAP_BUILDCMD.${_wrappee_}} \ ${_WRAP_CACHE.${_wrappee_}} \ @@ -410,6 +424,18 @@ ${_alias_}: ${_WRAP_COOKIE.${_wrappee_}} do-wrapper: ${_target_} .endfor +${WRAPPER_TMPDIR}/arg-pp-darwin-gcc: \ + ${WRAPPER_SRCDIR}/arg-pp-darwin-gcc + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG}${CAT} ${.ALLSRC} \ + | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET} + +${WRAPPER_TMPDIR}/arg-pp-mipspro-cc: \ + ${WRAPPER_SRCDIR}/arg-pp-mipspro-cc + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG}${CAT} ${.ALLSRC} \ + | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET} + ${WRAPPER_TMPDIR}/cmd-sink-aix-xlc: \ ${WRAPPER_SRCDIR}/cmd-sink-aix-xlc ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} @@ -543,6 +569,13 @@ ${_WRAP_EMPTY_FILE}: ${_PKG_SILENT}${_PKG_DEBUG}${TOUCH} ${TOUCH_ARGS} ${.TARGET} . endif +. if !target(${_WRAP_ARG_PP_MAIN.${_wrappee_}}) +${_WRAP_ARG_PP_MAIN.${_wrappee_}}: ${WRAPPER_SRCDIR}/arg-pp-main + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG}${CAT} ${.ALLSRC} \ + | ${_WRAP_SH_CRUNCH_FILTER} > ${.TARGET} +. endif + . if !target(${_WRAP_ARG_SOURCE.${_wrappee_}}) ${_WRAP_ARG_SOURCE.${_wrappee_}}: ${WRAPPER_SRCDIR}/arg-source ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} diff --git a/mk/wrapper/logic b/mk/wrapper/logic index f8d9e7dab46..2154f374067 100644 --- a/mk/wrapper/logic +++ b/mk/wrapper/logic @@ -1,4 +1,4 @@ -# $NetBSD: logic,v 1.9 2005/01/18 05:24:47 jlam Exp $ +# $NetBSD: logic,v 1.10 2005/01/18 17:25:13 jlam Exp $ # # Copyright (c) 2004 The NetBSD Foundation, Inc. # All rights reserved. @@ -61,150 +61,18 @@ while ! queue_is_empty argbuf; do argok=yes continue fi - - case $arg in - ###################################################### - # Split direct paths to shared libraries into the - # "-Ldir -llib" equivalent - ###################################################### - /*/lib*.so|/*/lib*.so.[0-9]*) - dir="${arg%/lib*}" - lib="${arg#$dir/lib}" - case $lib in - */*) argok=yes; continue ;; - *.so) lib="${lib%.so}" ;; - *.so.[0-9]*) lib="${lib%.so.[0-9]*}" ;; - esac - prepend_queue argbuf "-l$lib" - $debug_log $wrapperlog " (logic) pre: -l$lib" - prepend_queue argbuf "-L$dir" - $debug_log $wrapperlog " (logic) pre: -L$dir" - ;; - /*/lib*.sl|/*/lib*.sl.[0-9]*) # HP-UX - dir="${arg%/lib*}" - lib="${arg#$dir/lib}" - case $lib in - */*) argok=yes; continue ;; - *.sl) lib="${lib%.sl}" ;; - *.sl.[0-9]*) lib="${lib%.sl.[0-9]*}" ;; - esac - prepend_queue argbuf "-l$lib" - $debug_log $wrapperlog " (logic) pre: -l$lib" - prepend_queue argbuf "-L$dir" - $debug_log $wrapperlog " (logic) pre: -L$dir" - ;; - /*/lib*.dylib) # Darwin - dir="${arg%/lib*.dylib}" - lib="${arg#$dir/lib}" - case $lib in - */*) argok=yes; continue ;; - *.dylib) lib="${lib%.dylib}" ;; - esac - prepend_queue argbuf "-l$lib" - $debug_log $wrapperlog " (logic) pre: -l$lib" - prepend_queue argbuf "-L$dir" - $debug_log $wrapperlog " (logic) pre: -L$dir" - ;; - ###################################################### - # Remove extraneous comma in "-Wl,-R,/dir" and in - # "-Wl,-L,/dir". - ###################################################### - -Wl,-L,*) - arg="-Wl,-L${arg#-Wl,-L,}" - $debug_log $wrapperlog " (logic) pre: $arg" - prepend_queue argbuf "$arg" - ;; - -Wl,-R,*) - arg="-Wl,-R${arg#-Wl,-R,}" - $debug_log $wrapperlog " (logic) pre: $arg" - prepend_queue argbuf "$arg" - ;; - ###################################################### - # Merge "-Wl,-R -Wl,/dir" into a single "-Wl,-R/dir". - # Same for -Wl,-L, -Wl,-rpath and -Wl,-rpath-link. - ###################################################### - -Wl,-[LR]) - pop_queue argbuf nextarg - $debug_log $wrapperlog " (logic) pop: $nextarg" - shquote "${nextarg#-Wl,}"; nextarg="$shquoted" - $debug_log $wrapperlog " (logic) pre: $arg$nextarg" - prepend_queue argbuf "$arg$nextarg" - ;; - -Wl,-rpath|-Wl,-rpath-link|-Wl,--rpath) - pop_queue argbuf nextarg - $debug_log $wrapperlog " (logic) pop: $nextarg" - shquote "${nextarg#-Wl,}"; nextarg="$shquoted" - $debug_log $wrapperlog " (logic) pre: $arg,$nextarg" - prepend_queue argbuf "$arg,$nextarg" - ;; - ###################################################### - # Remove rpath options that try to add relative paths - # to the runtime library search path. This basically - # cleans up after lazy programmers who can't write - # Makefiles. - ###################################################### - -R[!/]*|-Wl,-R[!/]*|\ - -Wl,-rpath,[!/]*|-Wl,-rpath-link,[!/]*|-Wl,--rpath,[!/]*) - $debug_log $wrapperlog " (logic) drop: $arg" - ;; - ###################################################### - # Remove consecutive, repeated library options. - ###################################################### - -l*) - head_queue argbuf nextarg - while $test "$nextarg" = "$arg"; do - pop_queue argbuf nextarg - $debug_log $wrapperlog " (logic) drop: $nextarg" - if queue_is_empty argbuf; then - break - else - head_queue argbuf nextarg - fi - done - argok=yes - ;; - ###################################################### - # The -o option takes an extra argument that should - # be passed unmodified. - ####################################################### - -o) - skipargs=1 - argok=yes - ;; - ###################################################### - # GNU ld uses "--dynamic-linker /path/to/shared/object" - # to set the dynamic linker code for ELF executables. - ###################################################### - --dynamic-linker) - skipargs=1 - argok=yes - ;; - ###################################################### - # Darwin's linker uses: - # - # -dylib_file /path/shlib:/path2/shlib - # -dylib_install_name /path/shlib - # -install_name /path/shlib - # - # to pass the installed locations for the shared - # libraries to the linker, and we need to pass the extra - # argument unmodified. The purpose of - # -seg_addr_table_filename is more obscure, but Darwin's - # imake rules use it. - ###################################################### - -dylib_file|-dylib_install_name|-install_name|\ - -seg_addr_table_filename) - skipargs=1 - argok=yes - ;; - ###################################################### - # Leave all else untouched. - ###################################################### - *) - argok=yes + argmatch=no + . $arg_pp_main + case $argmatch in + yes) continue ;; + esac + . $arg_pp + case $argmatch in + yes) continue ;; esac + argok=yes done - + # # Try to look up the transformed $arg in the cache, but if # not there, then apply the transformations and save the result # in the cache. diff --git a/mk/wrapper/wrapper.sh b/mk/wrapper/wrapper.sh index d1459d8051f..e1e37042496 100644 --- a/mk/wrapper/wrapper.sh +++ b/mk/wrapper/wrapper.sh @@ -1,6 +1,6 @@ #! @WRAPPER_SHELL@ # -# $NetBSD: wrapper.sh,v 1.4 2004/11/12 16:27:57 jlam Exp $ +# $NetBSD: wrapper.sh,v 1.5 2005/01/18 17:25:13 jlam Exp $ # # Copyright (c) 2004 The NetBSD Foundation, Inc. # All rights reserved. @@ -36,6 +36,8 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +arg_pp="@_WRAP_ARG_PP@" +arg_pp_main="@_WRAP_ARG_PP_MAIN@" arg_source="@_WRAP_ARG_SOURCE@" buildcmd="@_WRAP_BUILDCMD@" cache="@_WRAP_CACHE@" |