~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Modules/ld_so_aix

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
# Note: to use dynamic libraries like libtcl8.4.so and libtk8.4.so 
 
172
# you may need to replace the second CCOPT line above with the following:
 
173
# CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -brtl -bnortllib -lm -o $objfile"
 
174
 
 
175
CCARGS="$args"
 
176
 
 
177
# Export list generation.
 
178
#echo $makexp $expfile "$objfile" $objs
 
179
$makexp $expfile "$objfile" $objs
 
180
 
 
181
# Perform the link.
 
182
#echo $CC $CCOPT $CCARGS
 
183
$CC $CCOPT $CCARGS
 
184
 
 
185
# Delete the module's export list file.
 
186
# Comment this line if you need it.
 
187
rm -f $expfile