X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4fc5f509324d85f0d48586cdd9f326709cfc1bec..fe6b1b853aaa900356d12f69e8e3d84467221f4c:/build/bakefiles/wxwin.py diff --git a/build/bakefiles/wxwin.py b/build/bakefiles/wxwin.py index f2e9b2fa75..bad7270fa0 100644 --- a/build/bakefiles/wxwin.py +++ b/build/bakefiles/wxwin.py @@ -1,12 +1,33 @@ # -# Helper functions for wxWindows bakefiles +# Helper functions for wxWidgets bakefiles # # $Id$ # +import utils + +# We use 'CFG' option in places where bakefile doesn't like it, so we must +# register a substitution function for it that provides additional knowledge +# about the option (in this case that it does not contain dir separators and +# so utils.nativePaths() doesn't have to do anything with it): + +try: + # this fails in 0.1.4 and 0.1.5 has different subst.callbacks signature: + utils.checkBakefileVersion('0.1.5') + def __noopSubst(name, func, caller): + return '$(%s)' % name +except AttributeError: + def __noopSubst(func, name): + return '$(%s)' % name +utils.addSubstituteCallback('CFG', __noopSubst) +utils.addSubstituteCallback('LIBDIRNAME', __noopSubst) +utils.addSubstituteCallback('SETUPHDIR', __noopSubst) +utils.addSubstituteCallback('OBJS', __noopSubst) + + def mk_wxid(id): - """Creates wxWindows library identifier from bakefile target ID that + """Creates wxWidgets library identifier from bakefile target ID that follows this convention: DLLs end with 'dll', static libraries end with 'lib'. If withPrefix=1, then _wxid is returned instead of wxid.""" @@ -17,19 +38,33 @@ def mk_wxid(id): return wxid +# All libs that are part of the main library: +MAIN_LIBS = ['mono', 'base', 'core', 'adv', 'html', 'xml', 'net', + 'media', 'qa', 'xrc', 'aui', 'propgrid', 'richtext', 'stc'] # List of library names/ids for categories with different names: -LIBS_BASE = ['base'] -LIBS_GUI = ['core', 'html'] +LIBS_NOGUI = ['xml', 'net'] +LIBS_GUI = ['core', 'adv', 'html', 'gl', 'qa', 'xrc', 'media', + 'aui', 'propgrid', 'richtext', 'stc'] +# Additional libraries that must be linked in: +EXTRALIBS = { + 'gl' : '$(EXTRALIBS_OPENGL)', + 'xml' : '$(EXTRALIBS_XML)', + 'html' : '$(EXTRALIBS_HTML)', + 'adv' : '$(PLUGIN_ADV_EXTRALIBS)', + 'media' : '$(EXTRALIBS_MEDIA)', +} def mkLibName(wxid): """Returns string that can be used as library name, including name suffixes, prefixes, version tags etc. This must be kept in sync with variables defined in common.bkl!""" if wxid == 'mono': - return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)$(WXVERSIONTAG)' - if wxid in LIBS_BASE: - return '$(WXNAMEPREFIX)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)' % wxid - return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)' % wxid + return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)$(WXVERSIONTAG)$(HOST_SUFFIX)' + if wxid == 'base': + return '$(WXNAMEPREFIX)$(WXNAMESUFFIX)$(WXVERSIONTAG)$(HOST_SUFFIX)' + if wxid in LIBS_NOGUI: + return '$(WXNAMEPREFIX)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)$(HOST_SUFFIX)' % wxid + return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)$(HOST_SUFFIX)' % wxid def mkDllName(wxid): """Returns string that can be used as DLL name, including name @@ -37,24 +72,36 @@ def mkDllName(wxid): with variables defined in common.bkl!""" if wxid == 'mono': return '$(WXDLLNAMEPREFIXGUI)$(WXNAMESUFFIX)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' - if wxid in LIBS_BASE: + if wxid == 'base': + return '$(WXDLLNAMEPREFIX)$(WXNAMESUFFIX)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' + if wxid in LIBS_NOGUI: return '$(WXDLLNAMEPREFIX)$(WXNAMESUFFIX)_%s$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' % wxid return '$(WXDLLNAMEPREFIXGUI)$(WXNAMESUFFIX)_%s$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' % wxid def libToLink(wxlibname): """Returns string to pass to when linking against 'wxlibname'. - libToLink('foo') returns '$(WXLIB_FOO)' which must be defined in - common.bkl as either nothing (in monolithic build) or mkLibName('foo') - (otherwise).""" - return '$(WXLIB_%s)' % wxlibname.upper() + For one of main libraries, libToLink('foo') returns '$(WXLIB_FOO)' which + must be defined in common.bkl as either nothing (in monolithic build) or + mkLibName('foo') (otherwise). + """ + if wxlibname in MAIN_LIBS: + return '$(WXLIB_%s)' % wxlibname.upper() + else: + return mkLibName(wxlibname) +def extraLdflags(wxlibname): + if wxlibname in EXTRALIBS: + return EXTRALIBS[wxlibname] + else: + return '' + wxVersion = None VERSION_FILE = '../../include/wx/version.h' def getVersion(): - """Returns wxWindows version as a tuple: (major,minor,release).""" + """Returns wxWidgets version as a tuple: (major,minor,release).""" global wxVersion if wxVersion == None: f = open(VERSION_FILE, 'rt') @@ -63,11 +110,11 @@ def getVersion(): major = minor = release = None for l in lines: if not l.startswith('#define'): continue - splitted = l.strip().split() - if splitted[0] != '#define': continue - if len(splitted) < 3: continue - name = splitted[1] - value = splitted[2] + splitline = l.strip().split() + if splitline[0] != '#define': continue + if len(splitline) < 3: continue + name = splitline[1] + value = splitline[2] if value == None: continue if name == 'wxMAJOR_VERSION': major = int(value) if name == 'wxMINOR_VERSION': minor = int(value) @@ -83,3 +130,25 @@ def getVersionMinor(): return getVersion()[1] def getVersionRelease(): return getVersion()[2] + + +def headersOnly(files): + """Filters 'files' so that only headers are left. Used with + to add headers to VC++ projects but not files such + as arrimpl.cpp.""" + + def callback(cond, sources): + prf = suf = '' + if sources[0].isspace(): prf=' ' + if sources[-1].isspace(): suf=' ' + retval = [] + for s in sources.split(): + if s.endswith('.h'): + retval.append(s) + return '%s%s%s' % (prf, ' '.join(retval), suf) + return utils.substitute2(files, callback) + + +def makeDspDependency(lib): + """Returns suitable entry for for main libs.""" + return '%s:$(nativePaths(WXTOPDIR))build\\msw\\wx_%s.dsp' % (lib,lib)