diff options
author | Michel Selten <michel@mselten.demon.nl> | 2003-11-22 20:28:05 +0300 |
---|---|---|
committer | Michel Selten <michel@mselten.demon.nl> | 2003-11-22 20:28:05 +0300 |
commit | 930fc9ee40cd145ab2b2efadb7dbecc6e59d8a14 (patch) | |
tree | c91d1e412d1625e9aa5a8f8432d397f36f9983d7 /intern/python/freeze/checkextensions_win32.py | |
parent | abe3881a19513d42f0167332f874f47df45d905f (diff) |
First action of removing the old Python API stuff from cvs. Removed the
/intern/python stuff.
To remove the directories on your system, do a:
cvs update -P
Diffstat (limited to 'intern/python/freeze/checkextensions_win32.py')
-rw-r--r-- | intern/python/freeze/checkextensions_win32.py | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/intern/python/freeze/checkextensions_win32.py b/intern/python/freeze/checkextensions_win32.py deleted file mode 100644 index 4fbe658bfac..00000000000 --- a/intern/python/freeze/checkextensions_win32.py +++ /dev/null @@ -1,190 +0,0 @@ -"""Extension management for Windows. - -Under Windows it is unlikely the .obj files are of use, as special compiler options -are needed (primarily to toggle the behavior of "public" symbols. - -I dont consider it worth parsing the MSVC makefiles for compiler options. Even if -we get it just right, a specific freeze application may have specific compiler -options anyway (eg, to enable or disable specific functionality) - -So my basic stragtegy is: - -* Have some Windows INI files which "describe" one or more extension modules. - (Freeze comes with a default one for all known modules - but you can specify - your own). -* This description can include: - - The MSVC .dsp file for the extension. The .c source file names - are extraced from there. - - Specific compiler/linker options - - Flag to indicate if Unicode compilation is expected. - -At the moment the name and location of this INI file is hardcoded, -but an obvious enhancement would be to provide command line options. -""" - -import os, string, sys -try: - import win32api -except ImportError: - win32api = None # User has already been warned - -class CExtension: - """An abstraction of an extension implemented in C/C++ - """ - def __init__(self, name, sourceFiles): - self.name = name - # A list of strings defining additional compiler options. - self.sourceFiles = sourceFiles - # A list of special compiler options to be applied to - # all source modules in this extension. - self.compilerOptions = [] - # A list of .lib files the final .EXE will need. - self.linkerLibs = [] - - def GetSourceFiles(self): - return self.sourceFiles - - def AddCompilerOption(self, option): - self.compilerOptions.append(option) - def GetCompilerOptions(self): - return self.compilerOptions - - def AddLinkerLib(self, lib): - self.linkerLibs.append(lib) - def GetLinkerLibs(self): - return self.linkerLibs - -def checkextensions(unknown, extra_inis, prefix): - # Create a table of frozen extensions - - defaultMapName = os.path.join( os.path.split(sys.argv[0])[0], "extensions_win32.ini") - if not os.path.isfile(defaultMapName): - sys.stderr.write("WARNING: %s can not be found - standard extensions may not be found" % defaultMapName) # MAART: mapFileName) - else: - # must go on end, so other inis can override. - extra_inis.append(defaultMapName) - - ret = [] - for mod in unknown: - for ini in extra_inis: -# print "Looking for", mod, "in", win32api.GetFullPathName(ini),"...", - defn = get_extension_defn( mod, ini, prefix ) - if defn is not None: -# print "Yay - found it!" - ret.append( defn ) - break -# print "Nope!" - else: # For not broken! - sys.stderr.write("No definition of module %s in any specified map file.\n" % (mod)) - - return ret - -def get_extension_defn(moduleName, mapFileName, prefix): - if win32api is None: return None - os.environ['PYTHONPREFIX'] = prefix - dsp = win32api.GetProfileVal(moduleName, "dsp", "", mapFileName) - if dsp=="": - return None - - # We allow environment variables in the file name - dsp = win32api.ExpandEnvironmentStrings(dsp) - # If the path to the .DSP file is not absolute, assume it is relative - # to the description file. - if not os.path.isabs(dsp): - dsp = os.path.join( os.path.split(mapFileName)[0], dsp) - # Parse it to extract the source files. - sourceFiles = parse_dsp(dsp) - if sourceFiles is None: - return None - - module = CExtension(moduleName, sourceFiles) - # Put the path to the DSP into the environment so entries can reference it. - os.environ['dsp_path'] = os.path.split(dsp)[0] - os.environ['ini_path'] = os.path.split(mapFileName)[0] - - cl_options = win32api.GetProfileVal(moduleName, "cl", "", mapFileName) - if cl_options: - module.AddCompilerOption(win32api.ExpandEnvironmentStrings(cl_options)) - - exclude = win32api.GetProfileVal(moduleName, "exclude", "", mapFileName) - exclude = string.split(exclude) - - if win32api.GetProfileVal(moduleName, "Unicode", 0, mapFileName): - module.AddCompilerOption('/D UNICODE /D _UNICODE') - - libs = string.split(win32api.GetProfileVal(moduleName, "libs", "", mapFileName)) - for lib in libs: - module.AddLinkerLib(win32api.ExpandEnvironmentStrings(lib)) - - for exc in exclude: - if exc in module.sourceFiles: - modules.sourceFiles.remove(exc) - - return module - -# Given an MSVC DSP file, locate C source files it uses -# returns a list of source files. -def parse_dsp(dsp): -# print "Processing", dsp - # For now, only support - ret = [] - dsp_path, dsp_name = os.path.split(dsp) - try: - lines = open(dsp, "r").readlines() - except IOError, msg: - sys.stderr.write("%s: %s\n" % (dsp, msg)) - return None - for line in lines: - fields = string.split(string.strip(line), "=", 2) - if fields[0]=="SOURCE": - if string.lower(os.path.splitext(fields[1])[1]) in ['.cpp', '.c']: - ret.append( win32api.GetFullPathName(os.path.join(dsp_path, fields[1] ) ) ) - return ret - -def write_extension_table(fname, modules): - fp = open(fname, "w") - try: - fp.write (ext_src_header) - # Write fn protos - for module in modules: - # bit of a hack for .pyd's as part of packages. - name = string.split(module.name,'.')[-1] - fp.write('extern void init%s(void);\n' % (name) ) - # Write the table - fp.write (ext_tab_header) - for module in modules: - name = string.split(module.name,'.')[-1] - fp.write('\t{"%s", init%s},\n' % (name, name) ) - - fp.write (ext_tab_footer) - fp.write(ext_src_footer) - finally: - fp.close() - - -ext_src_header = """\ -#include "Python.h" -""" - -ext_tab_header = """\ - -static struct _inittab extensions[] = { -""" - -ext_tab_footer = """\ - /* Sentinel */ - {0, 0} -}; -""" - -ext_src_footer = """\ -extern DL_IMPORT(int) PyImport_ExtendInittab(struct _inittab *newtab); - -int PyInitFrozenExtensions() -{ - return PyImport_ExtendInittab(extensions); -} - -""" - - |