# $NetBSD: marshall,v 1.11 2004/03/29 06:02:53 jlam Exp $ # # Handle cases where multiple consecutive arguments must be processed # together, either by merging the arguments or "skipping" the extra # arguments. # case $arg in # # If we see "-I dir" (or -L/-R), we convert it to "-Idir" so that it may be # transformed correctly. # -[ILR]) arg="$arg$1" shift ;; # # Merge "-Wl,R -Wl,/path/to/dir" into a single argument # "-Wl,R/path/to/dir" and merge "-Wl,--rpath -Wl,/path/to/dir" into # "-Wl,--rpath,/path/to/dir" so that we can look them up in the cache. # Also deal with "-Xlinker" being equivalent to "-Wl,". # -Xlinker|-Wl,-R|-Wl,-rpath|-Wl,-rpath-link|-Wl,--rpath|-Wl,--rpath-link) R= case $arg in -Xlinker) case $1 in -Wl,-R) R="$1"; shift ;; -Wl,-rpath|-Wl,-rpath-link) R="$1,"; shift ;; -Wl,--rpath|-Wl,--rpath-link) R="$1,"; shift ;; -Wl,*) arg="$1"; shift ;; -R) R="-Wl,$1"; shift ;; -rpath|-rpath-link) R="-Wl,$1,"; shift ;; --rpath|--rpath-link) R="-Wl,$1,"; shift ;; esac ;; -Wl,-R) R="$arg" ;; -Wl,-rpath|-Wl,-rpath-link) R="$arg," ;; -Wl,--rpath|-Wl,--rpath-link) R="$arg," ;; esac if $test -n "$R"; then nextarg=$1; shift case $nextarg in -Xlinker) nextarg=$1; shift ;; esac case $nextarg in -Wl,*) nextarg=`$echo "X$nextarg" | $Xsed -e "s|^-Wl,||g"` ;; esac arg="$R$nextarg" fi ;; # # If we're linking a shared library by "cc -shared -o /srcdir/shlib", # we need to protect the full path after "-o" from being transformed # from "/srcdir/shlib" to "-L/srcdir -lshlib" # -o) skipargs=1 ;; # # 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 protect the full path from "/path/shlib" -> "-L/path -lshlib" # transformation. (-seg_addr_table_filename's purpose is more obscure, # but darwin's imake rules use it.) # -dylib_file|-dylib_install_name|-install_name|-seg_addr_table_filename) skipargs=1 ;; esac