home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J / os42j.iso / usr / bin / kl_ld < prev    next >
Text File  |  1993-07-20  |  3KB  |  114 lines

  1. #!/bin/sh
  2. #
  3. # Create a relocatable file that can be loaded with the kern_loader.
  4. # This program adds sections to the specified relocatable that the
  5. # kern_loader can access.
  6. #
  7.  
  8. USAGE="\
  9. usage: kl_ld -n <name> -l <load commands file> [-u <unload commands file>]
  10.   -i <instance variable> [-d <loadable_file>] -o <output file> <input_file>"
  11.  
  12. KS_TYPES=/NextDeveloper/Headers/kernserv/kern_server_types.h
  13. version=`awk '/#define[     ]+KS_VERSION/ {print $3}' < $KS_TYPES`
  14. if [ "$version" = "" ]
  15. then
  16.     version=1
  17. fi
  18.  
  19. until [ $# -eq 0 ]
  20. do
  21.     case $1 in
  22.     -n ) KL_name=$2; shift; shift;;
  23.     -l ) if (echo $1 | egrep '\-l.')
  24.          then
  25.         # Maybe this should be 
  26.         #   KL_input = "$KL_input $1";
  27.              KL_input="#Kl_input $1";
  28.          else
  29.         KL_lc=$2; shift;
  30.          fi
  31.          shift;;
  32.     -u ) KL_uc=$2; shift; shift;;
  33.     -i ) KL_in=$2; shift; shift;;
  34.     -d ) KL_lo=$2; shift; shift;;
  35.     -o) KL_output=$2; shift; shift;;
  36.     -arch) archlist="$archlist $2"; shift; shift;;
  37.     * ) KL_input="$KL_input $1"; shift;;
  38.     esac
  39. done
  40.  
  41. if [ "$KL_name" = "" -o "$KL_lc" = "" -o "$KL_in" = "" -o "$KL_output" = "" \
  42.     -o "$KL_input" = "" ]; then
  43.   echo "$USAGE"
  44.   exit 1
  45. fi
  46.  
  47. trap "rm /tmp/*$$" 0 1 2 15
  48. LS="\"Loaded Server\""
  49.  
  50. KL_name_name="\"Server Name\""
  51. KL_name_file=/tmp/kl_name$$
  52. echo -n $KL_name > $KL_name_file
  53. KL_name_sect="-sectalign $LS $KL_name_name 1 \
  54.     -sectcreate $LS $KL_name_name $KL_name_file"
  55.  
  56. KL_lc_name="\"Load Commands\""
  57. KL_lc_sect="-sectalign $LS $KL_lc_name 1 -sectcreate $LS $KL_lc_name $KL_lc"
  58.  
  59. KL_in_name="\"Instance Var\""
  60. KL_in_file=/tmp/kl_instance$$
  61. echo -n $KL_in > $KL_in_file
  62. KL_in_sect="-sectalign $LS $KL_in_name 1 \
  63.     -sectcreate $LS $KL_in_name $KL_in_file"
  64.  
  65. KL_vers_name="\"Server Version\""
  66. KL_vers_file=/tmp/kl_version$$
  67. echo -n $version > $KL_vers_file
  68. KL_vers_sect="-sectalign $LS $KL_vers_name 1 \
  69.     -sectcreate $LS $KL_vers_name $KL_vers_file"
  70.  
  71. if [ "$KL_lo" = "" ]; then
  72.   KL_lo_sect=""
  73. else
  74.   KL_lo_name="\"Loadable Name\""
  75.   KL_lo_file=/tmp/kl_lo_name$$
  76.   echo -n $KL_lo > $KL_lo_file
  77.   KL_lo_sect="-sectalign $LS $KL_lo_name 1 \
  78.     -sectcreate $LS $KL_lo_name $KL_lo_file"
  79. fi
  80.  
  81. if [ "$KL_uc" = "" ]; then
  82.   KL_uc_sect=""
  83. else
  84.   KL_uc_name="\"Unload Commands\""
  85.   KL_uc_sect="-sectalign $LS $KL_uc_name 1 -sectcreate $LS $KL_uc_name $KL_uc"
  86. fi
  87.  
  88. # echo ld -r -preload $KL_input -o $KL_output $KL_name_sect $KL_lc_sect \
  89. #     $KL_uc_sect $KL_in_sect $KL_lo_sect $KL_vers_sect | sh
  90.  
  91. kld () {
  92.   echo ld $@ -r -preload $KL_input $KL_name_sect $KL_lc_sect $KL_uc_sect \
  93.     $KL_in_sect $KL_lo_sect $KL_vers_sect | sh
  94. }
  95.  
  96. if [ "$archlist" = "" ]; then
  97.   kld -o $KL_output
  98. else
  99.   set $archlist
  100.   if [ $# -eq 1 ]; then
  101.     kld -o $KL_output -arch $1
  102.   else
  103.     for arch in $@; do
  104.       outfile="${KL_output}-$arch"
  105.       kld -o $outfile -arch $arch
  106.       lipolist="$lipolist $outfile"
  107.     done
  108.     lipo -create $lipolist -output ${KL_output}
  109.     rm -f $lipolist
  110.   fi
  111. fi
  112.  
  113. exit 0
  114.