home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / pippy-0.6beta-src.tar.gz / pippy-0.6beta-src.tar / pippy-0.6beta-src / src / Modules / ld_so_aix < prev    next >
Text File  |  2000-12-21  |  6KB  |  184 lines

  1. #!/bin/sh
  2. #
  3. #   ========================================================================
  4. #   FILE:           ld_so_aix
  5. #   TYPE:           executable, uses makexp_aix
  6. #   SYSTEM:         AIX
  7. #
  8. #   DESCRIPTION:    Creates a shareable .o from a set of pre-compiled 
  9. #                   (unshared) .o files
  10. #
  11. #   USAGE:          ld_so_aix [CC] [arguments]
  12. #
  13. #   ARGUMENTS:      Same as for "ld". The following arguments are processed
  14. #                   or supplied by this script (those marked with an asterisk
  15. #                   can be overriden from command line):
  16. #
  17. #                       Argument                     Default value
  18. #                   (*) -o [OutputFileName]          -o shr.o
  19. #                   (*) -e [EntryPointLabel]         -e init[OutputBaseName]
  20. #                   (*) -bE:[ExportFile]             -bE:[OutputBaseName].exp
  21. #                   (*) -bI:[ImportFile]             -bI:./python.exp
  22. #                       -bM:[ModuleType]             -bM:SRE
  23. #                       -bhalt:[Number]              -bhalt:4
  24. #                       -T[Number]                   -T512
  25. #                       -H[Number]                   -H512
  26. #                       -lm
  27. #
  28. #                   The compiler specific ("-lc" or "-lc_r", "-lpthreads",...)
  29. #                   arguments will be automatically passed to "ld" according
  30. #                   to the CC command provided as a first argument to this
  31. #                   script. Usually, the same CC command was used to produce
  32. #                   the pre-compiled .o file(s).
  33. #
  34. #   NOTES:          1.  Since "ld_so_aix" was originally written for building
  35. #                       shared modules for the Python interpreter, the -e and
  36. #                       -bI default values match Python's conventions. In
  37. #                       Python, the entry point for a shared module is based
  38. #                       on the module's name (e.g., the "mathmodule" will
  39. #                       expect an  entry point of "initmath").
  40. #                   2.  The script accepts multiple .o or .a input files and
  41. #                       creates a single (shared) output file. The export list
  42. #                       that is created is based on the output file's basename
  43. #                       with the suffix ".exp".
  44. #                   3.  The resulting shared object file is left in the
  45. #                       current directory.
  46. #                   4.  Uncommenting the "echo" lines gives detailed output
  47. #                       about the commands executed in the script.
  48. #
  49. #                       
  50. #   HISTORY:        Oct-1996    -- Support added for multiple .o files --
  51. #                               -- and optional arguments processing.  --
  52. #                   Chris Myers (myers@tc.cornell.edu), Keith Kwok
  53. #                   (kkwok@tc.cornell.edu) and Vladimir Marangozov
  54. #
  55. #                   Aug-6-1996  -- Take care of the compiler specific  --
  56. #                               -- args by leaving CC to invoke "ld".  --
  57. #                   Vladimir Marangozov
  58. #
  59. #                   Jul-1-1996  -- Make sure to use /usr/ccs/bin/ld    --
  60. #                               -- Use makexp_aix for the export list. --
  61. #                   Vladimir Marangozov     (Vladimir.Marangozov@imag.fr)
  62. #
  63. #                   Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96
  64. #   ========================================================================
  65. #
  66.  
  67. usage="Usage: ld_so_aix [CC command] [ld arguments]"
  68. if test ! -n "$*"; then
  69.   echo $usage; exit 2
  70. fi
  71.  
  72. makexp=`dirname $0`/makexp_aix
  73.  
  74. # Check for existence of compiler.
  75. CC=$1; shift
  76. whichcc=`which $CC`
  77.  
  78. if test ! -x "$whichcc"; then
  79.   echo "ld_so_aix: Compiler '$CC' not found; exiting."
  80.   exit 2
  81. fi
  82.  
  83. if test ! -n "$*"; then
  84.   echo $usage; exit 2
  85. fi
  86.  
  87. # Default import file for Python
  88. # Can be overriden by providing a -bI: argument.
  89. impfile="./python.exp"
  90.  
  91. # Parse arguments
  92. while test -n "$1"
  93. do
  94.   case "$1" in
  95.     -e | -Wl,-e)
  96.         if test -z "$2"; then
  97.       echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2
  98.     else
  99.       shift; entry=$1
  100.     fi
  101.     ;;
  102.     -e* | -Wl,-e*)
  103.     entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"`
  104.     ;;
  105.     -o)
  106.     if test -z "$2"; then
  107.       echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2
  108.     else
  109.       shift; objfile=$1
  110.     fi
  111.     ;;
  112.     -o*)
  113.     objfile=`echo $1 | sed "s/-o//"`
  114.     ;;
  115.     -bI:* | -Wl,-bI:*)
  116.     impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"`
  117.     ;;
  118.     -bE:* | -Wl,-bE:*)
  119.     expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"`
  120.     ;;
  121.     *.o | *.a)
  122.     objs="$objs $1"
  123.     args="$args $1"
  124.     ;;
  125.     -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm)
  126.     ;;
  127.     *)
  128.         args="$args $1"
  129.     ;;
  130.   esac
  131.   shift
  132. done
  133.  
  134.  
  135. if test -z "$objs"; then
  136.   echo "ld_so_aix: No input files; exiting."
  137.   exit 2
  138. elif test ! -r "$impfile"; then
  139.   echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting."
  140.   exit 2
  141. fi
  142.  
  143. # If -o wasn't specified, assume "-o shr.o"
  144. if test -z "$objfile"; then
  145.   objfile=shr.o
  146. fi
  147.  
  148. filename=`basename $objfile | sed "s/\.[^.]*$//"`
  149.  
  150. # If -bE: wasn't specified, assume "-bE:$filename.exp"
  151. if test -z "$expfile"; then
  152.   expfile="$filename.exp"
  153. fi
  154.  
  155. # Default entry symbol for Python modules = init[modulename]
  156. # Can be overriden by providing a -e argument.
  157. if test -z "$entry"; then
  158.   entry=init`echo $filename | sed "s/module.*//"`
  159. fi
  160.  
  161. #echo "ld_so_aix: Debug info section"
  162. #echo "  -> output file : $objfile"
  163. #echo "  -> import file : $impfile"
  164. #echo "  -> export file : $expfile"
  165. #echo "  -> entry point : $entry"
  166. #echo "  -> object files: $objs"
  167. #echo "  -> CC arguments: $args"
  168.  
  169. CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4"
  170. CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile"
  171. CCARGS="$args"
  172.  
  173. # Export list generation.
  174. #echo $makexp $expfile "$objfile" $objs
  175. $makexp $expfile "$objfile" $objs
  176.  
  177. # Perform the link.
  178. #echo $CC $CCOPT $CCARGS
  179. $CC $CCOPT $CCARGS
  180.  
  181. # Delete the module's export list file.
  182. # Comment this line if you need it.
  183. rm -f $expfile
  184.