[BACK]Return to libtool-fix-la CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / mk / buildlink3

Annotation of pkgsrc/mk/buildlink3/libtool-fix-la, Revision 1.8

1.8     ! rillig      1: # $NetBSD: libtool-fix-la,v 1.7 2005/12/09 16:16:41 hira Exp $
1.2       jlam        2: #
1.5       jlam        3: # Copyright (c) 2004 The NetBSD Foundation, Inc.
                      4: # All rights reserved.
                      5: #
                      6: # This code is derived from software contributed to The NetBSD Foundation
                      7: # by Johnny C. Lam.
                      8: #
                      9: # Redistribution and use in source and binary forms, with or without
                     10: # modification, are permitted provided that the following conditions
                     11: # are met:
                     12: # 1. Redistributions of source code must retain the above copyright
                     13: #    notice, this list of conditions and the following disclaimer.
                     14: # 2. Redistributions in binary form must reproduce the above copyright
                     15: #    notice, this list of conditions and the following disclaimer in the
                     16: #    documentation and/or other materials provided with the distribution.
                     17: # 3. All advertising materials mentioning features or use of this software
                     18: #    must display the following acknowledgement:
                     19: #        This product includes software developed by the NetBSD
                     20: #        Foundation, Inc. and its contributors.
                     21: # 4. Neither the name of The NetBSD Foundation nor the names of its
                     22: #    contributors may be used to endorse or promote products derived
                     23: #    from this software without specific prior written permission.
                     24: #
                     25: # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     26: # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     27: # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     28: # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     29: # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     30: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     31: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     32: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     33: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     34: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     35: # POSSIBILITY OF SUCH DAMAGE.
                     36:
1.2       jlam       37: # For *.la files, in the "relink_command" line, we make the following
                     38: # replacements:
                     39: #
                     40: #       "libfoo.la" -> "-L./.libs libfoo.la"
                     41: #      "dirpath/libfoo.la" -> "-Ldirpath/.libs libfoo.la"
                     42: #
1.5       jlam       43: # This allows the libraries to be found within ${WRKSRC} during
                     44: # relinking.  We rely on the proper rpath settings to be set by libtool.
1.2       jlam       45: #
1.5       jlam       46: # For the *.lai files, in the "dependency_libs" line, we remove
                     47: # redundant -Ldir and -llib options.  We also make sure that we don't
                     48: # ever reference other .la files, only referring to other libraries
                     49: # via the usual "-L/path -llib" and making sure that /path is always
                     50: # somewhere under the default view.  This makes wildcard dependencies
                     51: # work for "overwrite" packages by letting libtool find libraries in
                     52: # the default view.
                     53:
                     54: BUILDLINK_DIR="@BUILDLINK_DIR@"
                     55: DEPOTBASE="@DEPOTBASE@"
                     56: LOCALBASE="@LOCALBASE@"
                     57: WRKSRC="@WRKSRC@"
                     58:
                     59: basename="@BASENAME@"
                     60: dirname="@DIRNAME@"
                     61: egrep="@EGREP@"
                     62: mv="@MV@"
1.7       hira       63: pwd="@PWD@"
1.5       jlam       64: rm="@RM@"
1.2       jlam       65:
1.7       hira       66: wrksrc_physical=`cd ${WRKSRC}; $pwd`
1.5       jlam       67: labase=`$basename $lafile .la`
                     68: ladir=`$dirname $lafile`
1.2       jlam       69: latimestamp=${ladir}/.${labase}.la.timestamp
                     70: laifile=${ladir}/.libs/${labase}.lai
                     71: if $test -f $lafile; then
                     72:        . ${ladir}/${labase}.la
                     73:
                     74:        deps=
                     75:        for i in ${dependency_libs}; do
1.5       jlam       76:                case $i in
                     77:                ####################################################
                     78:                # Skip all -R* options... rpath info shouldn't go into
                     79:                # the dependency_libs line.
                     80:                ####################################################
1.2       jlam       81:                -R*)
                     82:                        ;;
1.5       jlam       83:                ####################################################
1.2       jlam       84:                # Catch -L<dir> and remove redundant ones.
1.5       jlam       85:                ####################################################
1.2       jlam       86:                -L*)
1.5       jlam       87:                        case $deps in
1.2       jlam       88:                        *"$i "*) ;;
                     89:                        *"$i") ;;
1.5       jlam       90:                        *) deps="$deps $i" ;;
1.2       jlam       91:                        esac
                     92:                        ;;
1.5       jlam       93:                ####################################################
                     94:                # Convert "dirpath/libfoo.la" into "-Ldirpath/.libs
                     95:                # libfoo.la" if it's an uninstalled libtool archive.
                     96:                # This allows proper relinking by libtool during the
                     97:                # install stage by allowing it to find the uninstalled
                     98:                # shared library in the .libs directory.
                     99:                ####################################################
1.2       jlam      100:                *.la)
                    101:                        fixla=0
1.5       jlam      102:                        ltlibsdir=`$dirname $i`/.libs
                    103:                        case $ltlibsdir in
1.2       jlam      104:                        /*)
                    105:                                # fix if an absolute path in ${WRKSRC}
1.5       jlam      106:                                case $ltlibsdir in
                    107:                                ${WRKSRC}/*)    fixla=1 ;;
1.2       jlam      108:                                esac
                    109:                                ;;
                    110:                        *)
                    111:                                # fix all relative paths
                    112:                                fixla=1
                    113:                                ;;
                    114:                        esac
                    115:                        if $test $fixla -gt 0; then
1.5       jlam      116:                                case $deps in
1.2       jlam      117:                                *"-L$ltlibsdir "*) ;;
                    118:                                *"-L$ltlibsdir") ;;
                    119:                                *) deps="$deps -L$ltlibsdir" ;;
                    120:                                esac
                    121:                        fi
1.5       jlam      122:                        deps="$deps $i"
1.2       jlam      123:                        ;;
1.5       jlam      124:                ####################################################
                    125:                # Everything else Just Belongs in the dependency_libs
                    126:                # line.
                    127:                ####################################################
1.2       jlam      128:                *)
1.5       jlam      129:                        deps="$deps $i"
1.2       jlam      130:                        ;;
                    131:                esac
                    132:        done
                    133:
1.8     ! rillig    134:        : ${relink_command=""}
1.2       jlam      135:        relink=
                    136:        for i in ${relink_command}; do
1.5       jlam      137:                case $i in
                    138:                ####################################################
1.2       jlam      139:                # -I* and -D* are useless for linking.
1.5       jlam      140:                ####################################################
1.2       jlam      141:                -I*|-D*)
                    142:                        ;;
1.5       jlam      143:                ####################################################
1.2       jlam      144:                # Catch -L<dir> and remove redundant ones.
1.5       jlam      145:                ####################################################
1.2       jlam      146:                -L*)
1.5       jlam      147:                        case $relink in
1.2       jlam      148:                        *"$i "*) ;;
                    149:                        *"$i") ;;
1.5       jlam      150:                        *) relink="$relink $i" ;;
1.2       jlam      151:                        esac
                    152:                        ;;
                    153:                # This is the .la file we're relinking... don't touch it!
                    154:                $lafile)
1.5       jlam      155:                        relink="$relink $i"
1.2       jlam      156:                        ;;
1.5       jlam      157:                ####################################################
                    158:                # Convert "dirpath/libfoo.la" into "-Ldirpath/.libs
                    159:                # libfoo.la" if it's an uninstalled libtool archive.
                    160:                # This allows proper relinking by libtool during the
                    161:                # install stage by allowing it to find the uninstalled
                    162:                # shared library in the .libs directory.
                    163:                ####################################################
1.2       jlam      164:                *.la)
                    165:                        fixla=0
1.5       jlam      166:                        ltlibsdir=`$dirname $i`/.libs
                    167:                        case $ltlibsdir in
1.2       jlam      168:                        /*)
                    169:                                # fix if an absolute path in ${WRKSRC}
1.5       jlam      170:                                case $ltlibsdir in
                    171:                                ${WRKSRC}/*)    fixla=1 ;;
1.2       jlam      172:                                esac
                    173:                                ;;
                    174:                        *)
                    175:                                # fix all relative paths
                    176:                                fixla=1
                    177:                                ;;
                    178:                        esac
                    179:                        if $test $fixla -gt 0; then
1.5       jlam      180:                                case $relink in
1.2       jlam      181:                                *"-L$ltlibsdir "*) ;;
                    182:                                *"-L$ltlibsdir") ;;
                    183:                                *) relink="$relink -L$ltlibsdir" ;;
                    184:                                esac
                    185:                        fi
1.5       jlam      186:                        relink="$relink $i"
1.2       jlam      187:                        ;;
1.5       jlam      188:                ####################################################
                    189:                # Everything else Just Belongs in the relink_command
                    190:                # line.
                    191:                ####################################################
1.2       jlam      192:                *)
1.5       jlam      193:                        relink="$relink $i"
1.2       jlam      194:                        ;;
                    195:                esac
                    196:        done
1.5       jlam      197:        ##############################################################
                    198:        # Save the orignal .la file produced by libtool as .la.blsav,
                    199:        # and create the new one with a signature.
                    200:        ##############################################################
                    201:        $mv -f $lafile ${lafile}.blsav
1.4       jlam      202:        if $test -n "$deps"; then
                    203:                (
1.5       jlam      204:                $cat ${lafile}.blsav | $sed -e '/^dependency_libs=/,$d'
1.4       jlam      205:                $echo "dependency_libs='$deps'"
1.5       jlam      206:                $cat ${lafile}.blsav | $sed -e '1,/^dependency_libs=/d'
1.4       jlam      207:                ) > ${lafile}.tmp
                    208:        else
                    209:                $cat ${lafile}.blsav > ${lafile}.tmp
                    210:        fi
                    211:        if $test -n "$relink"; then
                    212:                (
1.5       jlam      213:                $cat ${lafile}.tmp | $sed -e '/^relink_command=/,$d'
1.4       jlam      214:                $echo "relink_command='$relink'"
1.5       jlam      215:                $cat ${lafile}.tmp | $sed -e '1,/^relink_command=/d'
1.4       jlam      216:                ) > $lafile
1.2       jlam      217:        else
1.4       jlam      218:                $cat ${lafile}.tmp > $lafile
1.2       jlam      219:        fi
1.4       jlam      220:        $echo >> $lafile
                    221:        $echo "# Directory that this library was built in:" >> $lafile
1.7       hira      222:        $echo "buildlibdir='"`cd $ladir; $pwd | $sed -e "s,^${wrksrc_physical},${WRKSRC},"`"'" >> $lafile
1.4       jlam      223:        $echo >> $lafile
                    224:        $echo "# This file has been modified by buildlink3." >> $lafile
1.5       jlam      225:        $rm ${lafile}.tmp
                    226:        msg_log $wrapperlog "==> Fixed $lafile"
                    227:        ##############################################################
                    228:        # Fix up any .lai files (libtool archives that will be
                    229:        # installed).
                    230:        ##############################################################
1.2       jlam      231:        if $test -z "$laifile" || $test ! -f "$laifile" || \
1.5       jlam      232:           $egrep "^#.*modified by buildlink3" $laifile >/dev/null 2>&1; then
1.2       jlam      233:                :
                    234:        else
1.5       jlam      235:                $sed @_BLNK_WRAP_LT_UNTRANSFORM_SED@ \
1.2       jlam      236:                        $laifile > ${laifile}.tmp
                    237:                . ${laifile}.tmp
1.5       jlam      238:                deps_ok=no
                    239:                deps="${dependency_libs}"
                    240:                while $test "$deps_ok" = "no"; do
                    241:                        deps_ok=yes
                    242:                        L=; l=; lexist=; prev=
                    243:                        for i in $deps; do
                    244:                                case $i in
                    245:                                ######################################
                    246:                                # Don't allowed repeated arguments, so
                    247:                                # "-lm -lm" becomes just "-lm".
                    248:                                ######################################
                    249:                                $prev)
                    250:                                        ;;
                    251:                                ######################################
                    252:                                # Skip all -R* options... rpath info
                    253:                                # shouldn't go into the dependency_libs
                    254:                                # line.
                    255:                                ######################################
                    256:                                -R*)
                    257:                                        ;;
                    258:                                ######################################
                    259:                                # Skip directories that should never
                    260:                                # appear in the -L<dir> flags.  Also
                    261:                                # modify directories in ${DEPOTBASE} to
                    262:                                # point to somewhere in the default view
                    263:                                # ${LOCALBASE}, since we want "overwrite"
                    264:                                # packages to think the libraries really
                    265:                                # do just exist through the default view.
                    266:                                ######################################
                    267:                                -L*)
                    268:                                        case $i in
                    269:                                        -L${BUILDLINK_DIR}/*)
                    270:                                                ;;
                    271:                                        -L${WRKSRC}|-L${WRKSRC}/*)
                    272:                                                ;;
                    273:                                        -L${DEPOTBASE}/*)
                    274:                                                i=`$echo "$i" | $sed -e "s,-L${DEPOTBASE}/[^/]*/,-L${LOCALBASE}/,"`
                    275:                                                case $L in
                    276:                                                *"$i "*) ;;
                    277:                                                *"$i") ;;
                    278:                                                *) L="$L $i" ;;
                    279:                                                esac
                    280:                                                ;;
                    281:                                        *)
                    282:                                                case $L in
                    283:                                                *"$i "*) ;;
                    284:                                                *"$i") ;;
                    285:                                                *) L="$L $i" ;;
                    286:                                                esac
                    287:                                                ;;
                    288:                                        esac
1.2       jlam      289:                                        ;;
1.5       jlam      290:                                ######################################
                    291:                                # Libraries really do exist, so we want
                    292:                                # to keep any -L<dir> flags we've seen
                    293:                                # in the generated dependency_libs line.
                    294:                                ######################################
                    295:                                -l*)
                    296:                                        lexist=1
                    297:                                        l="$l $i"
1.2       jlam      298:                                        ;;
1.5       jlam      299:                                ######################################
                    300:                                # Libtool archives should be changed from
                    301:                                # "/path/libfoo.la" to "-L/path -lfoo",
                    302:                                # where /path is appropriately modified
                    303:                                # so that the depot directory is changed
                    304:                                # to the views directory.  This allows
                    305:                                # the .la files to be used by either
                    306:                                # "overwrite" or "pkgviews" packages and
                    307:                                # works correctly with wildcard
                    308:                                # dependencies.
                    309:                                ######################################
                    310:                                *.la)
                    311:                                        dirbase=`$dirname $i`
                    312:                                        dir=`$echo "X$dirbase" | $Xsed -e "s,^${DEPOTBASE}/[^/]*/,${LOCALBASE}/,"`
                    313:                                        case $L in
                    314:                                        *"-L$dir "*) ;;
                    315:                                        *"-L$dir") ;;
                    316:                                        *) L="$L -L$dir" ;;
1.2       jlam      317:                                        esac
1.5       jlam      318:                                        libbase=`$basename $i .la`
                    319:                                        lib="${libbase#lib}"
                    320:                                        lexist=1
                    321:                                        l="$l -l$lib"
                    322:                                        deps_ok=no
1.2       jlam      323:                                        ;;
1.5       jlam      324:                                ######################################
                    325:                                # Everything else Just Belongs.
                    326:                                ######################################
1.2       jlam      327:                                *)
1.5       jlam      328:                                        l="$l $i"
1.2       jlam      329:                                        ;;
                    330:                                esac
1.5       jlam      331:                                prev="$i"
                    332:                        done
                    333:                        if $test -z "$lexist"; then
                    334:                                L=
                    335:                        fi
                    336:                        deps="$L$l"
                    337:                        deps=`$echo "X$deps" | $Xsed -e "s/^[   ]*//"`
1.2       jlam      338:                done
1.5       jlam      339:                $mv -f $laifile ${laifile}.blsav
1.2       jlam      340:                (
1.5       jlam      341:                        $cat ${laifile}.tmp | $sed -e '/^dependency_libs=/,$d'
1.2       jlam      342:                        $echo "dependency_libs='$deps'"
1.5       jlam      343:                        $cat ${laifile}.tmp | $sed -e '1,/^dependency_libs=/d'
1.2       jlam      344:                        $echo
                    345:                        $echo "# This file has been modified by buildlink3."
                    346:                ) > ${laifile}
1.5       jlam      347:                $rm -f ${laifile}.tmp
                    348:                msg_log $wrapperlog "==> Fixed $laifile"
                    349:                if $egrep "${BUILDLINK_DIR}" $laifile >/dev/null 2>&1; then
                    350:                        msg_log $wrapperlog "==> [buildlink3] Error: buildlink3 leakage into $laifile"
1.2       jlam      351:                        $echo "==> [buildlink3] Error: buildlink3 leakage into $laifile" 1>&2
                    352:                        wrapper_result=1
                    353:                fi
                    354:        fi
                    355: fi

CVSweb <webmaster@jp.NetBSD.org>