home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / X11R6 / bin / mergelib < prev    next >
Text File  |  1999-09-03  |  3KB  |  109 lines

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