py-cvs-2001_07_13 (Rev 1.3) merge
[python/dscho.git] / Mac / scripts / genpluginprojects.py
blobb7d2f6c802e0a6ed505860387456ee56109200a1
1 import mkcwproject
2 import sys
3 import os
4 import string
6 PROJECTDIR = os.path.join(sys.prefix, ":Mac:Build")
7 MODULEDIRS = [ # Relative to projectdirs
8 "::Modules:%s",
9 "::Modules",
10 ":::Modules",
13 # Global variable to control forced rebuild (otherwise the project is only rebuilt
14 # when it is changed)
15 FORCEREBUILD=0
17 def relpath(base, path):
18 """Turn abs path into path relative to another. Only works for 2 abs paths
19 both pointing to folders"""
20 if not os.path.isabs(base) or not os.path.isabs(path):
21 raise 'Absolute paths only'
22 if base[-1] == ':':
23 base = base[:-1]
24 basefields = string.split(base, os.sep)
25 pathfields = string.split(path, os.sep)
26 commonfields = len(os.path.commonprefix((basefields, pathfields)))
27 basefields = basefields[commonfields:]
28 pathfields = pathfields[commonfields:]
29 pathfields = ['']*(len(basefields)+1) + pathfields
30 rv = string.join(pathfields, os.sep)
31 return rv
33 def genpluginproject(architecture, module,
34 project=None, projectdir=None,
35 sources=[], sourcedirs=[],
36 libraries=[], extradirs=[],
37 extraexportsymbols=[]):
38 if architecture == "all":
39 # For the time being we generate two project files. Not as nice as
40 # a single multitarget project, but easier to implement for now.
41 genpluginproject("ppc", module, project, projectdir, sources, sourcedirs,
42 libraries, extradirs, extraexportsymbols)
43 genpluginproject("carbon", module, project, projectdir, sources, sourcedirs,
44 libraries, extradirs, extraexportsymbols)
45 return
46 templatename = "template-%s" % architecture
47 targetname = "%s.%s" % (module, architecture)
48 dllname = "%s.%s.slb" % (module, architecture)
49 if not project:
50 if architecture != "ppc":
51 project = "%s.%s.mcp"%(module, architecture)
52 else:
53 project = "%s.mcp"%module
54 if not projectdir:
55 projectdir = PROJECTDIR
56 if not sources:
57 sources = [module + 'module.c']
58 if not sourcedirs:
59 for moduledir in MODULEDIRS:
60 if '%' in moduledir:
61 moduledir = moduledir % module
62 fn = os.path.join(projectdir, os.path.join(moduledir, sources[0]))
63 if os.path.exists(fn):
64 moduledir, sourcefile = os.path.split(fn)
65 sourcedirs = [relpath(projectdir, moduledir)]
66 sources[0] = sourcefile
67 break
68 else:
69 print "Warning: %s: sourcefile not found: %s"%(module, sources[0])
70 sourcedirs = []
71 if architecture == "carbon":
72 prefixname = "mwerks_carbonplugin_config.h"
73 else:
74 prefixname = "mwerks_plugin_config.h"
75 dict = {
76 "sysprefix" : relpath(projectdir, sys.prefix),
77 "sources" : sources,
78 "extrasearchdirs" : sourcedirs + extradirs,
79 "libraries": libraries,
80 "mac_outputdir" : "::Plugins",
81 "extraexportsymbols" : extraexportsymbols,
82 "mac_targetname" : targetname,
83 "mac_dllname" : dllname,
84 "prefixname" : prefixname,
86 mkcwproject.mkproject(os.path.join(projectdir, project), module, dict,
87 force=FORCEREBUILD, templatename=templatename)
89 def genallprojects(force=0):
90 global FORCEREBUILD
91 FORCEREBUILD = force
92 # Standard Python modules
93 genpluginproject("all", "pyexpat",
94 sources=["pyexpat.c"],
95 libraries=["libexpat.ppc.lib"],
96 extradirs=["::::expat:*"])
97 genpluginproject("all", "zlib",
98 libraries=["zlib.ppc.Lib"],
99 extradirs=["::::imglibs:zlib:mac", "::::imglibs:zlib"])
100 genpluginproject("all", "gdbm",
101 libraries=["gdbm.ppc.gusi.lib"],
102 extradirs=["::::gdbm:mac", "::::gdbm"])
103 genpluginproject("all", "_weakref", sources=["_weakref.c"])
104 genpluginproject("all", "_symtable", sources=["symtablemodule.c"])
105 genpluginproject("all", "_testcapi")
107 # bgen-generated Toolbox modules
108 genpluginproject("ppc", "App", libraries=["AppearanceLib"])
109 genpluginproject("carbon", "App")
110 ## genpluginproject("ppc", "Cm",
111 ## libraries=["QuickTimeLib"],
112 ## extraexportsymbols=[
113 ## "CmpObj_New",
114 ## "CmpObj_Convert",
115 ## "CmpInstObj_New",
116 ## "CmpInstObj_Convert",
117 ## ])
118 ## genpluginproject("carbon", "Cm",
119 ## extraexportsymbols=[
120 ## "CmpObj_New",
121 ## "CmpObj_Convert",
122 ## "CmpInstObj_New",
123 ## "CmpInstObj_Convert",
124 ## ])
125 genpluginproject("ppc", "Cm", libraries=["QuickTimeLib"])
126 genpluginproject("carbon", "Cm")
127 genpluginproject("all", "Fm")
128 genpluginproject("ppc", "Help")
129 genpluginproject("ppc", "Icn", libraries=["IconServicesLib"])
130 genpluginproject("carbon", "Icn")
131 genpluginproject("all", "List")
132 ## genpluginproject("ppc", "Qt", libraries=["QuickTimeLib", "Cm.ppc.slb", "Qdoffs.ppc.slb"],
133 ## extradirs=["::Plugins"])
134 genpluginproject("ppc", "Qt", libraries=["QuickTimeLib"])
135 ## genpluginproject("carbon", "Qt", libraries=["Cm.carbon.slb", "Qdoffs.carbon.slb"],
136 ## extradirs=["::Plugins"])
137 genpluginproject("carbon", "Qt")
138 ## genpluginproject("all", "Qdoffs",
139 ## extraexportsymbols=["GWorldObj_New", "GWorldObj_Convert"])
140 genpluginproject("all", "Qdoffs")
141 genpluginproject("all", "Scrap")
142 genpluginproject("ppc", "Snd", libraries=["SoundLib"])
143 genpluginproject("carbon", "Snd")
144 genpluginproject("all", "Sndihooks", sources=[":snd:Sndihooks.c"])
145 genpluginproject("ppc", "TE", libraries=["DragLib"])
146 genpluginproject("carbon", "TE")
147 genpluginproject("ppc", "Mlte", libraries=["Textension"])
148 genpluginproject("carbon", "Mlte")
150 # Carbon Only?
151 genpluginproject("carbon", "CF")
153 # Other Mac modules
154 genpluginproject("all", "calldll", sources=["calldll.c"])
155 genpluginproject("all", "ColorPicker")
156 genpluginproject("ppc", "Printing")
157 genpluginproject("ppc", "waste",
158 sources=[
159 "wastemodule.c",
160 'WEAccessors.c', 'WEBirthDeath.c', 'WEDebug.c',
161 'WEDrawing.c', 'WEFontTables.c', 'WEHighLevelEditing.c',
162 'WEICGlue.c', 'WEInlineInput.c', 'WELineLayout.c', 'WELongCoords.c',
163 'WELowLevelEditing.c', 'WEMouse.c', 'WEObjects.c', 'WEScraps.c',
164 'WESelecting.c', 'WESelectors.c', 'WEUserSelectors.c', 'WEUtilities.c',
165 'WEObjectHandlers.c',
166 'WETabs.c',
167 'WETabHooks.c'],
168 libraries=['DragLib'],
169 extradirs=[
170 '::::Waste 1.3 Distribution:*',
171 '::::ICProgKit1.4:APIs']
173 # This is a hack, combining parts of Waste 2.0 with parts of 1.3
174 genpluginproject("carbon", "waste",
175 sources=[
176 "wastemodule.c",
177 "WEObjectHandlers.c",
178 "WETabs.c", "WETabHooks.c"],
179 libraries=["WASTE.Carbon.lib"],
180 extradirs=[
181 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:C_C++ Headers',
182 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:Static Libraries',
183 '::::Waste 1.3 Distribution:Extras:Sample Object Handlers',
184 '::::Waste 1.3 Distribution:Extras:Waste Tabs 1.3.2']
186 genpluginproject("ppc", "ctb")
187 genpluginproject("ppc", "icglue", sources=["icgluemodule.c"],
188 libraries=["ICGlueCFM-PPC.lib"],
189 extradirs=["::::ICProgKit1.4:APIs"])
190 genpluginproject("carbon", "icglue", sources=["icgluemodule.c"],
191 extradirs=["::::ICProgKit1.4:APIs"])
192 genpluginproject("ppc", "macspeech", libraries=["SpeechLib"])
194 if __name__ == '__main__':
195 genallprojects()