mergelib.cpp revision bb2e14f3
1XCOMM!/bin/sh 2XCOMM 3XCOMM $Xorg: mergelib.cpp,v 1.4 2001/02/09 02:03:17 xorgcvs Exp $ 4XCOMM 5XCOMM Copyright (c) 1989, 1998 The Open Group 6XCOMM 7XCOMM Permission to use, copy, modify, distribute, and sell this software and 8XCOMM its documentation for any purpose is hereby granted without fee, provided 9XCOMM that the above copyright notice appear in all copies and that both that 10XCOMM copyright notice and this permission notice appear in supporting 11XCOMM documentation. 12XCOMM 13XCOMM The above copyright notice and this permission notice shall be included in 14XCOMM all copies or substantial portions of the Software. 15XCOMM 16XCOMM THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17XCOMM IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18XCOMM FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19XCOMM OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20XCOMM AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21XCOMM CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22XCOMM 23XCOMM Except as contained in this notice, the name of The Open Group shall not be 24XCOMM used in advertising or otherwise to promote the sale, use or other dealings 25XCOMM in this Software without prior written authorization from The Open Group. 26XCOMM 27XCOMM Author: Jim Fulton, MIT X Consortium 28XCOMM 29XCOMM mergelib - merge one library into another; this is commonly used by X 30XCOMM to add the extension library into the base Xlib. 31XCOMM 32 33usage="usage: $0 to-library from-library [object-filename-prefix]" 34objprefix=_ 35 36case $# in 37 2) ;; 38 3) objprefix=$3 ;; 39 *) echo "$usage" 1>&2; exit 1 ;; 40esac 41 42tolib=$1 43fromlib=$2 44 45if [ ! -f $fromlib ]; then 46 echo "$0: no such from-library $fromlib" 1>&2 47 exit 1 48fi 49 50if [ ! -f $tolib ]; then 51 echo "$0: no such to-library $tolib" 1>&2 52 exit 1 53fi 54 55 56XCOMM 57XCOMM Create a temp directory, and figure out how to reference the 58XCOMM object files from it (i.e. relative vs. absolute path names). 59XCOMM 60 61tmpdir=tmp.$$ 62origdir=.. 63 64XCOMM Remove directory if we fail 65trap "rm -rf $tmpdir; exit 1" 1 2 15 66trap "rm -rf $tmpdir; exit 0" 1 2 13 67 68mkdir $tmpdir 69 70XCOMM Security: if $tmpdir exists before mkdir exit immediately 71if [ $? -gt 0 -o ! -d $tmpdir ]; then 72 echo "$0: unable to create temporary directory $tmpdir" 1>&2 73 exit 1 74fi 75 76case "$fromlib" in 77 /?*) upfrom= ;; 78 *) upfrom=../ ;; 79esac 80 81case "$tolib" in 82 /?*) upto= ;; 83 *) upto=../ ;; 84esac 85 86 87XCOMM 88XCOMM In the temp directory, extract all of the object files and prefix 89XCOMM them with some symbol to avoid name clashes with the base library. 90XCOMM 91cd $tmpdir || exit 1 92ar x ${upfrom}$fromlib 93for i in *.o; do 94 mv $i ${objprefix}$i 95done 96 97 98XCOMM 99XCOMM Merge in the object modules, ranlib (if appropriate) and cleanup 100XCOMM 101ARCMD ${upto}$tolib *.o 102RANLIB ${upto}$tolib 103cd $origdir 104rm -rf $tmpdir 105 106