]>
Commit | Line | Data |
---|---|---|
c8c5323c RR |
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 | ||
8bf5d46e | 327 | WXP_VERSION=2.1b2 |
c8c5323c RR |
328 | |
329 | SWIGFLAGS=-c++ -shadow -python -dnone -D__WXGTK__ $(SEPARATE) | |
330 | ||
331 | ||
d24a34bb RD |
332 | PYMODULES = $(GENCODEDIR)/wx.py $(GENCODEDIR)/events.py \ |
333 | $(GENCODEDIR)/windows.py $(GENCODEDIR)/misc.py \ | |
334 | $(GENCODEDIR)/gdi.py $(GENCODEDIR)/mdi.py \ | |
335 | $(GENCODEDIR)/controls.py $(GENCODEDIR)/controls2.py \ | |
336 | $(GENCODEDIR)/windows2.py $(GENCODEDIR)/cmndlgs.py \ | |
337 | $(GENCODEDIR)/stattool.py $(GENCODEDIR)/frames.py \ | |
338 | $(GENCODEDIR)/windows3.py __init__.py \ | |
339 | $(GENCODEDIR)/utils.py $(GENCODEDIR)/image.py \ | |
340 | $(GENCODEDIR)/printfw.py $(GENCODEDIR)/misc2.py \ | |
341 | $(GENCODEDIR)/glcanvas.py | |
c8c5323c RR |
342 | |
343 | ||
344 | # Implicit rules to run SWIG | |
345 | $(GENCODEDIR)/%.cpp : %.i | |
346 | swig $(SWIGFLAGS) -c -o $@ $< | |
347 | ||
348 | $(GENCODEDIR)/%.py : %.i | |
349 | swig $(SWIGFLAGS) -c -o $@ $< | |
350 | ||
351 | ||
352 | # This one must leave out the -c flag so we define the whole rule | |
353 | $(GENCODEDIR)/wx.cpp $(GENCODEDIR)/wx.py : wx.i my_typemaps.i _defs.i _extras.py | |
354 | swig $(SWIGFLAGS) -o $(GENCODEDIR)/wx.cpp wx.i | |
355 | ||
356 | ||
357 | # define some dependencies | |
358 | $(GENCODEDIR)/windows.cpp $(GENCODEDIR)/windows.py : windows.i my_typemaps.i _defs.i | |
359 | $(GENCODEDIR)/windows2.cpp $(GENCODEDIR)/windows2.py : windows2.i my_typemaps.i _defs.i | |
360 | $(GENCODEDIR)/windows3.cpp $(GENCODEDIR)/windows3.py : windows3.i my_typemaps.i _defs.i | |
361 | $(GENCODEDIR)/events.cpp $(GENCODEDIR)/events.py : events.i my_typemaps.i _defs.i | |
362 | $(GENCODEDIR)/misc.cpp $(GENCODEDIR)/misc.py : misc.i my_typemaps.i _defs.i | |
bb0054cd | 363 | $(GENCODEDIR)/misc2.cpp $(GENCODEDIR)/misc2.py : misc2.i my_typemaps.i _defs.i |
c8c5323c RR |
364 | $(GENCODEDIR)/gdi.cpp $(GENCODEDIR)/gdi.py : gdi.i my_typemaps.i _defs.i |
365 | $(GENCODEDIR)/mdi.cpp $(GENCODEDIR)/mdi.py : mdi.i my_typemaps.i _defs.i | |
366 | $(GENCODEDIR)/controls.cpp $(GENCODEDIR)/controls.py : controls.i my_typemaps.i _defs.i | |
367 | $(GENCODEDIR)/controls2.cpp $(GENCODEDIR)/controls2.py : controls2.i my_typemaps.i _defs.i | |
368 | $(GENCODEDIR)/cmndlgs.cpp $(GENCODEDIR)/cmndlgs.py : cmndlgs.i my_typemaps.i _defs.i | |
369 | $(GENCODEDIR)/frames.cpp $(GENCODEDIR)/frames.py : frames.i my_typemaps.i _defs.i | |
370 | $(GENCODEDIR)/stattool.cpp $(GENCODEDIR)/stattool.py : stattool.i my_typemaps.i _defs.i | |
371 | $(GENCODEDIR)/image.cpp $(GENCODEDIR)/image.py : image.i my_typemaps.i _defs.i | |
372 | $(GENCODEDIR)/utils.cpp $(GENCODEDIR)/utils.py : utils.i my_typemaps.i _defs.i | |
d24a34bb | 373 | $(GENCODEDIR)/printfw.cpp $(GENCODEDIR)/printfw.py : printfw.i my_typemaps.i _defs.i |
c8c5323c RR |
374 | $(GENCODEDIR)/glcanvas.cpp $(GENCODEDIR)/glcanvas.py : glcanvas.i my_typemaps.i _defs.i |
375 | ||
376 | $(GENCODEDIR)/helpers.cpp: | |
377 | ln -s `pwd`/helpers.cpp $@ | |
378 | ||
379 | $(GENCODEDIR)/_glcanvas.cpp: | |
380 | -cp $(WXWIN)/utils/glcanvas/$(GENCODEDIR)/glcanvas.cpp $@ | |
381 | -cp $(WXWIN)/utils/glcanvas/$(GENCODEDIR)/glcanvas.h ./glcanvas.h | |
382 | ||
383 | ||
384 | wxInstall : sharedmods $(PYMODULES) | |
385 | if test ! -d $(TARGETDIR) ; then \ | |
386 | mkdir $(TARGETDIR) ; else true ; fi | |
387 | if [ "$(SHAREDMODS)" != "" ]; then \ | |
388 | chmod 755 $(SHAREDMODS); \ | |
389 | cp $(SHAREDMODS) $(TARGETDIR); fi | |
390 | -for i in $(PYMODULES); do \ | |
391 | cp $$i $(TARGETDIR); \ | |
392 | done | |
2d9f5597 RD |
393 | if [ "$(TARGETDIR)" != ".." ]; then \ |
394 | mkdir $(TARGETDIR)/lib; \ | |
395 | mkdir $(TARGETDIR)/lib/sizers; \ | |
396 | mkdir $(TARGETDIR)/demo; \ | |
397 | mkdir $(TARGETDIR)/demo/bitmaps; \ | |
398 | cp ../lib/*.py $(TARGETDIR)/lib; \ | |
399 | cp ../lib/sizers/*.py $(TARGETDIR)/lib/sizers; \ | |
400 | cp ../demo/*.py $(TARGETDIR)/demo; \ | |
401 | cp ../lib/*.txt $(TARGETDIR)/lib; \ | |
402 | cp ../lib/sizers/*.txt $(TARGETDIR)/lib/sizers; \ | |
403 | cp ../demo/*.txt $(TARGETDIR)/demo; \ | |
404 | cp ../demo/bitmaps/[a-z]* $(TARGETDIR)/demo/bitmaps; \ | |
c8c5323c RR |
405 | fi |
406 | if [ "$(TARGETDIR)" != ".." ]; then \ | |
407 | python $(LIBDEST)/compileall.py $(TARGETDIR); \ | |
408 | python -O $(LIBDEST)/compileall.py $(TARGETDIR); \ | |
409 | else \ | |
410 | python $(LIBDEST)/compileall.py -l $(TARGETDIR); \ | |
411 | python -O $(LIBDEST)/compileall.py -l $(TARGETDIR);\ | |
412 | fi | |
413 | ||
414 | ||
415 | ||
416 | ||
417 | lib : libwxPython.a | |
418 | ||
419 | libwxPython.a : lib.a | |
420 | cp $< $@ | |
421 | ||
422 | dist: tgz rpm | |
423 | ||
424 | tgz: | |
425 | cd ../..; wxPython/distrib/maketgz $(WXP_VERSION) | |
426 | ||
427 | rpm: | |
428 | cd ../distrib; ./makerpm $(WXP_VERSION) | |
429 |