summaryrefslogtreecommitdiff
path: root/mk/wrapper/arg-pp-main
diff options
context:
space:
mode:
authorjlam <jlam@pkgsrc.org>2005-01-18 17:25:13 +0000
committerjlam <jlam@pkgsrc.org>2005-01-18 17:25:13 +0000
commit015cf2637f603788344119f6bb9792272c4364ed (patch)
treeb6c271637ab4764fb1a765319d1152c53eda7910 /mk/wrapper/arg-pp-main
parent1aa38e4b090e678d34fff3bd152e15ed60ba349c (diff)
downloadpkgsrc-015cf2637f603788344119f6bb9792272c4364ed.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/arg-pp-main')
-rw-r--r--mk/wrapper/arg-pp-main159
1 files changed, 159 insertions, 0 deletions
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