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