pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/mk/wrapper Split out the argument pre-processing logic...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/d35de540ed52
branches:  trunk
changeset: 487677:d35de540ed52
user:      jlam <jlam%pkgsrc.org@localhost>
date:      Tue Jan 18 17:25:13 2005 +0000

description:
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:

 mk/wrapper/NOTES             |   34 ++++----
 mk/wrapper/arg-pp-darwin-gcc |   55 ++++++++++++++
 mk/wrapper/arg-pp-main       |  159 +++++++++++++++++++++++++++++++++++++++++++
 mk/wrapper/arg-pp-mipspro-cc |   48 ++++++++++++
 mk/wrapper/bsd.wrapper.mk    |   39 +++++++++-
 mk/wrapper/logic             |  154 ++--------------------------------------
 mk/wrapper/wrapper.sh        |    4 +-
 7 files changed, 329 insertions(+), 164 deletions(-)

diffs (truncated from 624 to 300 lines):

diff -r 7d66c501165c -r d35de540ed52 mk/wrapper/NOTES
--- a/mk/wrapper/NOTES  Tue Jan 18 17:05:21 2005 +0000
+++ b/mk/wrapper/NOTES  Tue Jan 18 17:25:13 2005 +0000
@@ -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 @@
            |        |  |        |        |        |
            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 -r 7d66c501165c -r d35de540ed52 mk/wrapper/arg-pp-darwin-gcc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/wrapper/arg-pp-darwin-gcc      Tue Jan 18 17:25:13 2005 +0000
@@ -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 -r 7d66c501165c -r d35de540ed52 mk/wrapper/arg-pp-main
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/wrapper/arg-pp-main    Tue Jan 18 17:25:13 2005 +0000
@@ -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 -r 7d66c501165c -r d35de540ed52 mk/wrapper/arg-pp-mipspro-cc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/wrapper/arg-pp-mipspro-cc      Tue Jan 18 17:25:13 2005 +0000
@@ -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.
+#



Home | Main Index | Thread Index | Old Index