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

« back to all changes in this revision

Viewing changes to PC/os2emx/Makefile

  • 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
#####################==================----------------
 
2
#
 
3
# Top-Level Makefile for Building Python 2.6 for OS/2 using GCC/EMX
 
4
# Originally written by Andrew Zabolotny, <bit@eltech.ru> for Python 1.5.2
 
5
# Modified by Andrew MacIntyre, <andymac@pcug.org.au> for Python 2.6
 
6
#
 
7
# This makefile was developed for use with [P]GCC/EMX compiler any
 
8
# version and GNU Make.
 
9
#
 
10
# The output of the build is a largish Python26.DLL containing the
 
11
# essential modules of Python and a small Python.exe program to start
 
12
# the interpreter. When embedding Python within another program, only
 
13
# Python26.DLL is needed. We also build python_s.a static library (which
 
14
# can be converted into OMF (.lib) format using emxomf tool) and both
 
15
# python.a and python.lib import libraries.  Then the optional 
 
16
# extension modules, which are OS/2 DLLs renamed with a PYD file extension.
 
17
#
 
18
# Recommended build order:
 
19
#   make depend         (if you have makedep)
 
20
#   make all
 
21
#   make lx             (if you have lxlite)
 
22
#   make test           (optional)
 
23
#
 
24
#####################==================----------------
 
25
 
 
26
# === Compilation mode: debug or release ===
 
27
MODE=           optimize
 
28
#MODE=          debug
 
29
# === Assert() enabled ===
 
30
ASSERTIONS=no
 
31
#ASSERTIONS=yes
 
32
# === Hard-wire installation location ===
 
33
FIXED_PYHOME=no
 
34
#FIXED_PYHOME=yes
 
35
 
 
36
# === Optional modules ===
 
37
# Do you have the InfoZip compression library installed?
 
38
HAVE_ZLIB=      no
 
39
# Do you have the Ultra Fast Crypt (UFC) library installed?
 
40
HAVE_UFC=       no
 
41
# Do you have the Tcl/Tk library installed?
 
42
HAVE_TCLTK=     no
 
43
# Do you have the GNU readline library installed?
 
44
# NOTE: I'm using a modified version of Kai Uwe Rommel's port that 
 
45
#       - is compiled with multithreading enabled
 
46
#       - is linked statically
 
47
#       I have had no success trying to use a DLL version, even when
 
48
#       compiled with multithreading enabled.
 
49
HAVE_GREADLINE= no
 
50
# Do you have the BSD DB library (v1.85) as included in the EMXBSD package?
 
51
# NOTE: this library needs to be recompiled with a structure member
 
52
#       renamed to avoid problems with the multithreaded errno support
 
53
#       (there is a structure member called errno, used for shadowing the
 
54
#       real errno, which conflicts with the errno redefinition of -Zmt)
 
55
HAVE_BSDDB=     no
 
56
# Do you have the ncurses library installed? EMX's BSD curses aren't enough! 
 
57
HAVE_NCURSES=   no
 
58
# Do you have the GDBM library installed?
 
59
HAVE_GDBM=      no
 
60
# Do you have the BZ2 compression library installed?
 
61
HAVE_BZ2=       no
 
62
# Do you have the OpenSSL libraries installed
 
63
HAVE_OPENSSL=   no
 
64
 
 
65
# === install locations ===
 
66
# default value of PYTHONHOME
 
67
LIB_DIR=C:/Python26
 
68
# default is to have everything in or under PYTHONHOME
 
69
EXE_DIR=$(LIB_DIR)
 
70
DLL_DIR=$(EXE_DIR)
 
71
 
 
72
 
 
73
# === The Tools ===
 
74
CC=             gcc
 
75
CFLAGS=         -Zmt -Wall $(INCLUDE)
 
76
CFLAGS.LIB=     $(CFLAGS)
 
77
LD=             gcc
 
78
LDFLAGS=        -Zmt -Zcrtdll -L. -lgcc
 
79
LDFLAGS.EXE=    $(LDFLAGS)
 
80
LDFLAGS.DLL=    $(LDFLAGS) -Zdll
 
81
LDFLAGS.A=      $(LDFLAGS) $(LIBS)
 
82
ARFLAGS=        crs
 
83
IMPLIB=         emximp
 
84
EXPLIB=         emxexp
 
85
EXEOPT=         emxbind
 
86
PY_DEF=         -DPy_BUILD_CORE
 
87
 
 
88
 
 
89
# adjust C compiler settings based on build options
 
90
ifeq ($(MODE),debug)
 
91
  CFLAGS+=      -g -O
 
92
  LDFLAGS+=     -g
 
93
else
 
94
  CFLAGS+=      -s -O3 -fomit-frame-pointer -mprobe
 
95
  LDFLAGS+=     -s
 
96
endif
 
97
CFLAGS+=        $(PY_DEF)
 
98
ifeq ($(ASSERTIONS),no)
 
99
  CFLAGS+=      -DNDEBUG
 
100
endif
 
101
ifeq ($(FIXED_PYHOME),yes)
 
102
  CFLAGS+=      -DPREFIX=$(DQUOTE)$(LIB_DIR)$(DQUOTE)
 
103
endif
 
104
 
 
105
# We're using the OMF format since EMX's ld has a obscure bug
 
106
# because of which it sometimes fails to build relocations
 
107
# in .data segment that point to another .data locations
 
108
# (except for the final linking if the .EXEs)
 
109
OMF=            yes
 
110
 
 
111
# if fork() support is required, the main executable must be linked with ld
 
112
EXEOMF=         no
 
113
 
 
114
# File extensions
 
115
MODULE.EXT=     .pyd
 
116
MODLIB.EXT=     .dll
 
117
ifeq ($(OMF),yes)
 
118
  O=            .obj
 
119
  A=            .lib
 
120
  AR=           emxomfar
 
121
  CFLAGS+=      -Zomf
 
122
  LDFLAGS+=     -Zomf
 
123
  ifeq ($(MODE),debug)
 
124
    ARFLAGS=    -p64 crs
 
125
  else
 
126
    ARFLAGS=    -p32 crs
 
127
  endif
 
128
else
 
129
  O=            .o
 
130
  A=            .a
 
131
  AR=           ar
 
132
endif
 
133
 
 
134
 
 
135
# === Build time resource settings ===
 
136
 
 
137
# EMX's default number of file handles is 40, which is sometimes insufficient
 
138
# (the tempfile regression test tries to create 100 temporary files)
 
139
NFILES=250
 
140
 
 
141
# The default stack size for child threads is 64k bytes, which is
 
142
# insufficient for some applications which do a lot of work in threads
 
143
# (such as Zope, especially in conjunction with Plone).
 
144
# Note that this setting is distinct from the stack size for the main
 
145
# thread, which is set via the %.def rule below.
 
146
# EMX documents that the thread stack size should be at least 32768 bytes;
 
147
# for Zope/Plone at least 128k bytes is recommended.
 
148
# Uncomment & adjust the next line to override the default stack size:
 
149
#CFLAGS+=       -DTHREAD_STACK_SIZE=0x20000
 
150
 
 
151
 
 
152
# === The environment ===
 
153
 
 
154
# Source file paths
 
155
SRCPATH=.;../../Python;../../Parser;../../Objects;../../Include;../../Modules
 
156
# Python contains the central core, containing the builtins and interpreter.
 
157
# Parser contains Python's Internal Parser and
 
158
#   Standalone Parser Generator Program (Shares Some of Python's Modules)
 
159
# Objects contains Python Object Types
 
160
# Modules contains extension Modules (Built-In or as Separate DLLs)
 
161
 
 
162
# Unix shells tend to use "$" as delimiter for variable names.
 
163
# Test for this behaviour and set $(BUCK) variable correspondigly ...
 
164
__TMP__:=$(shell echo $$$$)
 
165
ifeq ($(__TMP__),$$$$)
 
166
  BUCK=         $$
 
167
  BRO=          (
 
168
  BRC=          )
 
169
else
 
170
  BUCK=         \$$
 
171
  BRO=          \(
 
172
  BRC=          \)
 
173
endif
 
174
# Compute the "double quote" variable
 
175
__TMP__:=$(shell echo "")
 
176
ifeq ($(__TMP__),"")
 
177
  DQUOTE=       "
 
178
else
 
179
  DQUOTE=       \"
 
180
endif
 
181
 
 
182
# Include paths
 
183
#INCLUDE=       -I$(subst ;, -I, $(SRCPATH))
 
184
INCLUDE=        -I. -I../../Include
 
185
 
 
186
# Path to search for .c files
 
187
vpath %.c .;..;$(SRCPATH)
 
188
 
 
189
# Top of the package tree
 
190
TOP=            ../../
 
191
 
 
192
# Directory for output files
 
193
OUTBASE=        out/
 
194
OUT=            $(OUTBASE)$(MODE)/
 
195
 
 
196
# Additional libraries
 
197
LIBS=           -lsocket
 
198
 
 
199
# Utility macro: replacement for $^
 
200
^^=             $(filter-out %$A,$^)
 
201
# Use $(L^) to link with all libraries specified as dependencies
 
202
L^=             $(addprefix -l,$(basename $(notdir $(filter %$A,$+))))
 
203
 
 
204
# Build rules
 
205
$(OUT)%$O: %.c
 
206
        $(CC) $(CFLAGS.LIB) -c $< -o $@
 
207
 
 
208
%.a:
 
209
        $(LD) $(LDFLAGS.A) -o $@ $(^^) $(L^)
 
210
 
 
211
%.dll:
 
212
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS)
 
213
 
 
214
%.pyd: $(OUT)%module$O $(OUT)%_m.def
 
215
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(PYTHON.IMPLIB) $(LIBS)
 
216
 
 
217
%.exe:
 
218
        $(LD) $(LDFLAGS.EXE) -o $@ $(^^) $(L^)
 
219
 
 
220
%_m.def:
 
221
        @echo Creating .DEF file: $@
 
222
        @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@
 
223
        ifeq ($(DESCRIPTION.$(notdir $*)$(MODULE.EXT)),)
 
224
          @echo DESCRIPTION $(DQUOTE)Python standard module $(notdir $*)$(DQUOTE) >>$@
 
225
        else
 
226
          @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*)$(MODULE.EXT))$(DQUOTE) >>$@
 
227
        endif
 
228
        @echo DATA MULTIPLE NONSHARED >>$@
 
229
        @echo EXPORTS >>$@
 
230
        @echo   init$(notdir $*) >>$@
 
231
 
 
232
%.def:
 
233
        @echo Creating .DEF file: $@
 
234
        @echo NAME $(notdir $*) $(EXETYPE.$(notdir $*).exe) >$@
 
235
        @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*).exe)$(DQUOTE) >>$@
 
236
        @echo STACKSIZE 2097152 >>$@
 
237
 
 
238
# Output file names
 
239
PYTHON_VER=     2.6
 
240
PYTHON_LIB=     python26
 
241
PYTHON.LIB=     $(PYTHON_LIB)_s$A
 
242
PYTHON.IMPLIB=  $(PYTHON_LIB)$A
 
243
ifeq ($(EXEOMF),yes)
 
244
  PYTHON.EXEIMP=        $(PYTHON.IMPLIB)
 
245
  LDMODE.EXE=           -Zomf
 
246
else
 
247
  PYTHON.EXEIMP=        $(PYTHON_LIB).a
 
248
  LDMODE.EXE = 
 
249
endif
 
250
PYTHON.DLL=     $(PYTHON_LIB).dll
 
251
PYTHON.DEF=     $(PYTHON_LIB).def
 
252
PYTHON.EXE=     python.exe
 
253
PYTHONPM.EXE=   pythonpm.exe
 
254
PGEN.EXE=       pgen.exe
 
255
LIBRARY=        $(PYTHON.LIB)
 
256
LD_LIBRARY=     $(PYTHON.IMPLIB)
 
257
 
 
258
# Additional executable parameters
 
259
EXETYPE.$(PYTHON.EXE)=          WINDOWCOMPAT
 
260
EXETYPE.$(PYTHONPM.EXE)=        WINDOWAPI
 
261
EXETYPE.$(PGEN.EXE)=            WINDOWCOMPAT
 
262
DESCRIPTION.$(PYTHON.EXE)=      Python object-oriented programming language interpreter for OS/2
 
263
DESCRIPTION.$(PYTHONPM.EXE)=    $(DESCRIPTION.$(PYTHON.EXE))
 
264
DESCRIPTION.$(PGEN.EXE)=        Python object-oriented programming language parser generator for OS/2
 
265
 
 
266
# Module descriptions
 
267
DESCRIPTION.zlib$(MODULE.EXT)=          Python Extension DLL for accessing the InfoZip compression library
 
268
DESCRIPTION.crypt$(MODULE.EXT)=         Python Extension DLL implementing the crypt$(BRO)$(BRC) function
 
269
DESCRIPTION._tkinter$(MODULE.EXT)=      Python Extension DLL for access to Tcl/Tk Environment
 
270
DESCRIPTION.readline$(MODULE.EXT)=      Python Extension DLL for access to GNU ReadLine library
 
271
DESCRIPTION._curses$(MODLIB.EXT)=       Python Extension DLL for access to ncurses library
 
272
DESCRIPTION.pyexpat$(MODULE.EXT)=       Python Extension DLL for access to expat library
 
273
DESCRIPTION.bz2$(MODULE.EXT)=           Python Extension DLL for accessing the bz2 compression library
 
274
 
 
275
# Source files
 
276
SRC.OS2EMX=     config.c dlfcn.c getpathp.c
 
277
SRC.MAIN=       $(addprefix $(TOP), \
 
278
                Modules/getbuildinfo.c \
 
279
                Modules/main.c)
 
280
SRC.MODULES=    $(addprefix $(TOP), \
 
281
                Modules/gcmodule.c \
 
282
                Modules/signalmodule.c \
 
283
                Modules/posixmodule.c \
 
284
                Modules/_threadmodule.c \
 
285
                Modules/arraymodule.c \
 
286
                Modules/binascii.c \
 
287
                Modules/cmathmodule.c \
 
288
                Modules/_codecsmodule.c \
 
289
                Modules/collectionsmodule.c \
 
290
                Modules/_csv.c \
 
291
                Modules/datetimemodule.c \
 
292
                Modules/errnomodule.c \
 
293
                Modules/fcntlmodule.c \
 
294
                Modules/_functoolsmodule.c \
 
295
                Modules/_heapqmodule.c \
 
296
                Modules/imageop.c \
 
297
                Modules/itertoolsmodule.c \
 
298
                Modules/_localemodule.c \
 
299
                Modules/mathmodule.c \
 
300
                Modules/operator.c \
 
301
                Modules/_randommodule.c \
 
302
                Modules/sha256module.c \
 
303
                Modules/sha512module.c \
 
304
                Modules/_sre.c \
 
305
                Modules/_struct.c \
 
306
                Modules/symtablemodule.c \
 
307
                Modules/termios.c \
 
308
                Modules/timemodule.c \
 
309
                Modules/_weakref.c \
 
310
                Modules/xxsubtype.c \
 
311
                Modules/zipimport.c)
 
312
SRC.PARSE1=     $(addprefix $(TOP), \
 
313
                Parser/acceler.c \
 
314
                Parser/grammar1.c \
 
315
                Parser/listnode.c \
 
316
                Parser/node.c \
 
317
                Parser/parser.c \
 
318
                Parser/parsetok.c \
 
319
                Parser/bitset.c \
 
320
                Parser/metagrammar.c)
 
321
SRC.PARSE2=     $(addprefix $(TOP), \
 
322
                Parser/tokenizer.c \
 
323
                Parser/myreadline.c)
 
324
SRC.PARSER=     $(SRC.PARSE1) \
 
325
                $(SRC.PARSE2)
 
326
SRC.PYTHON=     $(addprefix $(TOP), \
 
327
                Python/Python-ast.c \
 
328
                Python/asdl.c \
 
329
                Python/ast.c \
 
330
                Python/bltinmodule.c \
 
331
                Python/exceptions.c \
 
332
                Python/ceval.c \
 
333
                Python/compile.c \
 
334
                Python/codecs.c \
 
335
                Python/errors.c \
 
336
                Python/frozen.c \
 
337
                Python/frozenmain.c \
 
338
                Python/future.c \
 
339
                Python/getargs.c \
 
340
                Python/getcompiler.c \
 
341
                Python/getcopyright.c \
 
342
                Python/getplatform.c \
 
343
                Python/getversion.c \
 
344
                Python/graminit.c \
 
345
                Python/import.c \
 
346
                Python/importdl.c \
 
347
                Python/marshal.c \
 
348
                Python/modsupport.c \
 
349
                Python/mysnprintf.c \
 
350
                Python/mystrtoul.c \
 
351
                Python/pyarena.c \
 
352
                Python/pyfpe.c \
 
353
                Python/pystate.c \
 
354
                Python/pystrtod.c \
 
355
                Python/pythonrun.c \
 
356
                Python/structmember.c \
 
357
                Python/symtable.c \
 
358
                Python/sysmodule.c \
 
359
                Python/traceback.c \
 
360
                Python/getopt.c \
 
361
                Python/dynload_shlib.c \
 
362
                Python/thread.c)
 
363
SRC.OBJECT=     $(addprefix $(TOP), \
 
364
                Objects/abstract.c \
 
365
                Objects/boolobject.c \
 
366
                Objects/cellobject.c \
 
367
                Objects/classobject.c \
 
368
                Objects/cobject.c \
 
369
                Objects/codeobject.c \
 
370
                Objects/complexobject.c \
 
371
                Objects/descrobject.c \
 
372
                Objects/dictobject.c \
 
373
                Objects/enumobject.c \
 
374
                Objects/fileobject.c \
 
375
                Objects/floatobject.c \
 
376
                Objects/frameobject.c \
 
377
                Objects/funcobject.c \
 
378
                Objects/genobject.c \
 
379
                Objects/iterobject.c \
 
380
                Objects/listobject.c \
 
381
                Objects/longobject.c \
 
382
                Objects/methodobject.c \
 
383
                Objects/moduleobject.c \
 
384
                Objects/object.c \
 
385
                Objects/obmalloc.c \
 
386
                Objects/rangeobject.c \
 
387
                Objects/setobject.c \
 
388
                Objects/sliceobject.c \
 
389
                Objects/stringobject.c \
 
390
                Objects/structseq.c \
 
391
                Objects/tupleobject.c \
 
392
                Objects/typeobject.c \
 
393
                Objects/unicodeobject.c \
 
394
                Objects/unicodectype.c \
 
395
                Objects/weakrefobject.c)
 
396
 
 
397
SRC.LIB=        $(SRC.OS2EMX) \
 
398
                $(SRC.MAIN) \
 
399
                $(SRC.PARSER) \
 
400
                $(SRC.OBJECT) \
 
401
                $(SRC.PYTHON) \
 
402
                $(SRC.MODULES)
 
403
OBJ.LIB=        $(addprefix $(OUT),$(notdir $(SRC.LIB:.c=$O)))
 
404
 
 
405
SRC.PGEN=       $(SRC.PARSE1) \
 
406
                $(addprefix $(TOP), \
 
407
                Objects/obmalloc.c) \
 
408
                $(addprefix $(TOP), \
 
409
                Python/mysnprintf.c) \
 
410
                $(addprefix $(TOP), \
 
411
                Parser/tokenizer_pgen.c \
 
412
                Parser/pgenmain.c \
 
413
                Parser/pgen.c \
 
414
                Parser/printgrammar.c \
 
415
                Parser/grammar.c \
 
416
                Parser/firstsets.c) \
 
417
 
 
418
OBJ.PGEN=       $(addprefix $(OUT),$(notdir $(SRC.PGEN:.c=$O)))
 
419
 
 
420
SRC.EXE=        $(TOP)Modules/python.c
 
421
SRC.PMEXE=      pythonpm.c
 
422
 
 
423
# Python modules to be dynamically loaded that:
 
424
#   1) have only single source file and require no extra libs
 
425
#   2) use the standard module naming convention
 
426
#      (the 'module' in ?????module.c is assumed)
 
427
# - these can be built with implicit rules
 
428
EASYEXTMODULES= fpectl \
 
429
                fpetest \
 
430
                parser \
 
431
                pwd \
 
432
                select 
 
433
 
 
434
# Python modules to be dynamically loaded that need explicit build rules
 
435
#  (either multiple source files and/or non-standard module naming)
 
436
#  (NOTE: use shortened names for modules affected by 8 char name limit)
 
437
HARDEXTMODULES= _socket \
 
438
                _testcap \
 
439
                unicoded
 
440
 
 
441
# Python modules that are used as libraries and therefore must use
 
442
# a .DLL extension
 
443
LIBEXTMODULES=
 
444
 
 
445
# Python external ($(MODULE.EXT)) modules - can be EASY or HARD
 
446
ifeq ($(HAVE_ZLIB),yes)
 
447
  HARDEXTMODULES+=      zlib
 
448
endif
 
449
ifeq ($(HAVE_UFC),yes)
 
450
  HARDEXTMODULES+=      crypt
 
451
endif
 
452
ifeq ($(HAVE_TCLTK),yes)
 
453
  HARDEXTMODULES+=      _tkinter
 
454
  CFLAGS+=              -DHAS_DIRENT -I/TclTk80/include
 
455
  TK_LIBS+=             -L/TclTk80/lib -ltcl80 -ltk80
 
456
endif
 
457
ifeq ($(HAVE_GREADLINE),yes)
 
458
  HARDEXTMODULES+=      readline
 
459
endif
 
460
ifeq ($(HAVE_NCURSES),yes)
 
461
  LIBEXTMODULES+=       _curses
 
462
  HARDEXTMODULES+=      _curses_
 
463
endif
 
464
ifeq ($(HAVE_GDBM),yes)
 
465
  HARDEXTMODULES+=      _gdbm _dbm
 
466
endif
 
467
ifeq ($(HAVE_BZ2),yes)
 
468
  HARDEXTMODULES+=      bz2
 
469
endif
 
470
ifeq ($(HAVE_OPENSSL),yes)
 
471
  HARDEXTMODULES+=      _ssl
 
472
endif
 
473
 
 
474
# Expat is now distributed with the Python source
 
475
HARDEXTMODULES+=        pyexpat
 
476
EXPAT.INC=      -I../../Modules/expat
 
477
EXPAT.DEF=      -DHAVE_EXPAT_H -DXML_NS=1 -DXML_DTD=1 -DXML_BYTE_ORDER=12 \
 
478
                -DXML_CONTENT_BYTES=1024 -DHAVE_MEMMOVE=1 -DHAVE_BCOPY=1
 
479
EXPAT.SRC=      $(addprefix ../../Modules/expat/, \
 
480
                xmlparse.c \
 
481
                xmlrole.c \
 
482
                xmltok.c)
 
483
 
 
484
# all the external modules
 
485
EXTERNDLLS=     $(addsuffix $(MODULE.EXT),$(patsubst %module,%,$(EASYEXTMODULES)))
 
486
EXTERNDLLS+=    $(addsuffix $(MODULE.EXT),$(patsubst %module,%,$(HARDEXTMODULES)))
 
487
EXTERNDLLS+=    $(addsuffix $(MODLIB.EXT),$(patsubst %module,%,$(LIBEXTMODULES)))
 
488
 
 
489
# Targets
 
490
all:  $(OUT) $(PYTHON.LIB) $(PYTHON.DEF) $(PYTHON.IMPLIB) $(PYTHON.DLL) \
 
491
        python_noncore
 
492
 
 
493
python_noncore:
 
494
        make PY_DEF= $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE) $(EXTERNDLLS)
 
495
 
 
496
clean:
 
497
        rm -f $(OUT)*
 
498
        rm -f $(PYTHON.LIB) $(PYTHON.IMPLIB) $(PYTHON.EXEIMP) $(PYTHON.DLL) \
 
499
          $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE) *$(MODULE.EXT) *.dll
 
500
        find ../../Lib -name "*.py[co]" -exec rm {} ";"
 
501
 
 
502
lx:
 
503
        @echo Packing everything with lxLite...
 
504
        lxlite $(PYTHON.DLL) $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE)
 
505
 
 
506
depend: $(OUTBASE)
 
507
        makedep -f $(OUTBASE)python.dep -o $(BUCK)O -p $(BUCK)\(OUT\) \
 
508
          -r -c $(INCLUDE) $(SRC.LIB) $(SRC.PGEN)
 
509
 
 
510
$(OUT): $(OUTBASE)
 
511
 
 
512
$(OUT) $(OUTBASE):
 
513
        mkdir.exe $@
 
514
 
 
515
$(PYTHON.LIB): $(OBJ.LIB)
 
516
        rm.exe -f $@
 
517
        $(AR) $(ARFLAGS) $@ $^
 
518
 
 
519
# the Python core DLL .def file needs to have a number of non-static
 
520
# symbols that aren't part of the Python C API removed (commented out)
 
521
# from the DLL export list.
 
522
$(PYTHON.DEF): $(PYTHON.LIB)
 
523
        @echo Creating .DEF file: $@
 
524
        @echo LIBRARY $(PYTHON_LIB) INITINSTANCE TERMINSTANCE >$@
 
525
        @echo DESCRIPTION $(DQUOTE)Python $(PYTHON_VER) Core DLL$(DQUOTE) >>$@
 
526
        @echo PROTMODE >>$@
 
527
        @echo DATA MULTIPLE NONSHARED >>$@
 
528
        @echo EXPORTS >>$@
 
529
        $(EXPLIB) -u $(PYTHON.LIB) |\
 
530
         sed -e "/^  .init.*/s/^ /; /" \
 
531
                -e "/^  .pcre_.*/s/^ /; /" \
 
532
                -e "/^  .array_methods/s/^ /; /" \
 
533
                -e "/^  .fast_save_leave/s/^ /; /" \
 
534
                -e "/^  .dlopen/s/^ /; /" \
 
535
                -e "/^  .dlsym/s/^ /; /" \
 
536
                -e "/^  .dlclose/s/^ /; /" \
 
537
                -e "/^  .dlerror/s/^ /; /" \
 
538
                -e "/^  ._Py_re_.*/s/^ /; /" \
 
539
                -e "/^  ._Py_MD5.*/s/^ /; /" >>$@
 
540
 
 
541
$(PYTHON.IMPLIB): $(PYTHON.DEF)
 
542
        $(IMPLIB) -o $@ $^
 
543
 
 
544
$(PYTHON.EXEIMP): $(PYTHON.DEF)
 
545
        $(IMPLIB) -o $@ $^
 
546
 
 
547
$(PYTHON.DLL): $(OUT)dllentry$O $(PYTHON.LIB) $(PYTHON.DEF)
 
548
 
 
549
# Explicit make targets for the .EXEs to be able to use LD to link
 
550
# (so that fork() will work if required)
 
551
 
 
552
$(PYTHON.EXE): $(SRC.EXE) $(PYTHON.EXEIMP) $(OUT)python.def
 
553
        $(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.EXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)python.def
 
554
        $(EXEOPT) -aq $(PYTHON.EXE) -h$(NFILES)
 
555
 
 
556
$(PYTHONPM.EXE): $(SRC.PMEXE) $(PYTHON.EXEIMP) $(OUT)pythonpm.def
 
557
        $(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.PMEXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)pythonpm.def
 
558
        $(EXEOPT) -aq $(PYTHONPM.EXE) -h$(NFILES)
 
559
 
 
560
$(PGEN.EXE): $(OBJ.PGEN) $(OUT)pgen.def
 
561
 
 
562
# Explicit building instructions for those external modules that require 
 
563
# awkward handling (due e.g. to non-std naming, or multiple source files)
 
564
# - standard modules
 
565
 
 
566
_socket$(MODULE.EXT): $(OUT)socketmodule$O $(OUT)_socket_m.def $(PYTHON.IMPLIB)
 
567
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS)
 
568
 
 
569
# _testcapi needs to be renamed to be useful
 
570
_testcapi$(MODULE.EXT): $(OUT)_testcapimodule$O $(OUT)_testcapi_m.def $(PYTHON.IMPLIB)
 
571
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS)
 
572
 
 
573
_testcap$(MODULE.EXT): _testcapi$(MODULE.EXT)
 
574
        cp $^ $@
 
575
 
 
576
# unicodedata needs to be renamed to be useful
 
577
unicodedata$(MODULE.EXT): $(OUT)unicodedata$O $(OUT)unicodedata_m.def $(PYTHON.IMPLIB)
 
578
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) $(MODULE_LIBS)
 
579
 
 
580
unicoded$(MODULE.EXT): unicodedata$(MODULE.EXT)
 
581
        cp $^ $@
 
582
 
 
583
crypt$(MODULE.EXT): $(OUT)cryptmodule$O $(OUT)crypt_m.def $(PYTHON.IMPLIB)
 
584
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) -lufc $(LIBS)
 
585
 
 
586
# The _curses_panel module requires a couple of ncurses library entry
 
587
# points, which are best exposed as exports from the _curses module DLL
 
588
$(OUT)_curses_m.def:
 
589
        @echo Creating .DEF file: $@
 
590
        @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@
 
591
        @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*)$(MODLIB.EXT))$(DQUOTE) >>$@
 
592
        @echo DATA MULTIPLE NONSHARED >>$@
 
593
        @echo EXPORTS >>$@
 
594
        @echo   init_curses >>$@
 
595
        @echo   wnoutrefresh >>$@
 
596
        @echo   _nc_panelhook >>$@
 
597
        @echo   is_linetouched >>$@
 
598
        @echo   mvwin >>$@
 
599
        @echo   stdscr >>$@
 
600
        @echo   wtouchln >>$@
 
601
 
 
602
$(OUT)_curses_panel_m.def:
 
603
        @echo Creating .DEF file: $@
 
604
        @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@
 
605
        @echo DESCRIPTION $(DQUOTE)Python standard module $(notdir $*)$(DQUOTE) >>$@
 
606
        @echo DATA MULTIPLE NONSHARED >>$@
 
607
        @echo IMPORTS >>$@
 
608
        @echo   _curses.wnoutrefresh >>$@
 
609
        @echo   _curses._nc_panelhook >>$@
 
610
        @echo   _curses.is_linetouched >>$@
 
611
        @echo   _curses.mvwin >>$@
 
612
        @echo   _curses.stdscr >>$@
 
613
        @echo   _curses.wtouchln >>$@
 
614
        @echo EXPORTS >>$@
 
615
        @echo   init_curses_panel >>$@
 
616
 
 
617
_curses$(MODLIB.EXT): $(OUT)_cursesmodule$O $(OUT)_curses_m.def $(PYTHON.IMPLIB)
 
618
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lncurses
 
619
 
 
620
# curses_panel needs to be renamed to be useful
 
621
_curses_panel$(MODULE.EXT): $(OUT)_curses_panel$O $(OUT)_curses_panel_m.def $(PYTHON.IMPLIB)
 
622
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lpanel
 
623
 
 
624
_curses_$(MODULE.EXT): _curses_panel$(MODULE.EXT)
 
625
        cp $^ $@
 
626
 
 
627
_dbm$(MODULE.EXT): $(OUT)_dbmmodule$O $(OUT)dbm_m.def $(PYTHON.IMPLIB)
 
628
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lgdbm
 
629
 
 
630
_gdbm$(MODULE.EXT): $(OUT)_gdbmmodule$O $(OUT)gdbm_m.def $(PYTHON.IMPLIB)
 
631
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lgdbm
 
632
 
 
633
 
 
634
# Expat is now distributed with Python, so use the included version
 
635
$(OUT)pyexpat$O:        ../../Modules/pyexpat.c
 
636
        $(CC) $(CFLAGS) $(EXPAT.INC) -c -o $@ $^
 
637
$(OUT)xmlparse$O:       ../../Modules/expat/xmlparse.c
 
638
        $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^
 
639
$(OUT)xmlrole$O:        ../../Modules/expat/xmlrole.c
 
640
        $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^
 
641
$(OUT)xmltok$O: ../../Modules/expat/xmltok.c
 
642
        $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^
 
643
pyexpat$(MODULE.EXT): $(OUT)pyexpat$O $(OUT)xmlparse$O $(OUT)xmlrole$O \
 
644
                $(OUT)xmltok$O $(OUT)pyexpat_m.def $(PYTHON.IMPLIB)
 
645
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS)
 
646
 
 
647
readline$(MODULE.EXT): $(OUT)readline$O $(OUT)readline_m.def $(PYTHON.IMPLIB)
 
648
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lreadline -lncurses
 
649
 
 
650
#_tkinter$(MODULE.EXT): $(OUT)_tkinter$O $(OUT)tclNotify$O $(OUT)tkappinit$O
 
651
_tkinter$(MODULE.EXT): $(OUT)_tkinter$O $(OUT)tclNotify$O \
 
652
                $(OUT)_tkinter_m.def $(PYTHON.IMPLIB)
 
653
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) $(TK_LIBS)
 
654
 
 
655
zlib$(MODULE.EXT): $(OUT)zlibmodule$O $(OUT)zlib_m.def $(PYTHON.IMPLIB)
 
656
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lz
 
657
 
 
658
bz2$(MODULE.EXT): $(OUT)bz2module$O $(OUT)bz2_m.def $(PYTHON.IMPLIB)
 
659
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lbz2
 
660
 
 
661
_ssl$(MODULE.EXT): $(OUT)_ssl$O $(OUT)_ssl_m.def $(PYTHON.IMPLIB)
 
662
        $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lssl -lcrypto
 
663
 
 
664
# the test target
 
665
test:
 
666
        -find ../../Lib -name "*.py[co]" -exec rm {} ";"
 
667
        -./python -E ../../lib/test/regrtest.py -l -u "network"
 
668
        ./python -E ../../lib/test/regrtest.py -l -u "network"
 
669
 
 
670
-include $(OUTBASE)python.dep