diff -r ffa851df0825 -r 2fb8b9db1c86 symbian-qemu-0.9.1-12/python-2.6.1/PC/os2emx/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symbian-qemu-0.9.1-12/python-2.6.1/PC/os2emx/Makefile Fri Jul 31 15:01:17 2009 +0100 @@ -0,0 +1,701 @@ +#####################==================---------------- +# +# Top-Level Makefile for Building Python 2.6 for OS/2 using GCC/EMX +# Originally written by Andrew Zabolotny, for Python 1.5.2 +# Modified by Andrew MacIntyre, for Python 2.6 +# +# This makefile was developed for use with [P]GCC/EMX compiler any +# version and GNU Make. +# +# The output of the build is a largish Python26.DLL containing the +# essential modules of Python and a small Python.exe program to start +# the interpreter. When embedding Python within another program, only +# Python26.DLL is needed. We also build python_s.a static library (which +# can be converted into OMF (.lib) format using emxomf tool) and both +# python.a and python.lib import libraries. Then the optional +# extension modules, which are OS/2 DLLs renamed with a PYD file extension. +# +# Recommended build order: +# make depend (if you have makedep) +# make all +# make lx (if you have lxlite) +# make test (optional) +# +#####################==================---------------- + +# === Compilation mode: debug or release === +MODE= optimize +#MODE= debug +# === Assert() enabled === +ASSERTIONS=no +#ASSERTIONS=yes +# === Hard-wire installation location === +FIXED_PYHOME=no +#FIXED_PYHOME=yes + +# === Optional modules === +# Do you have the InfoZip compression library installed? +HAVE_ZLIB= no +# Do you have the Ultra Fast Crypt (UFC) library installed? +HAVE_UFC= no +# Do you have the Tcl/Tk library installed? +HAVE_TCLTK= no +# Do you have the GNU readline library installed? +# NOTE: I'm using a modified version of Kai Uwe Rommel's port that +# - is compiled with multithreading enabled +# - is linked statically +# I have had no success trying to use a DLL version, even when +# compiled with multithreading enabled. +HAVE_GREADLINE= no +# Do you have the BSD DB library (v1.85) as included in the EMXBSD package? +# NOTE: this library needs to be recompiled with a structure member +# renamed to avoid problems with the multithreaded errno support +# (there is a structure member called errno, used for shadowing the +# real errno, which conflicts with the errno redefinition of -Zmt) +HAVE_BSDDB= no +# Do you have the ncurses library installed? EMX's BSD curses aren't enough! +HAVE_NCURSES= no +# Do you have the GDBM library installed? +HAVE_GDBM= no +# Do you have the BZ2 compression library installed? +HAVE_BZ2= no +# Do you have the OpenSSL libraries installed +HAVE_OPENSSL= no + +# === install locations === +# default value of PYTHONHOME +LIB_DIR=C:/Python26 +# default is to have everything in or under PYTHONHOME +EXE_DIR=$(LIB_DIR) +DLL_DIR=$(EXE_DIR) + + +# === The Tools === +CC= gcc +CFLAGS= -Zmt -Wall $(INCLUDE) +CFLAGS.LIB= $(CFLAGS) +LD= gcc +LDFLAGS= -Zmt -Zcrtdll -L. -lgcc +LDFLAGS.EXE= $(LDFLAGS) +LDFLAGS.DLL= $(LDFLAGS) -Zdll +LDFLAGS.A= $(LDFLAGS) $(LIBS) +ARFLAGS= crs +IMPLIB= emximp +EXPLIB= emxexp +EXEOPT= emxbind +PY_DEF= -DPy_BUILD_CORE + + +# adjust C compiler settings based on build options +ifeq ($(MODE),debug) + CFLAGS+= -g -O + LDFLAGS+= -g +else + CFLAGS+= -s -O3 -fomit-frame-pointer -mprobe + LDFLAGS+= -s +endif +CFLAGS+= $(PY_DEF) +ifeq ($(ASSERTIONS),no) + CFLAGS+= -DNDEBUG +endif +ifeq ($(FIXED_PYHOME),yes) + CFLAGS+= -DPREFIX=$(DQUOTE)$(LIB_DIR)$(DQUOTE) +endif + +# We're using the OMF format since EMX's ld has a obscure bug +# because of which it sometimes fails to build relocations +# in .data segment that point to another .data locations +# (except for the final linking if the .EXEs) +OMF= yes + +# if fork() support is required, the main executable must be linked with ld +EXEOMF= no + +# File extensions +MODULE.EXT= .pyd +MODLIB.EXT= .dll +ifeq ($(OMF),yes) + O= .obj + A= .lib + AR= emxomfar + CFLAGS+= -Zomf + LDFLAGS+= -Zomf + ifeq ($(MODE),debug) + ARFLAGS= -p64 crs + else + ARFLAGS= -p32 crs + endif +else + O= .o + A= .a + AR= ar +endif + + +# === Build time resource settings === + +# EMX's default number of file handles is 40, which is sometimes insufficient +# (the tempfile regression test tries to create 100 temporary files) +NFILES=250 + +# The default stack size for child threads is 64k bytes, which is +# insufficient for some applications which do a lot of work in threads +# (such as Zope, especially in conjunction with Plone). +# Note that this setting is distinct from the stack size for the main +# thread, which is set via the %.def rule below. +# EMX documents that the thread stack size should be at least 32768 bytes; +# for Zope/Plone at least 128k bytes is recommended. +# Uncomment & adjust the next line to override the default stack size: +#CFLAGS+= -DTHREAD_STACK_SIZE=0x20000 + + +# === The environment === + +# Source file paths +SRCPATH=.;../../Python;../../Parser;../../Objects;../../Include;../../Modules +# Python contains the central core, containing the builtins and interpreter. +# Parser contains Python's Internal Parser and +# Standalone Parser Generator Program (Shares Some of Python's Modules) +# Objects contains Python Object Types +# Modules contains extension Modules (Built-In or as Separate DLLs) + +# Unix shells tend to use "$" as delimiter for variable names. +# Test for this behaviour and set $(BUCK) variable correspondigly ... +__TMP__:=$(shell echo $$$$) +ifeq ($(__TMP__),$$$$) + BUCK= $$ + BRO= ( + BRC= ) +else + BUCK= \$$ + BRO= \( + BRC= \) +endif +# Compute the "double quote" variable +__TMP__:=$(shell echo "") +ifeq ($(__TMP__),"") + DQUOTE= " +else + DQUOTE= \" +endif + +# Include paths +#INCLUDE= -I$(subst ;, -I, $(SRCPATH)) +INCLUDE= -I. -I../../Include + +# Path to search for .c files +vpath %.c .;..;$(SRCPATH) + +# Top of the package tree +TOP= ../../ + +# Directory for output files +OUTBASE= out/ +OUT= $(OUTBASE)$(MODE)/ + +# Additional libraries +LIBS= -lsocket + +# Utility macro: replacement for $^ +^^= $(filter-out %$A,$^) +# Use $(L^) to link with all libraries specified as dependencies +L^= $(addprefix -l,$(basename $(notdir $(filter %$A,$+)))) + +# Build rules +$(OUT)%$O: %.c + $(CC) $(CFLAGS.LIB) -c $< -o $@ + +%.a: + $(LD) $(LDFLAGS.A) -o $@ $(^^) $(L^) + +%.dll: + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) + +%.pyd: $(OUT)%module$O $(OUT)%_m.def + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(PYTHON.IMPLIB) $(LIBS) + +%.exe: + $(LD) $(LDFLAGS.EXE) -o $@ $(^^) $(L^) + +%_m.def: + @echo Creating .DEF file: $@ + @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@ + ifeq ($(DESCRIPTION.$(notdir $*)$(MODULE.EXT)),) + @echo DESCRIPTION $(DQUOTE)Python standard module $(notdir $*)$(DQUOTE) >>$@ + else + @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*)$(MODULE.EXT))$(DQUOTE) >>$@ + endif + @echo DATA MULTIPLE NONSHARED >>$@ + @echo EXPORTS >>$@ + @echo init$(notdir $*) >>$@ + +%.def: + @echo Creating .DEF file: $@ + @echo NAME $(notdir $*) $(EXETYPE.$(notdir $*).exe) >$@ + @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*).exe)$(DQUOTE) >>$@ + @echo STACKSIZE 2097152 >>$@ + +# Output file names +PYTHON_VER= 2.6 +PYTHON_LIB= python26 +PYTHON.LIB= $(PYTHON_LIB)_s$A +PYTHON.IMPLIB= $(PYTHON_LIB)$A +ifeq ($(EXEOMF),yes) + PYTHON.EXEIMP= $(PYTHON.IMPLIB) + LDMODE.EXE= -Zomf +else + PYTHON.EXEIMP= $(PYTHON_LIB).a + LDMODE.EXE = +endif +PYTHON.DLL= $(PYTHON_LIB).dll +PYTHON.DEF= $(PYTHON_LIB).def +PYTHON.EXE= python.exe +PYTHONPM.EXE= pythonpm.exe +PGEN.EXE= pgen.exe +LIBRARY= $(PYTHON.LIB) +LD_LIBRARY= $(PYTHON.IMPLIB) + +# Additional executable parameters +EXETYPE.$(PYTHON.EXE)= WINDOWCOMPAT +EXETYPE.$(PYTHONPM.EXE)= WINDOWAPI +EXETYPE.$(PGEN.EXE)= WINDOWCOMPAT +DESCRIPTION.$(PYTHON.EXE)= Python object-oriented programming language interpreter for OS/2 +DESCRIPTION.$(PYTHONPM.EXE)= $(DESCRIPTION.$(PYTHON.EXE)) +DESCRIPTION.$(PGEN.EXE)= Python object-oriented programming language parser generator for OS/2 + +# Module descriptions +DESCRIPTION.zlib$(MODULE.EXT)= Python Extension DLL for accessing the InfoZip compression library +DESCRIPTION.crypt$(MODULE.EXT)= Python Extension DLL implementing the crypt$(BRO)$(BRC) function +DESCRIPTION._tkinter$(MODULE.EXT)= Python Extension DLL for access to Tcl/Tk Environment +DESCRIPTION.readline$(MODULE.EXT)= Python Extension DLL for access to GNU ReadLine library +DESCRIPTION.bsddb185$(MODULE.EXT)= Python Extension DLL for access to BSD DB (v1.85) library +DESCRIPTION._curses$(MODLIB.EXT)= Python Extension DLL for access to ncurses library +DESCRIPTION.pyexpat$(MODULE.EXT)= Python Extension DLL for access to expat library +DESCRIPTION.bz2$(MODULE.EXT)= Python Extension DLL for accessing the bz2 compression library + +# Source files +SRC.OS2EMX= config.c dlfcn.c getpathp.c +SRC.MAIN= $(addprefix $(TOP), \ + Modules/getbuildinfo.c \ + Modules/main.c) +SRC.MODULES= $(addprefix $(TOP), \ + Modules/gcmodule.c \ + Modules/signalmodule.c \ + Modules/posixmodule.c \ + Modules/threadmodule.c \ + Modules/arraymodule.c \ + Modules/binascii.c \ + Modules/cmathmodule.c \ + Modules/_codecsmodule.c \ + Modules/_collectionsmodule.c \ + Modules/cPickle.c \ + Modules/cStringIO.c \ + Modules/_csv.c \ + Modules/datetimemodule.c \ + Modules/dlmodule.c \ + Modules/errnomodule.c \ + Modules/fcntlmodule.c \ + Modules/_fileio.c \ + Modules/_functoolsmodule.c \ + Modules/_heapqmodule.c \ + Modules/imageop.c \ + Modules/itertoolsmodule.c \ + Modules/_localemodule.c \ + Modules/mathmodule.c \ + Modules/md5.c \ + Modules/md5module.c \ + Modules/operator.c \ + Modules/_randommodule.c \ + Modules/shamodule.c \ + Modules/sha256module.c \ + Modules/sha512module.c \ + Modules/_sre.c \ + Modules/stropmodule.c \ + Modules/_struct.c \ + Modules/symtablemodule.c \ + Modules/termios.c \ + Modules/timemodule.c \ + Modules/timingmodule.c \ + Modules/_weakref.c \ + Modules/xxsubtype.c \ + Modules/zipimport.c) +SRC.PARSE1= $(addprefix $(TOP), \ + Parser/acceler.c \ + Parser/grammar1.c \ + Parser/listnode.c \ + Parser/node.c \ + Parser/parser.c \ + Parser/parsetok.c \ + Parser/bitset.c \ + Parser/metagrammar.c) +SRC.PARSE2= $(addprefix $(TOP), \ + Parser/tokenizer.c \ + Parser/myreadline.c) +SRC.PARSER= $(SRC.PARSE1) \ + $(SRC.PARSE2) +SRC.PYTHON= $(addprefix $(TOP), \ + Python/Python-ast.c \ + Python/asdl.c \ + Python/ast.c \ + Python/bltinmodule.c \ + Python/exceptions.c \ + Python/ceval.c \ + Python/compile.c \ + Python/codecs.c \ + Python/errors.c \ + Python/formatter_string.c \ + Python/formatter_unicode.c \ + Python/frozen.c \ + Python/frozenmain.c \ + Python/future.c \ + Python/getargs.c \ + Python/getcompiler.c \ + Python/getcopyright.c \ + Python/getmtime.c \ + Python/getplatform.c \ + Python/getversion.c \ + Python/graminit.c \ + Python/import.c \ + Python/importdl.c \ + Python/marshal.c \ + Python/modsupport.c \ + Python/mysnprintf.c \ + Python/mystrtoul.c \ + Python/peephole.c \ + Python/pyarena.c \ + Python/pyfpe.c \ + Python/pymath.c \ + Python/pystate.c \ + Python/pystrtod.c \ + Python/pythonrun.c \ + Python/structmember.c \ + Python/symtable.c \ + Python/sysmodule.c \ + Python/traceback.c \ + Python/getopt.c \ + Python/dynload_shlib.c \ + Python/thread.c \ + Python/_warnings.c) +SRC.OBJECT= $(addprefix $(TOP), \ + Objects/abstract.c \ + Objects/boolobject.c \ + Objects/bufferobject.c \ + Objects/bytearrayobject.c \ + Objects/bytes_methods.c \ + Objects/cellobject.c \ + Objects/classobject.c \ + Objects/cobject.c \ + Objects/codeobject.c \ + Objects/complexobject.c \ + Objects/descrobject.c \ + Objects/dictobject.c \ + Objects/enumobject.c \ + Objects/fileobject.c \ + Objects/floatobject.c \ + Objects/frameobject.c \ + Objects/funcobject.c \ + Objects/genobject.c \ + Objects/intobject.c \ + Objects/iterobject.c \ + Objects/listobject.c \ + Objects/longobject.c \ + Objects/methodobject.c \ + Objects/moduleobject.c \ + Objects/object.c \ + Objects/obmalloc.c \ + Objects/rangeobject.c \ + Objects/setobject.c \ + Objects/sliceobject.c \ + Objects/stringobject.c \ + Objects/structseq.c \ + Objects/tupleobject.c \ + Objects/typeobject.c \ + Objects/unicodeobject.c \ + Objects/unicodectype.c \ + Objects/weakrefobject.c) + +SRC.LIB= $(SRC.OS2EMX) \ + $(SRC.MAIN) \ + $(SRC.PARSER) \ + $(SRC.OBJECT) \ + $(SRC.PYTHON) \ + $(SRC.MODULES) +OBJ.LIB= $(addprefix $(OUT),$(notdir $(SRC.LIB:.c=$O))) + +SRC.PGEN= $(SRC.PARSE1) \ + $(addprefix $(TOP), \ + Objects/obmalloc.c) \ + $(addprefix $(TOP), \ + Python/mysnprintf.c) \ + $(addprefix $(TOP), \ + Parser/tokenizer_pgen.c \ + Parser/pgenmain.c \ + Parser/pgen.c \ + Parser/printgrammar.c \ + Parser/grammar.c \ + Parser/firstsets.c) \ + +OBJ.PGEN= $(addprefix $(OUT),$(notdir $(SRC.PGEN:.c=$O))) + +SRC.EXE= $(TOP)Modules/python.c +SRC.PMEXE= pythonpm.c + +# Python modules to be dynamically loaded that: +# 1) have only single source file and require no extra libs +# 2) use the standard module naming convention +# (the 'module' in ?????module.c is assumed) +# - these can be built with implicit rules +EASYEXTMODULES= fpectl \ + fpetest \ + parser \ + pwd \ + select + +# Python modules to be dynamically loaded that need explicit build rules +# (either multiple source files and/or non-standard module naming) +# (NOTE: use shortened names for modules affected by 8 char name limit) +HARDEXTMODULES= _hotshot \ + _socket \ + _testcap \ + unicoded + +# Python modules that are used as libraries and therefore must use +# a .DLL extension +LIBEXTMODULES= + +# Python external ($(MODULE.EXT)) modules - can be EASY or HARD +ifeq ($(HAVE_ZLIB),yes) + HARDEXTMODULES+= zlib +endif +ifeq ($(HAVE_UFC),yes) + HARDEXTMODULES+= crypt +endif +ifeq ($(HAVE_TCLTK),yes) + HARDEXTMODULES+= _tkinter + CFLAGS+= -DHAS_DIRENT -I/TclTk80/include + TK_LIBS+= -L/TclTk80/lib -ltcl80 -ltk80 +endif +ifeq ($(HAVE_GREADLINE),yes) + HARDEXTMODULES+= readline +endif +ifeq ($(HAVE_BSDDB),yes) + HARDEXTMODULES+= bsddb185 +endif +ifeq ($(HAVE_NCURSES),yes) + LIBEXTMODULES+= _curses + HARDEXTMODULES+= _curses_ +endif +ifeq ($(HAVE_GDBM),yes) + HARDEXTMODULES+= gdbm dbm +endif +ifeq ($(HAVE_BZ2),yes) + HARDEXTMODULES+= bz2 +endif +ifeq ($(HAVE_OPENSSL),yes) + HARDEXTMODULES+= _ssl +endif + +# Expat is now distributed with the Python source +HARDEXTMODULES+= pyexpat +EXPAT.INC= -I../../Modules/expat +EXPAT.DEF= -DHAVE_EXPAT_H -DXML_NS=1 -DXML_DTD=1 -DXML_BYTE_ORDER=12 \ + -DXML_CONTENT_BYTES=1024 -DHAVE_MEMMOVE=1 -DHAVE_BCOPY=1 +EXPAT.SRC= $(addprefix ../../Modules/expat/, \ + xmlparse.c \ + xmlrole.c \ + xmltok.c) + +# all the external modules +EXTERNDLLS= $(addsuffix $(MODULE.EXT),$(patsubst %module,%,$(EASYEXTMODULES))) +EXTERNDLLS+= $(addsuffix $(MODULE.EXT),$(patsubst %module,%,$(HARDEXTMODULES))) +EXTERNDLLS+= $(addsuffix $(MODLIB.EXT),$(patsubst %module,%,$(LIBEXTMODULES))) + +# Targets +all: $(OUT) $(PYTHON.LIB) $(PYTHON.DEF) $(PYTHON.IMPLIB) $(PYTHON.DLL) \ + python_noncore + +python_noncore: + make PY_DEF= $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE) $(EXTERNDLLS) + +clean: + rm -f $(OUT)* + rm -f $(PYTHON.LIB) $(PYTHON.IMPLIB) $(PYTHON.EXEIMP) $(PYTHON.DLL) \ + $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE) *$(MODULE.EXT) *.dll + find ../../Lib -name "*.py[co]" -exec rm {} ";" + +lx: + @echo Packing everything with lxLite... + lxlite $(PYTHON.DLL) $(PYTHON.EXE) $(PYTHONPM.EXE) $(PGEN.EXE) + +depend: $(OUTBASE) + makedep -f $(OUTBASE)python.dep -o $(BUCK)O -p $(BUCK)\(OUT\) \ + -r -c $(INCLUDE) $(SRC.LIB) $(SRC.PGEN) + +$(OUT): $(OUTBASE) + +$(OUT) $(OUTBASE): + mkdir.exe $@ + +$(PYTHON.LIB): $(OBJ.LIB) + rm.exe -f $@ + $(AR) $(ARFLAGS) $@ $^ + +# the Python core DLL .def file needs to have a number of non-static +# symbols that aren't part of the Python C API removed (commented out) +# from the DLL export list. +$(PYTHON.DEF): $(PYTHON.LIB) + @echo Creating .DEF file: $@ + @echo LIBRARY $(PYTHON_LIB) INITINSTANCE TERMINSTANCE >$@ + @echo DESCRIPTION $(DQUOTE)Python $(PYTHON_VER) Core DLL$(DQUOTE) >>$@ + @echo PROTMODE >>$@ + @echo DATA MULTIPLE NONSHARED >>$@ + @echo EXPORTS >>$@ + $(EXPLIB) -u $(PYTHON.LIB) |\ + sed -e "/^ .init.*/s/^ /; /" \ + -e "/^ .pcre_.*/s/^ /; /" \ + -e "/^ .array_methods/s/^ /; /" \ + -e "/^ .fast_save_leave/s/^ /; /" \ + -e "/^ .dlopen/s/^ /; /" \ + -e "/^ .dlsym/s/^ /; /" \ + -e "/^ .dlclose/s/^ /; /" \ + -e "/^ .dlerror/s/^ /; /" \ + -e "/^ ._Py_re_.*/s/^ /; /" \ + -e "/^ ._Py_MD5.*/s/^ /; /" >>$@ + +$(PYTHON.IMPLIB): $(PYTHON.DEF) + $(IMPLIB) -o $@ $^ + +$(PYTHON.EXEIMP): $(PYTHON.DEF) + $(IMPLIB) -o $@ $^ + +$(PYTHON.DLL): $(OUT)dllentry$O $(PYTHON.LIB) $(PYTHON.DEF) + +# Explicit make targets for the .EXEs to be able to use LD to link +# (so that fork() will work if required) + +$(PYTHON.EXE): $(SRC.EXE) $(PYTHON.EXEIMP) $(OUT)python.def + $(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.EXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)python.def + $(EXEOPT) -aq $(PYTHON.EXE) -h$(NFILES) + +$(PYTHONPM.EXE): $(SRC.PMEXE) $(PYTHON.EXEIMP) $(OUT)pythonpm.def + $(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.PMEXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)pythonpm.def + $(EXEOPT) -aq $(PYTHONPM.EXE) -h$(NFILES) + +$(PGEN.EXE): $(OBJ.PGEN) $(OUT)pgen.def + +# Explicit building instructions for those external modules that require +# awkward handling (due e.g. to non-std naming, or multiple source files) +# - standard modules + +_hotshot$(MODULE.EXT): $(OUT)_hotshot$O $(OUT)_hotshot_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) + +_socket$(MODULE.EXT): $(OUT)socketmodule$O $(OUT)_socket_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) + +# _testcapi needs to be renamed to be useful +_testcapi$(MODULE.EXT): $(OUT)_testcapimodule$O $(OUT)_testcapi_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) + +_testcap$(MODULE.EXT): _testcapi$(MODULE.EXT) + cp $^ $@ + +# unicodedata needs to be renamed to be useful +unicodedata$(MODULE.EXT): $(OUT)unicodedata$O $(OUT)unicodedata_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) $(MODULE_LIBS) + +unicoded$(MODULE.EXT): unicodedata$(MODULE.EXT) + cp $^ $@ + +# - optional modules (requiring other software to be installed) +bsddb185$(MODULE.EXT): $(OUT)bsddbmodule$O $(OUT)bsddb185_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) -ldb $(LIBS) + +crypt$(MODULE.EXT): $(OUT)cryptmodule$O $(OUT)crypt_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) -lufc $(LIBS) + +# The _curses_panel module requires a couple of ncurses library entry +# points, which are best exposed as exports from the _curses module DLL +$(OUT)_curses_m.def: + @echo Creating .DEF file: $@ + @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@ + @echo DESCRIPTION $(DQUOTE)$(DESCRIPTION.$(notdir $*)$(MODLIB.EXT))$(DQUOTE) >>$@ + @echo DATA MULTIPLE NONSHARED >>$@ + @echo EXPORTS >>$@ + @echo init_curses >>$@ + @echo wnoutrefresh >>$@ + @echo _nc_panelhook >>$@ + @echo is_linetouched >>$@ + @echo mvwin >>$@ + @echo stdscr >>$@ + @echo wtouchln >>$@ + +$(OUT)_curses_panel_m.def: + @echo Creating .DEF file: $@ + @echo LIBRARY $(notdir $*) INITINSTANCE TERMINSTANCE >$@ + @echo DESCRIPTION $(DQUOTE)Python standard module $(notdir $*)$(DQUOTE) >>$@ + @echo DATA MULTIPLE NONSHARED >>$@ + @echo IMPORTS >>$@ + @echo _curses.wnoutrefresh >>$@ + @echo _curses._nc_panelhook >>$@ + @echo _curses.is_linetouched >>$@ + @echo _curses.mvwin >>$@ + @echo _curses.stdscr >>$@ + @echo _curses.wtouchln >>$@ + @echo EXPORTS >>$@ + @echo init_curses_panel >>$@ + +_curses$(MODLIB.EXT): $(OUT)_cursesmodule$O $(OUT)_curses_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lncurses + +# curses_panel needs to be renamed to be useful +_curses_panel$(MODULE.EXT): $(OUT)_curses_panel$O $(OUT)_curses_panel_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lpanel + +_curses_$(MODULE.EXT): _curses_panel$(MODULE.EXT) + cp $^ $@ + +dbm$(MODULE.EXT): $(OUT)dbmmodule$O $(OUT)dbm_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lgdbm + +gdbm$(MODULE.EXT): $(OUT)gdbmmodule$O $(OUT)gdbm_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lgdbm + + +# Expat is now distributed with Python, so use the included version +$(OUT)pyexpat$O: ../../Modules/pyexpat.c + $(CC) $(CFLAGS) $(EXPAT.INC) -c -o $@ $^ +$(OUT)xmlparse$O: ../../Modules/expat/xmlparse.c + $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^ +$(OUT)xmlrole$O: ../../Modules/expat/xmlrole.c + $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^ +$(OUT)xmltok$O: ../../Modules/expat/xmltok.c + $(CC) $(CFLAGS) $(EXPAT.INC) $(EXPAT.DEF) -c -o $@ $^ +pyexpat$(MODULE.EXT): $(OUT)pyexpat$O $(OUT)xmlparse$O $(OUT)xmlrole$O \ + $(OUT)xmltok$O $(OUT)pyexpat_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) + +readline$(MODULE.EXT): $(OUT)readline$O $(OUT)readline_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lreadline -lncurses + +#_tkinter$(MODULE.EXT): $(OUT)_tkinter$O $(OUT)tclNotify$O $(OUT)tkappinit$O +_tkinter$(MODULE.EXT): $(OUT)_tkinter$O $(OUT)tclNotify$O \ + $(OUT)_tkinter_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) $(TK_LIBS) + +zlib$(MODULE.EXT): $(OUT)zlibmodule$O $(OUT)zlib_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lz + +bz2$(MODULE.EXT): $(OUT)bz2module$O $(OUT)bz2_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lbz2 + +_ssl$(MODULE.EXT): $(OUT)_ssl$O $(OUT)_ssl_m.def $(PYTHON.IMPLIB) + $(LD) $(LDFLAGS.DLL) -o $@ $(^^) $(L^) $(LIBS) -lssl -lcrypto + +# the test target +test: + -find ../../Lib -name "*.py[co]" -exec rm {} ";" + -./python -E -tt ../../lib/test/regrtest.py -l -u "network" + ./python -E -tt ../../lib/test/regrtest.py -l -u "network" + +-include $(OUTBASE)python.dep