mirror of
https://github.com/python/cpython.git
synced 2025-07-23 19:25:40 +00:00
Patch #1088716: build and incorporate libpython24.a. Backported to 2.4
This commit is contained in:
parent
ac191dac9a
commit
9fda931ff0
1 changed files with 51 additions and 1 deletions
|
@ -1,10 +1,11 @@
|
||||||
# Python MSI Generator
|
# Python MSI Generator
|
||||||
# (C) 2003 Martin v. Loewis
|
# (C) 2003 Martin v. Loewis
|
||||||
# See "FOO" in comments refers to MSDN sections with the title FOO.
|
# See "FOO" in comments refers to MSDN sections with the title FOO.
|
||||||
import msilib, schema, sequence, os, glob, time
|
import msilib, schema, sequence, os, glob, time, re
|
||||||
from msilib import Feature, CAB, Directory, Dialog, Binary, add_data
|
from msilib import Feature, CAB, Directory, Dialog, Binary, add_data
|
||||||
import uisample
|
import uisample
|
||||||
from win32com.client import constants
|
from win32com.client import constants
|
||||||
|
from distutils.spawn import find_executable
|
||||||
|
|
||||||
# Settings can be overridden in config.py below
|
# Settings can be overridden in config.py below
|
||||||
# 1 for Itanium build
|
# 1 for Itanium build
|
||||||
|
@ -116,6 +117,52 @@ if major+minor <= "23":
|
||||||
'parser.pyd',
|
'parser.pyd',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# Build the mingw import library, libpythonXY.a
|
||||||
|
# This requires 'nm' and 'dlltool' executables on your PATH
|
||||||
|
def build_mingw_lib(lib_file, def_file, dll_file, mingw_lib):
|
||||||
|
warning = "WARNING: %s - libpythonXX.a not built"
|
||||||
|
nm = find_executable('nm')
|
||||||
|
dlltool = find_executable('dlltool')
|
||||||
|
|
||||||
|
if not nm or not dlltool:
|
||||||
|
print warning % "nm and/or dlltool were not found"
|
||||||
|
return False
|
||||||
|
|
||||||
|
nm_command = '%s -Cs %s' % (nm, lib_file)
|
||||||
|
dlltool_command = "%s --dllname %s --def %s --output-lib %s" % \
|
||||||
|
(dlltool, dll_file, def_file, mingw_lib)
|
||||||
|
export_match = re.compile(r"^_imp__(.*) in python\d+\.dll").match
|
||||||
|
|
||||||
|
f = open(def_file,'w')
|
||||||
|
print >>f, "LIBRARY %s" % dll_file
|
||||||
|
print >>f, "EXPORTS"
|
||||||
|
|
||||||
|
nm_pipe = os.popen(nm_command)
|
||||||
|
for line in nm_pipe.readlines():
|
||||||
|
m = export_match(line)
|
||||||
|
if m:
|
||||||
|
print >>f, m.group(1)
|
||||||
|
f.close()
|
||||||
|
exit = nm_pipe.close()
|
||||||
|
|
||||||
|
if exit:
|
||||||
|
print warning % "nm did not run successfully"
|
||||||
|
return False
|
||||||
|
|
||||||
|
if os.system(dlltool_command) != 0:
|
||||||
|
print warning % "dlltool did not run successfully"
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Target files (.def and .a) go in PCBuild directory
|
||||||
|
lib_file = os.path.join(srcdir, "PCBuild", "python%s%s.lib" % (major, minor))
|
||||||
|
def_file = os.path.join(srcdir, "PCBuild", "python%s%s.def" % (major, minor))
|
||||||
|
dll_file = "python%s%s.dll" % (major, minor)
|
||||||
|
mingw_lib = os.path.join(srcdir, "PCBuild", "libpython%s%s.a" % (major, minor))
|
||||||
|
|
||||||
|
have_mingw = build_mingw_lib(lib_file, def_file, dll_file, mingw_lib)
|
||||||
|
|
||||||
if testpackage:
|
if testpackage:
|
||||||
ext = 'px'
|
ext = 'px'
|
||||||
testprefix = 'x'
|
testprefix = 'x'
|
||||||
|
@ -924,6 +971,9 @@ def add_files(db):
|
||||||
for f in dlls:
|
for f in dlls:
|
||||||
lib.add_file(f.replace('pyd','lib'))
|
lib.add_file(f.replace('pyd','lib'))
|
||||||
lib.add_file('python%s%s.lib' % (major, minor))
|
lib.add_file('python%s%s.lib' % (major, minor))
|
||||||
|
# Add the mingw-format library
|
||||||
|
if have_mingw:
|
||||||
|
lib.add_file('libpython%s%s.a' % (major, minor))
|
||||||
if have_tcl:
|
if have_tcl:
|
||||||
# Add Tcl/Tk
|
# Add Tcl/Tk
|
||||||
tcldirs = [(root, '../tcltk/lib', 'tcl')]
|
tcldirs = [(root, '../tcltk/lib', 'tcl')]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue