Mercurial > pygame
view config.py @ 3182:0c07af110477 docs-changes
Ignore Sphinx-generated files
| author | Thomas Kluyver <takowl@gmail.com> |
|---|---|
| date | Wed, 09 Jan 2013 22:35:43 +0000 |
| parents | 55a175eb7c7b |
| children |
line wrap: on
line source
#!/usr/bin/env python # For MinGW build requires Python 2.4 or better and win32api. """Quick tool to help setup the needed paths and flags in your Setup file. This will call the appropriate sub-config scripts automatically. each platform config file only needs a "main" routine that returns a list of instances. the instances must contain the following variables. name: name of the dependency, as references in Setup (SDL, FONT, etc) inc_dir: path to include lib_dir: library directory lib: name of library to be linked to found: true if the dep is available cflags: extra compile flags """ import msysio import mingwcfg import sys, os, shutil def print_(*args, **kwds): """Simular to the Python 3.0 print function""" # This not only supports MSYS but is also a head start on the move to # Python 3.0. Also, this function can be overridden for testing. msysio.print_(*args, **kwds) def confirm(message): "ask a yes/no question, return result" reply = msysio.raw_input_("\n%s [Y/n]:" % message) if reply and reply[0].lower() == 'n': return False return True def is_msys_mingw(): """Return true if this in an MinGW/MSYS build The user may prompted for confirmation so only call this function once. """ if msysio.is_msys(): return 1 if ('MINGW_ROOT_DIRECTORY' in os.environ or os.path.isfile(mingwcfg.path)): return confirm("Is this an mingw/msys build") return 0 def prepdep(dep, basepath): "add some vars to a dep" if dep.libs: dep.line = dep.name + ' =' for lib in dep.libs: dep.line += ' -l' + lib else: dep.line = dep.name + ' = -I.' dep.varname = '$('+dep.name+')' if not dep.found: if dep.name == 'SDL': #fudge if this is unfound SDL dep.line = 'SDL = -I/NEED_INC_PATH_FIX -L/NEED_LIB_PATH_FIX -lSDL' dep.varname = '$('+dep.name+')' dep.found = 1 return inc = lid = lib = "" if basepath: if dep.inc_dir: inc = ' -I$(BASE)'+dep.inc_dir[len(basepath):] if dep.lib_dir: lid = ' -L$(BASE)'+dep.lib_dir[len(basepath):] else: if dep.inc_dir: inc = ' -I' + dep.inc_dir if dep.lib_dir: lid = ' -L' + dep.lib_dir libs = '' for lib in dep.libs: libs += ' -l' + lib if dep.name.startswith('COPYLIB_'): dep.line = dep.name + libs + lid else: dep.line = dep.name+' =' + inc + lid + ' ' + dep.cflags + libs def writesetupfile(deps, basepath, additional_lines): "create a modified copy of Setup.in" origsetup = open('Setup.in', 'r') newsetup = open('Setup', 'w') line = '' while line.find('#--StartConfig') == -1: newsetup.write(line) line = origsetup.readline() while line.find('#--EndConfig') == -1: line = origsetup.readline() if basepath: newsetup.write('BASE = ' + basepath + '\n') for d in deps: newsetup.write(d.line + '\n') lines = origsetup.readlines() # overwrite lines which already exist with new ones. new_lines = [] for l in lines: addit = 1 parts = l.split() for al in additional_lines: aparts = al.split() if aparts and parts: if aparts[0] == parts[0]: #print ('the same!' + repr(aparts) + repr(parts)) #the same, we should not add the old one. #It will be overwritten by the new one. addit = 0 if addit: new_lines.append(l) new_lines.extend(additional_lines) lines = new_lines for line in lines: useit = 1 if not line.startswith('COPYLIB'): for d in deps: if line.find(d.varname)!=-1 and not d.found: useit = 0 newsetup.write('#'+line) break if useit: newsetup.write(line) def main(): additional_platform_setup = [] if (sys.platform == 'win32' and # Note that msys builds supported for 2.6 and greater. Use prebuilt. (sys.version_info >= (2, 6) or not is_msys_mingw())): print_('Using WINDOWS configuration...\n') import config_win as CFG elif sys.platform == 'win32': print_('Using WINDOWS mingw/msys configuration...\n') import config_msys as CFG elif sys.platform == 'darwin': print_('Using Darwin configuration...\n') import config_darwin as CFG additional_platform_setup = open("Setup_Darwin.in", "r").readlines() else: print_('Using UNIX configuration...\n') import config_unix as CFG additional_platform_setup = open("Setup_Unix.in", "r").readlines() if os.path.isfile('Setup'): if "-auto" in sys.argv or confirm('Backup existing "Setup" file'): shutil.copyfile('Setup', 'Setup.bak') if not "-auto" in sys.argv and os.path.isdir('build'): if confirm('Remove old build directory (force recompile)'): shutil.rmtree('build', 0) deps = CFG.main() if deps: basepath = None for d in deps: prepdep(d, basepath) writesetupfile(deps, basepath, additional_platform_setup) print_("""\nIf you get compiler errors during install, doublecheck the compiler flags in the "Setup" file.\n""") else: print_("""\nThere was an error creating the Setup file, check for errors or make a copy of "Setup.in" and edit by hand.""") if __name__ == '__main__': main()
