Changes for building under windows.

This commit is contained in:
Guido van Rossum 1997-08-14 01:45:33 +00:00
parent 41b9f00e8f
commit 58a594829c
2 changed files with 87 additions and 9 deletions

View File

@ -28,6 +28,13 @@ Options:
-h: Print this help message.
-w: Toggle Windows (NT or 95) behavior.
(For debugging only -- on a win32 platform, win32 behaviour
is automatic.)
-s subsystem: Specify the subsystem; 'windows' or 'console' (default).
(For Windows only.)
Arguments:
script.py: The Python script to be executed by the resulting binary.
@ -76,16 +83,18 @@ def main():
extensions = []
path = sys.path
odir = ''
win = sys.platform[:3] == 'win'
# output files
frozen_c = 'frozen.c'
config_c = 'config.c'
target = 'a.out' # normally derived from script name
makefile = 'Makefile'
subsystem = 'console'
# parse command line
try:
opts, args = getopt.getopt(sys.argv[1:], 'he:o:p:P:')
opts, args = getopt.getopt(sys.argv[1:], 'he:o:p:P:s:w')
except getopt.error, msg:
usage('getopt error: ' + str(msg))
@ -102,6 +111,12 @@ def main():
prefix = a
if o == '-P':
exec_prefix = a
if o == '-w':
win = not win
if o == '-s':
if not win:
usage("-s subsystem option only on Windows")
subsystem = a
# default prefix and exec_prefix
if not exec_prefix:
@ -122,7 +137,7 @@ def main():
binlib = exec_prefix
incldir = os.path.join(prefix, 'Include')
config_c_in = os.path.join(prefix, 'Modules', 'config.c.in')
frozenmain_c = os.path.join(prefix, 'Modules', 'frozenmain.c')
frozenmain_c = os.path.join(prefix, 'Python', 'frozenmain.c')
makefile_in = os.path.join(exec_prefix, 'Modules', 'Makefile')
else:
binlib = os.path.join(exec_prefix,
@ -141,17 +156,22 @@ def main():
usage('needed directory %s not found' % dir)
if not os.path.isdir(dir):
usage('%s: not a directory' % dir)
for file in [config_c_in, makefile_in] + supp_sources:
if win:
files = supp_sources
else:
files = [config_c_in, makefile_in] + supp_sources
for file in supp_sources:
if not os.path.exists(file):
usage('needed file %s not found' % file)
if not os.path.isfile(file):
usage('%s: not a plain file' % file)
for dir in extensions:
setup = os.path.join(dir, 'Setup')
if not os.path.exists(setup):
usage('needed file %s not found' % setup)
if not os.path.isfile(setup):
usage('%s: not a plain file' % setup)
if not win:
for dir in extensions:
setup = os.path.join(dir, 'Setup')
if not os.path.exists(setup):
usage('needed file %s not found' % setup)
if not os.path.isfile(setup):
usage('%s: not a plain file' % setup)
# check that enough arguments are passed
if not args:
@ -222,6 +242,19 @@ def main():
frozen_c)
os.rename(backup, frozen_c)
if win:
# Taking a shortcut here...
import winmakemakefile
outfp = open(makefile, 'w')
try:
winmakemakefile.makemakefile(outfp,
locals(),
[frozenmain_c, frozen_c],
target)
finally:
outfp.close()
return
builtins = []
unknown = []
mods = dict.keys()

View File

@ -0,0 +1,45 @@
import sys, os, string
def makemakefile(outfp, vars, files, target):
save = sys.stdout
try:
sys.stdout = outfp
realwork(vars, files, target)
finally:
sys.stdout = save
def realwork(vars, files, target):
print "# Makefile for Windows (NT or 95) generated by freeze.py script"
print
print "target =", target
print "pythonhome =", vars['prefix']
print "pythonlib =", vars['exec_prefix'] + "/pcbuild/release/python15.lib"
print "subsystem =", vars['subsystem']
print
print "all: $(target).exe"
print
objects = []
for file in files:
base = os.path.basename(file)
base, ext = os.path.splitext(base)
objects.append(base + ".obj")
print "%s.obj: %s" % (base, file)
print "\t$(CC) -c $(cdl)",
print "-I$(pythonhome)/Include -I$(pythonhome)/PC \\"
print "\t\t$(cflags) $(cdebug) $(cinclude) \\"
print "\t\t", file
print
print "$(target).exe:",
for obj in objects: print obj,
print
print "\tlink -out:$(target).exe",
for obj in objects: print obj,
print "\\"
print "\t\t$(pythonlib) $(lcustom) shell32.lib comdlg32.lib wsock32.lib \\"
print "\t\t-subsystem:$(subsystem) $(resources)"
# Local Variables:
# indent-tabs-mode: nil
# End: