]>
Commit | Line | Data |
---|---|---|
7bf85405 RD |
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 | # === Fixed rules === | |
181 | ||
182 | # Default target. This builds shared libraries only | |
183 | default: sharedmods | |
184 | ||
185 | # Build everything | |
186 | all: static sharedmods | |
187 | ||
188 | # Build shared libraries from our extension modules | |
189 | sharedmods: $(SHAREDMODS) | |
190 | ||
191 | # Build a static Python binary containing our extension modules | |
192 | static: $(TARGET) | |
193 | $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) | |
194 | $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ | |
195 | $(ADDOBJS) lib.a $(PYTHONLIBS) \ | |
196 | $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ | |
197 | -o $(TARGET) $(LDLAST) | |
198 | ||
199 | #------------------------------------------------------------------------ | |
200 | #------------------------------------------------------------------------ | |
201 | # This is a defaul version of the install target for wxPython. It just | |
202 | # redirects to wxInstall below... | |
203 | ||
204 | install: wxInstall | |
205 | ||
206 | #install: sharedmods | |
207 | # if test ! -d $(DESTSHARED) ; then \ | |
208 | # mkdir $(DESTSHARED) ; else true ; fi | |
209 | # -for i in X $(SHAREDMODS); do \ | |
210 | # if test $$i != X; \ | |
211 | # then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ | |
212 | # fi; \ | |
213 | # done | |
214 | ||
215 | ||
216 | # Build the library containing our extension modules | |
217 | lib.a: $(MODOBJS) | |
218 | -rm -f lib.a | |
219 | ar cr lib.a $(MODOBJS) | |
220 | -$(RANLIB) lib.a | |
221 | ||
222 | # This runs makesetup *twice* to use the BASESETUP definition from Setup | |
223 | config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) | |
224 | $(MAKESETUP) \ | |
225 | -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | |
226 | $(MAKE) -f Makefile do-it-again | |
227 | ||
228 | # Internal target to run makesetup for the second time | |
229 | do-it-again: | |
230 | $(MAKESETUP) \ | |
231 | -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | |
232 | ||
233 | # Make config.o from the config.c created by makesetup | |
234 | config.o: config.c | |
235 | $(CC) $(CFLAGS) -c config.c | |
236 | ||
237 | # Setup is copied from Setup.in *only* if it doesn't yet exist | |
238 | Setup: | |
239 | cp $(srcdir)/Setup.in Setup | |
240 | ||
241 | # Make the intermediate Makefile.pre from Makefile.pre.in | |
242 | Makefile.pre: Makefile.pre.in sedscript | |
243 | sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre | |
244 | ||
245 | # Shortcuts to make the sed arguments on one line | |
246 | P=prefix | |
247 | E=exec_prefix | |
248 | H=Generated automatically from Makefile.pre.in by sedscript. | |
249 | L=LINKFORSHARED | |
250 | ||
251 | # Make the sed script used to create Makefile.pre from Makefile.pre.in | |
252 | sedscript: $(MAKEFILE) | |
253 | sed -n \ | |
254 | -e '1s/.*/1i\\/p' \ | |
255 | -e '2s%.*%# $H%p' \ | |
256 | -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ | |
257 | -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ | |
258 | -e '/^CCC=/s/^CCC=[ ]*\(.*\)/s%#@SET_CCC[@]%CCC=\1%/p' \ | |
259 | -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ | |
260 | -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ | |
261 | -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ | |
262 | -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ | |
263 | -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ | |
264 | -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ | |
265 | -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ | |
266 | -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ | |
267 | -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ | |
268 | -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ | |
269 | -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ | |
270 | -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ | |
271 | -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ | |
272 | -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ | |
273 | -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ | |
274 | $(MAKEFILE) >sedscript | |
275 | echo "/^#@SET_CCC@/d" >>sedscript | |
276 | echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript | |
277 | echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript | |
278 | echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript | |
279 | echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript | |
280 | echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript | |
281 | echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript | |
282 | echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript | |
283 | ||
284 | # Bootstrap target | |
285 | boot: clobber | |
286 | VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ | |
287 | installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ | |
288 | exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ | |
289 | $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ | |
290 | VERSION=$$VERSION \ | |
291 | installdir=$$installdir \ | |
292 | exec_installdir=$$exec_installdir \ | |
293 | Makefile | |
294 | ||
295 | # Handy target to remove intermediate files and backups | |
296 | clean: | |
297 | -rm -f *.o *~ | |
298 | ||
299 | # Handy target to remove everything that is easily regenerated | |
300 | clobber: clean | |
301 | -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript | |
302 | -rm -f *.so *.sl so_locations | |
303 | ||
304 | ||
305 | # Handy target to remove everything you don't want to distribute | |
306 | distclean: clobber | |
307 | -rm -f Makefile Setup | |
308 | ||
309 | ||
310 | ||
311 | ||
312 | #------------------------------------------------------------------------ | |
313 | #------------------------------------------------------------------------ | |
314 | # Custom rules and dependencies added for wxPython | |
315 | # | |
316 | ||
317 | SWIGFLAGS=-c++ -shadow -python -dnone | |
318 | ||
319 | ifndef FINAL | |
320 | PYEXT=pyc | |
321 | PYTHON=python | |
322 | else | |
323 | PYEXT=pyo | |
324 | PYTHON=python -O | |
325 | endif | |
326 | ||
327 | PYMODULES = wxp.py events.py windows.py misc.py \ | |
328 | gdi.py mdi.py controls.py controls2.py \ | |
329 | windows2.py cmndlgs.py __init__.py | |
330 | ||
331 | ||
332 | ||
333 | # Implicit rules to run SWIG | |
334 | %.cpp : %.i | |
335 | swig $(SWIGFLAGS) -c -o $*.cpp $*.i | |
336 | ||
337 | $(TARGETDIR)/%.py : %.py | |
338 | cp $< $@ | |
339 | ||
340 | $(TARGETDIR)/%.$(PYEXT) : %.py | |
341 | $(PYTHON) -c "import py_compile; py_compile.compile('$<', '$@')" | |
342 | ||
343 | %.py : %.i | |
344 | swig $(SWIGFLAGS) -c -o $*.cpp $*.i | |
345 | ||
346 | ||
347 | # This one must leave out the -c flag so we define the whole rule | |
348 | wxp.cpp wxp.py : wxp.i my_typemaps.i _defs.i _extras.py | |
349 | swig $(SWIGFLAGS) -o wxp.cpp wxp.i | |
350 | ||
351 | ||
352 | # define some dependencies | |
353 | windows.cpp windows.py : windows.i my_typemaps.i _defs.i | |
354 | windows2.cpp windows2.py : windows2.i my_typemaps.i _defs.i | |
355 | events.cpp events.py : events.i my_typemaps.i _defs.i | |
356 | misc.cpp misc.py : misc.i my_typemaps.i _defs.i | |
357 | gdi.cpp gdi.py : gdi.i my_typemaps.i _defs.i | |
358 | mdi.cpp mdi.py : mdi.i my_typemaps.i _defs.i | |
359 | controls.cpp controls.py : controls.i my_typemaps.i _defs.i | |
360 | controls2.cpp controls2.py : controls2.i my_typemaps.i _defs.i | |
361 | cmndlgs.cpp cmndlgs.py : cmndlgs.i my_typemaps.i _defs.i | |
362 | ||
363 | ||
364 | ||
365 | wxInstall : sharedmods $(PYMODULES) | |
366 | if test ! -d $(TARGETDIR) ; then \ | |
367 | mkdir $(TARGETDIR) ; else true ; fi | |
368 | -for i in $(SHAREDMODS); do \ | |
369 | $(INSTALL_SHARED) $$i $(TARGETDIR)/$$i; \ | |
370 | done | |
371 | -for i in $(PYMODULES); do \ | |
372 | $(INSTALL) $$i $(TARGETDIR)/$$i; \ | |
373 | done | |
374 | python $(LIBDEST)/compileall.py -l $(TARGETDIR) | |
375 | python -O $(LIBDEST)/compileall.py -l $(TARGETDIR) | |
376 | ||
377 |