Staging
v0.8.1
Revision 83ac0144fa3041556aa4f3952ebd979e0189a19c authored by Neal Norwitz on 28 July 2008, 05:06:20 UTC, committed by Neal Norwitz on 28 July 2008, 05:06:20 UTC
Issue #2620: Overflow checking when allocating or reallocating memory
was not always being done properly in some python types and extension
modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
all been updated to perform better checks and places in the code that
would previously leak memory on the error path when such an allocation
failed have been fixed.
1 parent c8e4bed
Raw File
Makefile
# RISC OS Python
LIBSROOT = $.AcornC_C++.Libraries

# You may need to change some of the following
OSLIB = $(LIBSROOT).OSLib
CLIB = $(LIBSROOT).clib
TCPIPLIB = $(LIBSROOT).TCPIPLibs
DLKLIB = $(LIBSROOT).dlk
ZLIB = $(LIBSROOT).zlib
BZLIB = $(LIBSROOT).bzlib
EXPAT = $(LIBSROOT).expat.lib

OBJSCAN = $(DLKLIB).objscan
MAKEDLK = $(DLKLIB).makedlk

# change from time to time (don't forget to change !Boot also)
TARGET=Python23
BUILD=40


#
# You shouldn't need to change anything below this line
#
DLKFLAG= -DDLK
DLKOBJS = $(DLKLIB).o.dlk_load @.o.linktab

HEADERS = @,$(TCPIPLIB),@.^.Include,@.^.Modules,@.^.Objects,@.^.Python,$(CLIB),$(OSLIB),$(DLKLIB)

CFLAGS = -c  $(DLKFLAG) -DRISCOS -DHAVE_CONFIG_H -wadP -throwback -APCS 3/32bit/fpe3

CC = cc $(CFLAGS) -j$(HEADERS)
CCEXPAT = cc $(CFLAGS) -j$(HEADERS),$(EXPAT) -DHAVE_EXPAT_H

LINK = link
LINKFLAGS = -aif #-NOUNUSED #-d
LOADLIBS = $(TCPIPLIB).o.unixlib $(TCPIPLIB).o.inetlib $(TCPIPLIB).o.socklib $(CLIB).o.Stubs $(OSLIB).o.OSLib32 $(DLKOBJS)

LIBFILE = libfile -c 


.c.o  :
       $(CC) -o $@ $*.c

MAIN_PYTHON =\
	@.^.Modules.o.python

LIB_PYTHON =\
	@.^.LibPython

# code for main Python binary
MODULES_STATIC =\
	@.^.Modules.o.main\
	@.Modules.o.config\
	@.^.Modules.o.getbuildinfo\
	@.Modules.o.getpath_riscos\
	@.Modules.o.riscosmodule\
	@.^.Modules.o.gcmodule


# dynamic Modules
MODULES_DYNAMIC =\
	@.^.Lib.array/pyd\
	@.^.Lib.audioop/pyd\
	@.^.Lib.binascii/pyd\
	@.^.Lib.bz2/pyd\
	@.^.Lib.cmath/pyd\
	@.^.Lib.cPickle/pyd\
	@.^.Lib.cStringIO/pyd\
	@.^.Lib.datetime/pyd\
	@.^.Lib.errno/pyd\
	@.^.Lib.imageop/pyd\
	@.^.Lib.itertools/pyd\
	@.^.Lib.math/pyd\
	@.^.Lib.md5/pyd\
	@.^.Lib.operator/pyd\
	@.^.Lib.parser/pyd\
	@.^.Lib.rgbimg/pyd\
	@.^.Lib.sha/pyd\
	@.^.Lib.signal/pyd\
	@.^.Lib.struct/pyd\
	@.^.Lib.time/pyd\
	@.^.Lib._locale/pyd\
	@.^.Lib.zlib/pyd\
	@.^.Lib.select/pyd\
	@.^.Lib._socket/pyd\
	@.^.Lib._codecs/pyd\
	@.^.Lib._weakref/pyd\
	@.^.Lib._testcapi/pyd\
	@.^.Lib.unicodedata/pyd\
	@.^.Lib.pyexpat/pyd\
	@.^.Lib.plat-riscos.drawf/pyd\
	@.^.Lib.plat-riscos.swi/pyd\
	@.^.Lib._sre/pyd\
	@.^.Lib.xxsubtype/pyd\
	@.^.Lib._symtable/pyd\
	@.^.Lib._random/pyd\
	@.^.Lib.zipimport/pyd\
	@.^.Lib._csv/pyd


OBJECTS_PYTHON =\
	@.^.Python.o.traceback\
	@.^.Python.o.sysmodule\
	@.^.Python.o.structmember\
	@.^.Python.o.strdup\
	@.^.Python.o.sigcheck\
	@.^.Python.o.pythonrun\
	@.^.Python.o.pystate\
	@.^.Python.o.pyfpe\
	@.^.Python.o.mystrtoul\
	@.^.Python.o.mysnprintf\
	@.^.Python.o.modsupport\
	@.^.Python.o.marshal\
	@.^.Python.o.importdl\
	@.^.Python.o.import\
	@.^.Python.o.graminit\
	@.^.Python.o.getversion\
	@.^.Python.o.getplatform\
	@.^.Python.o.getopt\
	@.^.Python.o.getcopyright\
	@.^.Python.o.getcompiler\
	@.^.Python.o.getargs\
	@.^.Python.o.frozenmain\
	@.^.Python.o.frozen\
	@.^.Python.o.errors\
	@.^.Python.o.compile\
	@.^.Python.o.ceval\
	@.^.Python.o.bltinmodule\
	@.^.Python.o.exceptions\
	@.^.Python.o.codecs\
	@.^.Python.o.symtable\
	@.^.Python.o.future


OBJECTS_RISCOS = \
	@.Python.o.dynload_riscos\
	@.Python.o.getcwd_riscos\
	@.Python.o.getmtime_riscos\
	@.o.unixstuff


OBJECTS_OBJECTS =\
	@.^.Objects.o.typeobject\
	@.^.Objects.o.tupleobject\
	@.^.Objects.o.stringobject\
	@.^.Objects.o.sliceobject\
	@.^.Objects.o.rangeobject\
	@.^.Objects.o.object\
	@.^.Objects.o.obmalloc\
	@.^.Objects.o.moduleobject\
	@.^.Objects.o.methodobject\
	@.^.Objects.o.longobject\
	@.^.Objects.o.listobject\
	@.^.Objects.o.intobject\
	@.^.Objects.o.boolobject\
	@.^.Objects.o.iterobject\
	@.^.Objects.o.funcobject\
	@.^.Objects.o.frameobject\
	@.^.Objects.o.floatobject\
	@.^.Objects.o.fileobject\
	@.^.Objects.o.enumobject\
	@.^.Objects.o.dictobject\
	@.^.Objects.o.complexobject\
	@.^.Objects.o.cobject\
	@.^.Objects.o.classobject\
	@.^.Objects.o.cellobject\
	@.^.Objects.o.bufferobject\
	@.^.Objects.o.abstract\
	@.^.Objects.o.unicodectype\
	@.^.Objects.o.unicodeobject\
	@.^.Objects.o.descrobject\
	@.^.Objects.o.weakrefobject\
	@.^.Objects.o.structseq


OBJECTS_PARSER =\
	@.^.Parser.o.tokenizer\
	@.^.Parser.o.printgrammar\
	@.^.Parser.o.parsetok\
	@.^.Parser.o.parser\
	@.^.Parser.o.node\
	@.^.Parser.o.myreadline\
	@.^.Parser.o.metagrammar\
	@.^.Parser.o.listnode\
	@.^.Parser.o.intrcheck\
	@.^.Parser.o.grammar1\
	@.^.Parser.o.grammar\
	@.^.Parser.o.firstsets\
	@.^.Parser.o.bitset\
	@.^.Parser.o.acceler

SUPPORT_FILES = @.^.!Boot @.^.!Run @.^.!Sprites @.^.!Sprites22 @.^.AddToPath

OBJECTS = $(OBJECTS_PYTHON) $(OBJECTS_PARSER) $(MODULES_STATIC) $(OBJECTS_OBJECTS) $(OBJECTS_RISCOS)


all: @.^.$(TARGET) $(MODULES_DYNAMIC) $(SUPPORT_FILES)

@.^.Modules.o.getbuildinfo: @.^.Modules.c.getbuildinfo
       $(CC) -DBUILD=$(BUILD) -o @.^.Modules.o.getbuildinfo @.^.Modules.c.getbuildinfo


$(LIB_PYTHON):	$(OBJECTS)
	$(LIBFILE) $(LIB_PYTHON) $(OBJECTS)

@.^.$(TARGET):  o.linktab $(MAIN_PYTHON) $(LIB_PYTHON)
	$(LINK) -o @.^.$(TARGET) $(MAIN_PYTHON) @.^.LibPython $(LOADLIBS)


#########################################################################
# RISC OS support files
#
@.^.!Boot: support.!Boot
	copy support.!Boot @.^.!Boot ~C~VF
	settype @.^.!Boot feb
@.^.!Run:  support.!Run
	copy support.!Run @.^.!Run ~C~VF
	settype @.^.!Run feb
@.^.!Sprites: support.!Sprites
	copy support.!Sprites @.^.!Sprites ~C~VF
	settype @.^.!Sprites ff9
@.^.!Sprites22: support.!Sprites22
	copy support.!Sprites22 @.^.!Sprites22 ~C~VF
	settype @.^.!Sprites22 ff9
@.^.AddToPath: support.AddToPath
	copy support.AddToPath @.^.AddToPath ~C~VF
	settype @.^.AddToPath ffc


#########################################################################
# Dynamic Modules
#
@.^.Lib.array/pyd: @.^.Modules.o.arraymodule s.linktab
	$(MAKEDLK) -d @.^.Lib.array/pyd -s s.linktab -o @.^.Modules.o.arraymodule -e initarray

@.^.Lib.audioop/pyd: @.^.Modules.o.audioop # s.linktab
	$(MAKEDLK) -d @.^.Lib.audioop/pyd -s s.linktab -o @.^.Modules.o.audioop -e initaudioop

@.^.Lib.binascii/pyd: @.^.Modules.o.binascii s.linktab
	$(MAKEDLK) -d @.^.Lib.binascii/pyd -s s.linktab -o @.^.Modules.o.binascii -e initbinascii

@.^.Lib.cmath/pyd: @.^.Modules.o.cmathmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.cmath/pyd -s s.linktab -o @.^.Modules.o.cmathmodule -e initcmath

@.^.Lib.cPickle/pyd: @.^.Modules.o.cPickle s.linktab
	$(MAKEDLK) -d @.^.Lib.cPickle/pyd -s s.linktab -o @.^.Modules.o.cPickle -e initcPickle

@.^.Lib.cStringIO/pyd: @.^.Modules.o.cStringIO s.linktab
	$(MAKEDLK) -d @.^.Lib.cStringIO/pyd -s s.linktab -o @.^.Modules.o.cStringIO -e initcStringIO

@.^.Lib._csv/pyd: @.^.Modules.o._csv s.linktab
	$(MAKEDLK) -d @.^.Lib._csv/pyd -s s.linktab -o @.^.Modules.o._csv -e init_csv

@.^.Lib.plat-riscos.drawf/pyd: Modules.o.drawfmodule #s.linktab
	$(LINK) -aof -o Modules.o.drawflink Modules.o.drawfmodule $(OSLIB).o.OSLIB32
	$(MAKEDLK) -d @.^.Lib.plat-riscos.drawf/pyd -s s.linktab -o Modules.o.drawflink -e initdrawf

@.^.Lib.datetime/pyd: @.^.Modules.o.datetimemodule s.linktab
	$(MAKEDLK) -d @.^.Lib.datetime/pyd -s s.linktab -o @.^.Modules.o.datetimemodule -e initdatetime

@.^.Lib.errno/pyd: @.^.Modules.o.errnomodule #s.linktab
	$(MAKEDLK) -d @.^.Lib.errno/pyd -s s.linktab -o @.^.Modules.o.errnomodule -e initerrno

@.^.Lib.imageop/pyd: @.^.Modules.o.imageop s.linktab
	$(MAKEDLK) -d @.^.Lib.imageop/pyd -s s.linktab -o @.^.Modules.o.imageop -e initimageop

@.^.Lib.itertools/pyd: @.^.Modules.o.itertoolsmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.itertools/pyd -s s.linktab -o @.^.Modules.o.itertoolsmodule -e inititertools

@.^.Lib.math/pyd: @.^.Modules.o.mathmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.math/pyd -s s.linktab -o @.^.Modules.o.mathmodule -e initmath

@.^.Lib.mmap/pyd: @.^.Modules.o.mmapmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.mmap/pyd -s s.linktab -o @.^.Modules.o.mmapmodule -e initmmap

@.^.Lib.md5/pyd: @.^.Modules.o.md5c @.^.Modules.o.md5module s.linktab
	$(LINK) -aof -o @.^.Modules.o.md5link @.^.Modules.o.md5c @.^.Modules.o.md5module
	$(MAKEDLK) -d @.^.Lib.md5/pyd -s s.linktab -o @.^.Modules.o.md5link -e initmd5

@.^.Lib.operator/pyd: @.^.Modules.o.operator s.linktab
	$(MAKEDLK) -d @.^.Lib.operator/pyd -s s.linktab -o @.^.Modules.o.operator -e initoperator

@.^.Lib.parser/pyd: @.^.Modules.o.parsermodule s.linktab
	$(MAKEDLK) -d @.^.Lib.parser/pyd -s s.linktab -o @.^.Modules.o.parsermodule -e initparser

@.^.Lib.rgbimg/pyd: @.^.Modules.o.rgbimgmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.rgbimg/pyd -s s.linktab -o @.^.Modules.o.rgbimgmodule -e initrgbimg

@.^.Lib.sha/pyd: @.^.Modules.o.shamodule s.linktab
	$(MAKEDLK) -d @.^.Lib.sha/pyd -s s.linktab -o @.^.Modules.o.shamodule -e initsha

@.^.Lib.signal/pyd: @.^.Modules.o.signalmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.signal/pyd -s s.linktab -o @.^.Modules.o.signalmodule -e initsignal

@.^.Lib.strop/pyd: @.^.Modules.o.stropmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.strop/pyd -s s.linktab -o @.^.Modules.o.stropmodule -e initstrop

@.^.Lib.struct/pyd: @.^.Modules.o.structmodule s.linktab
	$(MAKEDLK) -d @.^.Lib.struct/pyd -s s.linktab -o @.^.Modules.o.structmodule -e initstruct

@.^.Lib.plat-riscos.swi/pyd: Modules.o.swimodule s.linktab
	$(LINK) -aof -o Modules.o.swilink Modules.o.swimodule $(OSLIB).o.OSLIB32
	$(MAKEDLK) -d @.^.Lib.plat-riscos.swi/pyd -s s.linktab -o Modules.o.swilink -e initswi

@.^.Lib._locale/pyd: @.^.Modules.o._localemodule s.linktab
	$(MAKEDLK) -d @.^.Lib._locale/pyd -s s.linktab -o @.^.Modules.o._localemodule -e init_locale

@.^.Lib._sre/pyd: @.^.Modules.o._sre s.linktab
	$(MAKEDLK) -d @.^.Lib._sre/pyd -s s.linktab -o @.^.Modules.o._sre -e init_sre

@.^.Lib._codecs/pyd: @.^.Modules.o._codecsmodule s.linktab
	$(MAKEDLK) -d @.^.Lib._codecs/pyd -s s.linktab -o @.^.Modules.o._codecsmodule -e init_codecs

@.^.Lib._weakref/pyd: @.^.Modules.o._weakref s.linktab
	$(MAKEDLK) -d @.^.Lib._weakref/pyd -s s.linktab -o @.^.Modules.o._weakref -e init_weakref

@.^.Lib._testcapi/pyd: @.^.Modules.o._testcapimodule s.linktab
	$(MAKEDLK) -d @.^.Lib._testcapi/pyd -s s.linktab -o @.^.Modules.o._testcapimodule -e init_testcapi

@.^.Lib.unicodedata/pyd: @.^.Modules.o.unicodedata s.linktab
	$(MAKEDLK) -d @.^.Lib.unicodedata/pyd -s s.linktab -o @.^.Modules.o.unicodedata -e initunicodedata

@.^.Lib.xxsubtype/pyd: @.^.Modules.o.xxsubtype s.linktab
	$(MAKEDLK) -d @.^.Lib.xxsubtype/pyd -s s.linktab -o @.^.Modules.o.xxsubtype -e initxxsubtype

@.^.Lib._random/pyd: @.^.Modules.o._randommodule s.linktab
	$(MAKEDLK) -d @.^.Lib._random/pyd -s s.linktab -o @.^.Modules.o._randommodule -e init_random

@.^.Lib._symtable/pyd: @.^.Modules.o.symtablemodule s.linktab
	$(MAKEDLK) -d @.^.Lib._symtable/pyd -s s.linktab -o @.^.Modules.o.symtablemodule -e init_symtable


############################################################################
# Dynamic Modules with other dependencies
#
@.^.Lib.select/pyd:  @.^.Modules.o.selectmodule s.linktab
	$(LINK) -aof -o @.^.Modules.o.selectlink @.^.Modules.o.selectmodule $(TCPIPLIB).o.socklib5
	$(MAKEDLK) -d @.^.Lib.select/pyd -s s.linktab -o @.^.Modules.o.selectlink -e initselect

@.^.Modules.o.selectmodule: @.^.Modules.c.selectmodule
	$(CC) -I$(TCPIPLIB).include -o $@ @.^.Modules.c.selectmodule

@.^.Lib._socket/pyd: @.^.Modules.o.socketmodule s.linktab 
	$(LINK) -aof -o @.^.Modules.o._socketlink @.^.Modules.o.socketmodule $(TCPIPLIB).o.inetlib $(TCPIPLIB).o.unixlib $(TCPIPLIB).o.socklib5
	$(MAKEDLK) -d @.^.Lib._socket/pyd -s s.linktab -o @.^.Modules.o._socketlink -e init_socket

@.^.Modules.o.socketmodule: @.^.Modules.c.socketmodule
	$(CC) -I$(TCPIPLIB).include -o $@ @.^.Modules.c.socketmodule


@.^.Lib.zlib/pyd: @.^.Modules.o.zlibmodule s.linktab
	$(LINK) -aof -o @.^.Modules.o.zliblink @.^.Modules.o.zlibmodule $(ZLIB).zlib
	$(MAKEDLK) -d @.^.Lib.zlib/pyd -s s.linktab -o @.^.Modules.o.zliblink -e initzlib

@.^.Modules.o.zlibmodule: @.^.Modules.c.zlibmodule
	$(CC) -I$(ZLIB) -o $@ @.^.Modules.c.zlibmodule

@.^.Lib.bz2/pyd: @.^.Modules.o.bz2module s.linktab
	$(LINK) -aof -o @.^.Modules.o.bz2link @.^.Modules.o.bz2module $(BZLIB).bzlib
	$(MAKEDLK) -d @.^.Lib.bz2/pyd -s s.linktab -o @.^.Modules.o.bz2link -e initbz2

@.^.Modules.o.bz2module: @.^.Modules.c.bz2module
	$(CC) -I$(BZLIB) -o $@ @.^.Modules.c.bz2module

@.^.Lib.time/pyd: @.^.Modules.o.timemodule s.linktab @.o.sleep
	$(LINK) -aof -o @.^.Modules.o.timelink @.^.Modules.o.timemodule @.o.sleep $(OSLIB).o.OSLib32
	$(MAKEDLK) -d @.^.Lib.time/pyd -s s.linktab -o @.^.Modules.o.timelink -e inittime

#@.^.Lib.time/pyd: @.Modules.o.timemodule s.linktab
#	$(LINK) -aof -o @.Modules.o.timelink @.Modules.o.timemodule $(OSLIB).o.OSLib32
#	$(MAKEDLK) -d @.^.Lib.time/pyd -s s.linktab -o @.Modules.o.timelink -e inittime


@.^.Lib.pyexpat/pyd: @.^.Modules.o.pyexpat s.linktab
	$(LINK) -aof -o @.^.Modules.o.pyexpatlink @.^.Modules.o.pyexpat $(EXPAT).expat_lib
	$(MAKEDLK) -d @.^.Lib.pyexpat/pyd -s s.linktab -o @.^.Modules.o.pyexpatlink -e initpyexpat

@.^.Modules.o.pyexpat: @.^.Modules.c.pyexpat
	$(CCEXPAT) -o $@ @.^.Modules.c.pyexpat

@.^.Lib.zipimport/pyd: @.^.Modules.o.zipimport s.linktab
	$(LINK) -aof -o @.^.Modules.o.zipimportlink @.^.Modules.o.zipimport o.unixstuff $(OSLIB).o.OSLib32
	$(MAKEDLK) -d @.^.Lib.zipimport/pyd -s s.linktab -o @.^.Modules.o.zipimportlink -e initzipimport


##########################################################################
# dynamic linking symbol table
#
o.linktab: s.linktab
	ObjAsm -APCS 3/32bit s.linktab o.linktab

s.linktab: $(OBJECTS)
	$(OBJSCAN) -s s.linktab -o $(OBJECTS) $(clib).o.stubs

##########################################################################
# special targets
#
libclean:
	-wipe @.^.Lib.*/pyc ~C~V
	-wipe @.^.Lib.*/pyo ~C~V
	-wipe @.^.Lib.plat-riscos.*/pyc ~C~V
	-wipe @.^.Lib.plat-riscos.*/pyo ~C~V
	-wipe @.^.Lib.test.*/pyc ~C~V
	-wipe @.^.Lib.test.*/pyo ~C~V
	-wipe @.^.Lib.encodings.*/pyc ~C~V
	-wipe @.^.Lib.encodings.*/pyo ~C~V
	-wipe @.^.Lib.curses.*/pyc ~C~V
	-wipe @.^.Lib.curses.*/pyo ~C~V
	-wipe @.^.Lib.xml.*/pyc ~C~V
	-wipe @.^.Lib.xml.*/pyo ~C~V
	-wipe @.^.Lib.xml.sax.*/pyc ~C~V
	-wipe @.^.Lib.xml.sax.*/pyo ~C~V
	-wipe @.^.Lib.xml.dom.*/pyc ~C~V
	-wipe @.^.Lib.xml.dom.*/pyo ~C~V
	-wipe @.^.Lib.xml.parsers.*/pyc ~C~V
	-wipe @.^.Lib.xml.parsers.*/pyo ~C~V

clean: libclean
	-wipe @.^.Modules.o.* ~C~V
	-wipe @.^.Objects.o.* ~C~V
	-wipe @.^.Parser.o.* ~C~V
	-wipe @.^.Python.o.* ~C~V
	-wipe @.Modules.o.* ~C~V
	-wipe @.Python.o.* ~C~V
	-wipe @.o.* ~C ~V

rebuild: clean clean-support
	remove @.^.$(TARGET)
	-wipe @.^.Lib.*/pyd ~C ~V
	-wipe @.^.Lib.plat-riscos.*/pyd ~C~V
	remove s.linktab
	remove @.^.LibPython

clean-support:
	-wipe @.^.!* ~C~V
	remove @.^.AddToPath

cdirs:
	cdir @.Modules.o
	cdir @.Python.o
	cdir @.s
	cdir @.o
	cdir @.^.Python.o
	cdir @.^.Parser.o
	cdir @.^.Objects.o
	cdir @.^.Modules.o


# Dynamic dependencies:
back to top