]>
Commit | Line | Data |
---|---|---|
1 | # Universal Unix Makefile for Python extensions | |
2 | # ============================================= | |
3 | ||
4 | # Short Instructions | |
5 | # ------------------ | |
6 | ||
7 | # 1. Build and install Python (1.5 or newer). | |
8 | # 2. "make -f Makefile.pre.in boot" | |
9 | # 3. "make" | |
10 | # You should now have a shared library. | |
11 | ||
12 | # Long Instructions | |
13 | # ----------------- | |
14 | ||
15 | # Build *and install* the basic Python 1.5 distribution. See the | |
16 | # Python README for instructions. (This version of Makefile.pre.in | |
17 | # only withs with Python 1.5, alpha 3 or newer.) | |
18 | ||
19 | # Create a file Setup.in for your extension. This file follows the | |
20 | # format of the Modules/Setup.in file; see the instructions there. | |
21 | # For a simple module called "spam" on file "spammodule.c", it can | |
22 | # contain a single line: | |
23 | # spam spammodule.c | |
24 | # You can build as many modules as you want in the same directory -- | |
25 | # just have a separate line for each of them in the Setup.in file. | |
26 | ||
27 | # If you want to build your extension as a shared library, insert a | |
28 | # line containing just the string | |
29 | # *shared* | |
30 | # at the top of your Setup.in file. | |
31 | ||
32 | # Note that the build process copies Setup.in to Setup, and then works | |
33 | # with Setup. It doesn't overwrite Setup when Setup.in is changed, so | |
34 | # while you're in the process of debugging your Setup.in file, you may | |
35 | # want to edit Setup instead, and copy it back to Setup.in later. | |
36 | # (All this is done so you can distribute your extension easily and | |
37 | # someone else can select the modules they actually want to build by | |
38 | # commenting out lines in the Setup file, without editing the | |
39 | # original. Editing Setup is also used to specify nonstandard | |
40 | # locations for include or library files.) | |
41 | ||
42 | # Copy this file (Misc/Makefile.pre.in) to the directory containing | |
43 | # your extension. | |
44 | ||
45 | # Run "make -f Makefile.pre.in boot". This creates Makefile | |
46 | # (producing Makefile.pre and sedscript as intermediate files) and | |
47 | # config.c, incorporating the values for sys.prefix, sys.exec_prefix | |
48 | # and sys.version from the installed Python binary. For this to work, | |
49 | # the python binary must be on your path. If this fails, try | |
50 | # make -f Makefile.pre.in Makefile VERSION=1.5 installdir=<prefix> | |
51 | # where <prefix> is the prefix used to install Python for installdir | |
52 | # (and possibly similar for exec_installdir=<exec_prefix>). | |
53 | ||
54 | # Note: "make boot" implies "make clobber" -- it assumes that when you | |
55 | # bootstrap you may have changed platforms so it removes all previous | |
56 | # output files. | |
57 | ||
58 | # If you are building your extension as a shared library (your | |
59 | # Setup.in file starts with *shared*), run "make" or "make sharedmods" | |
60 | # to build the shared library files. If you are building a statically | |
61 | # linked Python binary (the only solution of your platform doesn't | |
62 | # support shared libraries, and sometimes handy if you want to | |
63 | # distribute or install the resulting Python binary), run "make | |
64 | # python". | |
65 | ||
66 | # Note: Each time you edit Makefile.pre.in or Setup, you must run | |
67 | # "make Makefile" before running "make". | |
68 | ||
69 | # Hint: if you want to use VPATH, you can start in an empty | |
70 | # subdirectory and say (e.g.): | |
71 | # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. | |
72 | ||
73 | ||
74 | # === Bootstrap variables (edited through "make boot") === | |
75 | ||
76 | # The prefix used by "make inclinstall libainstall" of core python | |
77 | installdir= /usr/local | |
78 | ||
79 | # The exec_prefix used by the same | |
80 | exec_installdir=$(installdir) | |
81 | ||
82 | # Source directory and VPATH in case you want to use VPATH. | |
83 | # (You will have to edit these two lines yourself -- there is no | |
84 | # automatic support as the Makefile is not generated by | |
85 | # config.status.) | |
86 | srcdir= . | |
87 | VPATH= . | |
88 | ||
89 | # === Variables that you may want to customize (rarely) === | |
90 | ||
91 | # (Static) build target | |
92 | TARGET= python | |
93 | ||
94 | # Installed python binary (used only by boot target) | |
95 | PYTHON= python | |
96 | ||
97 | # Add more -I and -D options here | |
98 | CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) | |
99 | ||
100 | # These two variables can be set in Setup to merge extensions. | |
101 | # See example[23]. | |
102 | BASELIB= | |
103 | BASESETUP= | |
104 | ||
105 | # === Variables set by makesetup === | |
106 | ||
107 | MODOBJS= _MODOBJS_ | |
108 | MODLIBS= _MODLIBS_ | |
109 | ||
110 | # === Definitions added by makesetup === | |
111 | ||
112 | # === Variables from configure (through sedscript) === | |
113 | ||
114 | VERSION= @VERSION@ | |
115 | CC= @CC@ | |
116 | LINKCC= @LINKCC@ | |
117 | SGI_ABI= @SGI_ABI@ | |
118 | OPT= @OPT@ | |
119 | LDFLAGS= @LDFLAGS@ | |
120 | LDLAST= @LDLAST@ | |
121 | DEFS= @DEFS@ | |
122 | LIBS= @LIBS@ | |
123 | LIBM= @LIBM@ | |
124 | LIBC= @LIBC@ | |
125 | RANLIB= @RANLIB@ | |
126 | MACHDEP= @MACHDEP@ | |
127 | SO= @SO@ | |
128 | LDSHARED= @LDSHARED@ | |
129 | CCSHARED= @CCSHARED@ | |
130 | LINKFORSHARED= @LINKFORSHARED@ | |
131 | #@SET_CCC@ | |
132 | ||
133 | # Install prefix for architecture-independent files | |
134 | prefix= /usr/local | |
135 | ||
136 | # Install prefix for architecture-dependent files | |
137 | exec_prefix= $(prefix) | |
138 | ||
139 | # === Fixed definitions === | |
140 | ||
141 | # Shell used by make (some versions default to the login shell, which is bad) | |
142 | SHELL= /bin/sh | |
143 | ||
144 | # Expanded directories | |
145 | BINDIR= $(exec_installdir)/bin | |
146 | LIBDIR= $(exec_prefix)/lib | |
147 | MANDIR= $(installdir)/man | |
148 | INCLUDEDIR= $(installdir)/include | |
149 | SCRIPTDIR= $(prefix)/lib | |
150 | ||
151 | # Detailed destination directories | |
152 | BINLIBDEST= $(LIBDIR)/python$(VERSION) | |
153 | LIBDEST= $(SCRIPTDIR)/python$(VERSION) | |
154 | INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) | |
155 | EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) | |
156 | LIBP= $(exec_installdir)/lib/python$(VERSION) | |
157 | DESTSHARED= $(BINLIBDEST)/site-packages | |
158 | ||
159 | LIBPL= $(LIBP)/config | |
160 | ||
161 | PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a | |
162 | ||
163 | MAKESETUP= $(LIBPL)/makesetup | |
164 | MAKEFILE= $(LIBPL)/Makefile | |
165 | CONFIGC= $(LIBPL)/config.c | |
166 | CONFIGCIN= $(LIBPL)/config.c.in | |
167 | SETUP= $(LIBPL)/Setup | |
168 | ||
169 | SYSLIBS= $(LIBM) $(LIBC) | |
170 | ||
171 | ADDOBJS= $(LIBPL)/python.o config.o | |
172 | ||
173 | # Portable install script (configure doesn't always guess right) | |
174 | INSTALL= $(LIBPL)/install-sh -c | |
175 | # Shared libraries must be installed with executable mode on some systems; | |
176 | # rather than figuring out exactly which, we always give them executable mode. | |
177 | # Also, making them read-only seems to be a good idea... | |
178 | INSTALL_SHARED= ${INSTALL} -m 555 | |
179 | ||
180 | #--------------------------------------------------- | |
181 | # Possibly change some definintions for C++ | |
182 | ifdef MY_LDSHARED | |
183 | LDSHARED=$(MY_LDSHARED) | |
184 | endif | |
185 | ifdef MY_LINKCC | |
186 | LINKCC=$(MY_LINKCC) | |
187 | endif | |
188 | ||
189 | ||
190 | # === Fixed rules === | |
191 | ||
192 | # Default target. This builds shared libraries only | |
193 | default: sharedmods | |
194 | ||
195 | # Build everything | |
196 | all: static sharedmods | |
197 | ||
198 | # Build shared libraries from our extension modules | |
199 | sharedmods: $(SHAREDMODS) | |
200 | ||
201 | # Build a static Python binary containing our extension modules | |
202 | static: $(TARGET) | |
203 | $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) | |
204 | $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ | |
205 | $(ADDOBJS) lib.a $(PYTHONLIBS) \ | |
206 | $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ | |
207 | -o $(TARGET) $(LDLAST) | |
208 | ||
209 | #------------------------------------------------------------------------ | |
210 | #------------------------------------------------------------------------ | |
211 | # This is a default version of the install target for wxPython. It just | |
212 | # redirects to wxInstall below... | |
213 | ||
214 | install: wxInstall | |
215 | ||
216 | #install: sharedmods | |
217 | # if test ! -d $(DESTSHARED) ; then \ | |
218 | # mkdir $(DESTSHARED) ; else true ; fi | |
219 | # -for i in X $(SHAREDMODS); do \ | |
220 | # if test $$i != X; \ | |
221 | # then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ | |
222 | # fi; \ | |
223 | # done | |
224 | ||
225 | ||
226 | # Build the library containing our extension modules | |
227 | lib.a: $(MODOBJS) | |
228 | -rm -f lib.a | |
229 | ar cr lib.a $(MODOBJS) | |
230 | -$(RANLIB) lib.a | |
231 | ||
232 | # This runs makesetup *twice* to use the BASESETUP definition from Setup | |
233 | config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) | |
234 | $(MAKESETUP) \ | |
235 | -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | |
236 | $(MAKE) -f Makefile do-it-again | |
237 | ||
238 | # Internal target to run makesetup for the second time | |
239 | do-it-again: | |
240 | $(MAKESETUP) \ | |
241 | -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | |
242 | ||
243 | # Make config.o from the config.c created by makesetup | |
244 | config.o: config.c | |
245 | $(CC) $(CFLAGS) -c config.c | |
246 | ||
247 | # Setup is copied from Setup.in *only* if it doesn't yet exist | |
248 | Setup: | |
249 | cp Setup.in Setup | |
250 | ||
251 | # Make the intermediate Makefile.pre from Makefile.pre.in | |
252 | Makefile.pre: Makefile.pre.in sedscript | |
253 | sed -f sedscript Makefile.pre.in >Makefile.pre | |
254 | ||
255 | # Shortcuts to make the sed arguments on one line | |
256 | P=prefix | |
257 | E=exec_prefix | |
258 | H=Generated automatically from Makefile.pre.in by sedscript. | |
259 | L=LINKFORSHARED | |
260 | ||
261 | # Make the sed script used to create Makefile.pre from Makefile.pre.in | |
262 | sedscript: $(MAKEFILE) | |
263 | sed -n \ | |
264 | -e '1s/.*/1i\\/p' \ | |
265 | -e '2s%.*%# $H%p' \ | |
266 | -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ | |
267 | -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ | |
268 | -e '/^CCC=/s/^CCC=[ ]*\(.*\)/s%#@SET_CCC[@]%CCC=\1%/p' \ | |
269 | -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ | |
270 | -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ | |
271 | -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ | |
272 | -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ | |
273 | -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ | |
274 | -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ | |
275 | -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ | |
276 | -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ | |
277 | -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ | |
278 | -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ | |
279 | -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ | |
280 | -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ | |
281 | -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ | |
282 | -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ | |
283 | -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ | |
284 | $(MAKEFILE) >sedscript | |
285 | echo "/^#@SET_CCC@/d" >>sedscript | |
286 | echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript | |
287 | echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript | |
288 | echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript | |
289 | echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript | |
290 | echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript | |
291 | echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript | |
292 | echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript | |
293 | ||
294 | # Bootstrap target | |
295 | boot: clobber | |
296 | VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ | |
297 | installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ | |
298 | exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ | |
299 | $(MAKE) -f Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ | |
300 | VERSION=$$VERSION \ | |
301 | installdir=$$installdir \ | |
302 | exec_installdir=$$exec_installdir \ | |
303 | Makefile | |
304 | ||
305 | # Handy target to remove intermediate files and backups | |
306 | clean: | |
307 | -rm -f *.o *~ | |
308 | ||
309 | # Handy target to remove everything that is easily regenerated | |
310 | clobber: clean | |
311 | -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript | |
312 | -rm -f *.so *.sl so_locations | |
313 | ||
314 | ||
315 | # Handy target to remove everything you don't want to distribute | |
316 | distclean: clobber | |
317 | -rm -f Makefile Setup | |
318 | ||
319 | ||
320 | ||
321 | ||
322 | #------------------------------------------------------------------------ | |
323 | #------------------------------------------------------------------------ | |
324 | # Custom rules and dependencies added for wxPython | |
325 | # | |
326 | ||
327 | ||
328 | SWIGFLAGS=-c++ -shadow -python -dnone -D__WXGTK__ | |
329 | ||
330 | ||
331 | PYMODULES = $(GENCODEDIR)/wxp.py $(GENCODEDIR)/events.py \ | |
332 | $(GENCODEDIR)/windows.py $(GENCODEDIR)/misc.py \ | |
333 | $(GENCODEDIR)/gdi.py $(GENCODEDIR)/mdi.py \ | |
334 | $(GENCODEDIR)/controls.py $(GENCODEDIR)/controls2.py \ | |
335 | $(GENCODEDIR)/windows2.py $(GENCODEDIR)/cmndlgs.py \ | |
336 | $(GENCODEDIR)/frames.py $(GENCODEDIR)/stattool.py \ | |
337 | __init__.py | |
338 | ||
339 | ||
340 | # Implicit rules to run SWIG | |
341 | $(GENCODEDIR)/%.cpp : %.i | |
342 | swig $(SWIGFLAGS) -c -o $@ $< | |
343 | ||
344 | $(GENCODEDIR)/%.py : %.i | |
345 | swig $(SWIGFLAGS) -c -o $@ $< | |
346 | ||
347 | ||
348 | # This one must leave out the -c flag so we define the whole rule | |
349 | $(GENCODEDIR)/wxp.cpp $(GENCODEDIR)/wxp.py : wxp.i my_typemaps.i _defs.i _extras.py | |
350 | swig $(SWIGFLAGS) -o $(GENCODEDIR)/wxp.cpp wxp.i | |
351 | ||
352 | ||
353 | # define some dependencies | |
354 | $(GENCODEDIR)/windows.cpp $(GENCODEDIR)/windows.py : windows.i my_typemaps.i _defs.i | |
355 | $(GENCODEDIR)/windows2.cpp $(GENCODEDIR)/windows2.py : windows2.i my_typemaps.i _defs.i | |
356 | $(GENCODEDIR)/events.cpp $(GENCODEDIR)/events.py : events.i my_typemaps.i _defs.i | |
357 | $(GENCODEDIR)/misc.cpp $(GENCODEDIR)/misc.py : misc.i my_typemaps.i _defs.i | |
358 | $(GENCODEDIR)/gdi.cpp $(GENCODEDIR)/gdi.py : gdi.i my_typemaps.i _defs.i | |
359 | $(GENCODEDIR)/mdi.cpp $(GENCODEDIR)/mdi.py : mdi.i my_typemaps.i _defs.i | |
360 | $(GENCODEDIR)/controls.cpp $(GENCODEDIR)/controls.py : controls.i my_typemaps.i _defs.i | |
361 | $(GENCODEDIR)/controls2.cpp $(GENCODEDIR)/controls2.py : controls2.i my_typemaps.i _defs.i | |
362 | $(GENCODEDIR)/cmndlgs.cpp $(GENCODEDIR)/cmndlgs.py : cmndlgs.i my_typemaps.i _defs.i | |
363 | $(GENCODEDIR)/frames.cpp $(GENCODEDIR)/frames.py : frames.i my_typemaps.i _defs.i | |
364 | $(GENCODEDIR)/stattool.cpp $(GENCODEDIR)/stattool.py : stattool.i my_typemaps.i _defs.i | |
365 | ||
366 | $(GENCODEDIR)/helpers.cpp: | |
367 | ln -s `pwd`/helpers.cpp $@ | |
368 | ||
369 | ||
370 | wxInstall : sharedmods $(PYMODULES) | |
371 | if test ! -d $(TARGETDIR) ; then \ | |
372 | mkdir $(TARGETDIR) ; else true ; fi | |
373 | if [ "$(SHAREDMODS)" != "" ]; then \ | |
374 | -chmod 755 $(SHAREDMODS); \ | |
375 | cp $(SHAREDMODS) $(TARGETDIR); fi | |
376 | -for i in $(PYMODULES); do \ | |
377 | cp $$i $(TARGETDIR); \ | |
378 | done | |
379 | python $(LIBDEST)/compileall.py -l $(TARGETDIR) | |
380 | python -O $(LIBDEST)/compileall.py -l $(TARGETDIR) | |
381 | ||
382 |