summaryrefslogtreecommitdiff
path: root/mk/wrapper
diff options
context:
space:
mode:
authorjlam <jlam>2005-01-18 17:25:13 +0000
committerjlam <jlam>2005-01-18 17:25:13 +0000
commit5bf47c8e524507d3eda65e97c734007b6dc49335 (patch)
treeb6c271637ab4764fb1a765319d1152c53eda7910 /mk/wrapper
parent33d644ca7de28b12372c0ced6cf6871607cd2f88 (diff)
downloadpkgsrc-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/NOTES34
-rw-r--r--mk/wrapper/arg-pp-darwin-gcc55
-rw-r--r--mk/wrapper/arg-pp-main159
-rw-r--r--mk/wrapper/arg-pp-mipspro-cc48
-rw-r--r--mk/wrapper/bsd.wrapper.mk39
-rw-r--r--mk/wrapper/logic154
-rw-r--r--mk/wrapper/wrapper.sh4
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@"