mirror of https://github.com/python/cpython
Changes for building under windows.
This commit is contained in:
parent
41b9f00e8f
commit
58a594829c
|
@ -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()
|
||||
|
|
|
@ -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:
|
Loading…
Reference in New Issue