]> git.saurik.com Git - wxWidgets.git/blame - build/bakefiles/wxwin.py
Fix a crash in wxExecute() in wxMSW too.
[wxWidgets.git] / build / bakefiles / wxwin.py
CommitLineData
ddf98968 1#
77ffb593 2# Helper functions for wxWidgets bakefiles
ddf98968
VS
3#
4# $Id$
5#
6
7
cff5df9f
VS
8import utils
9
10# We use 'CFG' option in places where bakefile doesn't like it, so we must
11# register a substitution function for it that provides additional knowledge
12# about the option (in this case that it does not contain dir separators and
13# so utils.nativePaths() doesn't have to do anything with it):
b778f9d6
VS
14
15try:
16 # this fails in 0.1.4 and 0.1.5 has different subst.callbacks signature:
17 utils.checkBakefileVersion('0.1.5')
18 def __noopSubst(name, func, caller):
19 return '$(%s)' % name
20except AttributeError:
21 def __noopSubst(func, name):
22 return '$(%s)' % name
cff5df9f 23utils.addSubstituteCallback('CFG', __noopSubst)
404d4609 24utils.addSubstituteCallback('LIBDIRNAME', __noopSubst)
ee929bcf 25utils.addSubstituteCallback('SETUPHDIR', __noopSubst)
8004cb2b 26utils.addSubstituteCallback('OBJS', __noopSubst)
cff5df9f
VS
27
28
ddf98968 29def mk_wxid(id):
77ffb593 30 """Creates wxWidgets library identifier from bakefile target ID that
ddf98968
VS
31 follows this convention: DLLs end with 'dll', static libraries
32 end with 'lib'. If withPrefix=1, then _wxid is returned instead
33 of wxid."""
34 if id.endswith('dll') or id.endswith('lib'):
35 wxid = id[:-3]
36 else:
37 wxid = id
38 return wxid
39
40
591a3be4 41# All libs that are part of the main library:
467d261e 42MAIN_LIBS = ['mono', 'base', 'core', 'adv', 'html', 'xml', 'net', 'webview',
3c3ead1d 43 'media', 'qa', 'xrc', 'aui', 'ribbon', 'propgrid', 'richtext', 'stc']
ddf98968 44# List of library names/ids for categories with different names:
1e6b2edf
VZ
45LIBS_NOGUI = ['xml', 'net']
46LIBS_GUI = ['core', 'adv', 'html', 'gl', 'qa', 'xrc', 'media',
467d261e 47 'aui', 'propgrid', 'richtext', 'stc', 'ribbon', 'webview']
22cef566
VS
48# Additional libraries that must be linked in:
49EXTRALIBS = {
50 'gl' : '$(EXTRALIBS_OPENGL)',
51 'xml' : '$(EXTRALIBS_XML)',
c839485c 52 'html' : '$(EXTRALIBS_HTML)',
c79241a2 53 'adv' : '$(PLUGIN_ADV_EXTRALIBS)',
2f8711ed 54 'media' : '$(EXTRALIBS_MEDIA)',
22cef566 55}
ddf98968
VS
56
57def mkLibName(wxid):
58 """Returns string that can be used as library name, including name
59 suffixes, prefixes, version tags etc. This must be kept in sync
60 with variables defined in common.bkl!"""
61 if wxid == 'mono':
ea66c762 62 return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)$(WXVERSIONTAG)$(HOST_SUFFIX)'
e6978d5b 63 if wxid == 'base':
ea66c762 64 return '$(WXNAMEPREFIX)$(WXNAMESUFFIX)$(WXVERSIONTAG)$(HOST_SUFFIX)'
e6978d5b 65 if wxid in LIBS_NOGUI:
ea66c762
VS
66 return '$(WXNAMEPREFIX)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)$(HOST_SUFFIX)' % wxid
67 return '$(WXNAMEPREFIXGUI)$(WXNAMESUFFIX)_%s$(WXVERSIONTAG)$(HOST_SUFFIX)' % wxid
ddf98968
VS
68
69def mkDllName(wxid):
70 """Returns string that can be used as DLL name, including name
71 suffixes, prefixes, version tags etc. This must be kept in sync
72 with variables defined in common.bkl!"""
73 if wxid == 'mono':
4fc5f509 74 return '$(WXDLLNAMEPREFIXGUI)$(WXNAMESUFFIX)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)'
e6978d5b
VS
75 if wxid == 'base':
76 return '$(WXDLLNAMEPREFIX)$(WXNAMESUFFIX)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)'
77 if wxid in LIBS_NOGUI:
4fc5f509
VS
78 return '$(WXDLLNAMEPREFIX)$(WXNAMESUFFIX)_%s$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' % wxid
79 return '$(WXDLLNAMEPREFIXGUI)$(WXNAMESUFFIX)_%s$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)' % wxid
ddf98968
VS
80
81
82def libToLink(wxlibname):
83 """Returns string to pass to <sys-lib> when linking against 'wxlibname'.
3560dc76
VS
84 For one of main libraries, libToLink('foo') returns '$(WXLIB_FOO)' which
85 must be defined in common.bkl as either nothing (in monolithic build) or
86 mkLibName('foo') (otherwise).
3560dc76
VS
87 """
88 if wxlibname in MAIN_LIBS:
89 return '$(WXLIB_%s)' % wxlibname.upper()
90 else:
91 return mkLibName(wxlibname)
ddf98968 92
591a3be4 93
22cef566
VS
94def extraLdflags(wxlibname):
95 if wxlibname in EXTRALIBS:
96 return EXTRALIBS[wxlibname]
97 else:
98 return ''
ddf98968
VS
99
100wxVersion = None
101VERSION_FILE = '../../include/wx/version.h'
102
103def getVersion():
77ffb593 104 """Returns wxWidgets version as a tuple: (major,minor,release)."""
ddf98968
VS
105 global wxVersion
106 if wxVersion == None:
107 f = open(VERSION_FILE, 'rt')
108 lines = f.readlines()
109 f.close()
110 major = minor = release = None
111 for l in lines:
112 if not l.startswith('#define'): continue
3103e8a9
JS
113 splitline = l.strip().split()
114 if splitline[0] != '#define': continue
115 if len(splitline) < 3: continue
116 name = splitline[1]
117 value = splitline[2]
ddf98968
VS
118 if value == None: continue
119 if name == 'wxMAJOR_VERSION': major = int(value)
120 if name == 'wxMINOR_VERSION': minor = int(value)
121 if name == 'wxRELEASE_NUMBER': release = int(value)
122 if major != None and minor != None and release != None:
123 break
124 wxVersion = (major, minor, release)
125 return wxVersion
126
127def getVersionMajor():
128 return getVersion()[0]
129def getVersionMinor():
130 return getVersion()[1]
131def getVersionRelease():
132 return getVersion()[2]
390c0cfb
VS
133
134
135def headersOnly(files):
136 """Filters 'files' so that only headers are left. Used with
137 <msvc-project-files> to add headers to VC++ projects but not files such
138 as arrimpl.cpp."""
139
140 def callback(cond, sources):
141 prf = suf = ''
5d38306b
VS
142 if sources[0].isspace(): prf=' '
143 if sources[-1].isspace(): suf=' '
390c0cfb
VS
144 retval = []
145 for s in sources.split():
146 if s.endswith('.h'):
147 retval.append(s)
148 return '%s%s%s' % (prf, ' '.join(retval), suf)
149 return utils.substitute2(files, callback)
dce0742b
VS
150
151
152def makeDspDependency(lib):
153 """Returns suitable entry for <depends-on-dsp> for main libs."""
c79241a2 154 return '%s:$(nativePaths(WXTOPDIR))build\\msw\\wx_%s.dsp' % (lib,lib)