#!/bin/sh #************************************************************************* # # $RCSfile: create-bundle,v $ # # $Revision: 1.24.4.1 $ # # last change: $Author: fa $ $Date: 2002/11/21 21:46:56 $ # # The Contents of this file are made available subject to the terms of # either of the following licenses # # - GNU Lesser General Public License Version 2.1 # - Sun Industry Standards Source License Version 1.1 # # Sun Microsystems Inc., October, 2000 # # GNU Lesser General Public License Version 2.1 # ============================================= # Copyright 2000 by Sun Microsystems, Inc. # 901 San Antonio Road, Palo Alto, CA 94303, USA # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License version 2.1, as published by the Free Software Foundation. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # # # Sun Industry Standards Source License Version 1.1 # ================================================= # The contents of this file are subject to the Sun Industry Standards # Source License Version 1.1 (the "License"); You may not use this file # except in compliance with the License. You may obtain a copy of the # License at http://www.openoffice.org/license.html. # # Software provided under this License is provided on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, # WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, # MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. # See the License for the specific provisions governing your rights and # obligations concerning the Software. # # The Initial Developer of the Original Code is: Sun Microsystems, Inc. # # Copyright: 2000 by Sun Microsystems, Inc. # # All Rights Reserved. # # Contributor(s): _______________________________________ # # # #************************************************************************* # Code # ---- finalLibraryList="" # AddLibraryAndDependencies() # # Adds a library to the global library list (if its not # already on the list) and then grabs each dependent library # and calls itself with that library. # --------------------------------------------------------------- AddLibraryAndDependencies () { # Arguments should be: # 1 - Global library directory # 2 - project library directory # 3 - library to scan and add local globalLibDir; local projLibDir; local libraryName; local actualLibDir; local dependentLibs; local depLibName; local libloc1; local libloc2; # Initial Assignments globalLibDir="$1" projLibDir="$2" libraryName="$3" actualLibDir="error..." # Find the directory library libraryName is actually in if [ -f "$globalLibDir/$libraryName" ]; then actualLibDir="$globalLibDir" fi if [ -f "$projLibDir/$libraryName" ]; then actualLibDir="$projLibDir" fi # Add library libraryName to the global library list if its not already there if ! printf "$finalLibraryList" | grep -q "$libraryName" ; then finalLibraryList="$finalLibraryList $libraryName" fi # Now get a list of library libraryName's dependecies and add each one of them and their dependencies dependentLibs=`otool -L "$actualLibDir/$libraryName" | grep -e '@' | grep -v "$libraryName" | sed 's/@executable_path\///' | sed 's/(compatibility version [0-9].[0-9].[0-9], current version [0-9].[0-9].[0-9])//g' | sed 's/ //g' | xargs` for depLibName in $dependentLibs; do # If the dependent is not in the global library list, then add it if ! printf "$finalLibraryList" | grep -q "$depLibName" ; then if [ "$depLibName" != "libstaticmxp.dylib" ]; then AddLibraryAndDependencies "$globalLibDir" "$projLibDir" "$depLibName" fi fi done } # Main program # # Validates arguments, and calls the recursive library add # function for each library on the command-line. # --------------------------------------------------------------- # If we're not given the requisite # of arguments, yell at the user if [ $# = 0 ]; then printf "dylib-link-list\n" >&2 printf " Error, incorrect number of arguments\n" >&2 printf " Usage: dylib-link-list prjName solverLibDir prjLibDir [lib1] ... [libN]\n" >&2 exit 1 fi # Grab the project name projectName="$1" shift # Grab the directory where the libraries are stored solverLibDir="$1" shift # Grab the second directory where the libraries could stored projLocalLibDir="$1" shift # Go through each library listed on the command line, and add # it and the libraries it depends on to the global library list while [ $# != 0 ]; do # Grab the library name and strip off the "-l" libraryName=`echo "$1" | sed 's/-l//g'` shift libraryName="lib$libraryName.dylib" # Don't include libstatic libraries if [ "$libraryName" != "libstaticmxp.dylib" ]; then AddLibraryAndDependencies "$solverLibDir" "$projLocalLibDir" "$libraryName" fi done # Finally print out the formatted library list suitable for linker input for eachLib in $finalLibraryList; do printf " -dylib_file @executable_path/$eachLib:$solverLibDir/$eachLib " done