blob: 46f0a6bdacf46933c6b336579084b8e16bb62ed1 [file] [log] [blame]
Jack Jansen6c502d72000-12-03 22:31:50 +00001import mkcwproject
2import sys
3import os
Jack Jansenb55b7bb2001-01-03 16:44:56 +00004import string
Jack Jansen6c502d72000-12-03 22:31:50 +00005
Jack Jansene791a642001-08-16 20:39:17 +00006PYTHONDIR = sys.prefix
7PROJECTDIR = os.path.join(PYTHONDIR, ":Mac:Build")
Jack Jansen6c502d72000-12-03 22:31:50 +00008MODULEDIRS = [ # Relative to projectdirs
9 "::Modules:%s",
10 "::Modules",
11 ":::Modules",
12]
13
Jack Jansen1eda2032001-01-21 22:24:27 +000014# Global variable to control forced rebuild (otherwise the project is only rebuilt
15# when it is changed)
16FORCEREBUILD=0
17
Jack Jansenb55b7bb2001-01-03 16:44:56 +000018def relpath(base, path):
19 """Turn abs path into path relative to another. Only works for 2 abs paths
20 both pointing to folders"""
21 if not os.path.isabs(base) or not os.path.isabs(path):
22 raise 'Absolute paths only'
Jack Jansen1eda2032001-01-21 22:24:27 +000023 if base[-1] == ':':
24 base = base[:-1]
Jack Jansenb55b7bb2001-01-03 16:44:56 +000025 basefields = string.split(base, os.sep)
26 pathfields = string.split(path, os.sep)
27 commonfields = len(os.path.commonprefix((basefields, pathfields)))
28 basefields = basefields[commonfields:]
29 pathfields = pathfields[commonfields:]
Jack Jansen1eda2032001-01-21 22:24:27 +000030 pathfields = ['']*(len(basefields)+1) + pathfields
31 rv = string.join(pathfields, os.sep)
32 return rv
Jack Jansenb55b7bb2001-01-03 16:44:56 +000033
Jack Jansen8c19b882001-01-23 22:36:26 +000034def genpluginproject(architecture, module,
Jack Jansen6c502d72000-12-03 22:31:50 +000035 project=None, projectdir=None,
36 sources=[], sourcedirs=[],
37 libraries=[], extradirs=[],
Jack Jansenb3be2162001-11-30 14:16:36 +000038 extraexportsymbols=[], outputdir=":::Lib:lib-dynload",
39 libraryflags=None, stdlibraryflags=None):
Jack Jansen8c19b882001-01-23 22:36:26 +000040 if architecture == "all":
41 # For the time being we generate two project files. Not as nice as
42 # a single multitarget project, but easier to implement for now.
43 genpluginproject("ppc", module, project, projectdir, sources, sourcedirs,
Jack Jansen7586b042001-08-20 15:31:56 +000044 libraries, extradirs, extraexportsymbols, outputdir)
Jack Jansen8c19b882001-01-23 22:36:26 +000045 genpluginproject("carbon", module, project, projectdir, sources, sourcedirs,
Jack Jansen7586b042001-08-20 15:31:56 +000046 libraries, extradirs, extraexportsymbols, outputdir)
Jack Jansen8c19b882001-01-23 22:36:26 +000047 return
48 templatename = "template-%s" % architecture
49 targetname = "%s.%s" % (module, architecture)
50 dllname = "%s.%s.slb" % (module, architecture)
Jack Jansen6c502d72000-12-03 22:31:50 +000051 if not project:
Jack Jansen8c19b882001-01-23 22:36:26 +000052 if architecture != "ppc":
53 project = "%s.%s.mcp"%(module, architecture)
54 else:
55 project = "%s.mcp"%module
Jack Jansen6c502d72000-12-03 22:31:50 +000056 if not projectdir:
57 projectdir = PROJECTDIR
58 if not sources:
59 sources = [module + 'module.c']
60 if not sourcedirs:
61 for moduledir in MODULEDIRS:
62 if '%' in moduledir:
Jack Jansen77105a92001-08-23 13:51:46 +000063 # For historical reasons an initial _ in the modulename
64 # is not reflected in the folder name
65 if module[0] == '_':
66 modulewithout_ = module[1:]
67 else:
68 modulewithout_ = module
69 moduledir = moduledir % modulewithout_
Jack Jansen6c502d72000-12-03 22:31:50 +000070 fn = os.path.join(projectdir, os.path.join(moduledir, sources[0]))
71 if os.path.exists(fn):
72 moduledir, sourcefile = os.path.split(fn)
Jack Jansen1eda2032001-01-21 22:24:27 +000073 sourcedirs = [relpath(projectdir, moduledir)]
Jack Jansen6c502d72000-12-03 22:31:50 +000074 sources[0] = sourcefile
75 break
76 else:
77 print "Warning: %s: sourcefile not found: %s"%(module, sources[0])
78 sourcedirs = []
Jack Jansen8c19b882001-01-23 22:36:26 +000079 if architecture == "carbon":
80 prefixname = "mwerks_carbonplugin_config.h"
81 else:
82 prefixname = "mwerks_plugin_config.h"
Jack Jansen6c502d72000-12-03 22:31:50 +000083 dict = {
Jack Jansen1eda2032001-01-21 22:24:27 +000084 "sysprefix" : relpath(projectdir, sys.prefix),
Jack Jansen6c502d72000-12-03 22:31:50 +000085 "sources" : sources,
86 "extrasearchdirs" : sourcedirs + extradirs,
87 "libraries": libraries,
Jack Jansend39c2462001-08-19 22:29:57 +000088 "mac_outputdir" : outputdir,
Jack Jansen6c502d72000-12-03 22:31:50 +000089 "extraexportsymbols" : extraexportsymbols,
Jack Jansen8c19b882001-01-23 22:36:26 +000090 "mac_targetname" : targetname,
91 "mac_dllname" : dllname,
92 "prefixname" : prefixname,
Jack Jansen6c502d72000-12-03 22:31:50 +000093 }
Jack Jansenb3be2162001-11-30 14:16:36 +000094 if libraryflags:
95 dict['libraryflags'] = libraryflags
96 if stdlibraryflags:
97 dict['stdlibraryflags'] = stdlibraryflags
Jack Jansen8c19b882001-01-23 22:36:26 +000098 mkcwproject.mkproject(os.path.join(projectdir, project), module, dict,
99 force=FORCEREBUILD, templatename=templatename)
Jack Jansen6c502d72000-12-03 22:31:50 +0000100
Jack Jansen1eda2032001-01-21 22:24:27 +0000101def genallprojects(force=0):
102 global FORCEREBUILD
103 FORCEREBUILD = force
Jack Jansen6c502d72000-12-03 22:31:50 +0000104 # Standard Python modules
Jack Jansen8c19b882001-01-23 22:36:26 +0000105 genpluginproject("all", "pyexpat",
Jack Jansen6c502d72000-12-03 22:31:50 +0000106 sources=["pyexpat.c"],
107 libraries=["libexpat.ppc.lib"],
Jack Jansen52328162000-12-29 16:07:30 +0000108 extradirs=["::::expat:*"])
Jack Jansen8c19b882001-01-23 22:36:26 +0000109 genpluginproject("all", "zlib",
Jack Jansen6c502d72000-12-03 22:31:50 +0000110 libraries=["zlib.ppc.Lib"],
111 extradirs=["::::imglibs:zlib:mac", "::::imglibs:zlib"])
Jack Jansen8c19b882001-01-23 22:36:26 +0000112 genpluginproject("all", "gdbm",
Jack Jansen6c502d72000-12-03 22:31:50 +0000113 libraries=["gdbm.ppc.gusi.lib"],
114 extradirs=["::::gdbm:mac", "::::gdbm"])
Jack Jansen6e271182001-02-12 14:50:52 +0000115 genpluginproject("all", "_weakref", sources=["_weakref.c"])
116 genpluginproject("all", "_symtable", sources=["symtablemodule.c"])
Jack Jansen7c100082001-08-29 22:08:06 +0000117 # Example/test modules
Jack Jansen6e271182001-02-12 14:50:52 +0000118 genpluginproject("all", "_testcapi")
Jack Jansen7c100082001-08-29 22:08:06 +0000119 genpluginproject("all", "xx")
120 genpluginproject("all", "xxsubtype", sources=["xxsubtype.c"])
Jack Jansen6f1da002001-10-23 22:23:44 +0000121 genpluginproject("all", "_hotshot", sources=["_hotshot.c"])
Jack Jansen6c502d72000-12-03 22:31:50 +0000122
123 # bgen-generated Toolbox modules
Jack Jansen77105a92001-08-23 13:51:46 +0000124 genpluginproject("carbon", "_AE", outputdir="::Lib:Carbon")
125 genpluginproject("ppc", "_AE", libraries=["ObjectSupportLib"], outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000126 genpluginproject("ppc", "_App", libraries=["CarbonAccessors.o", "AppearanceLib"],
127 libraryflags="Debug, WeakImport", outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000128 genpluginproject("carbon", "_App", outputdir="::Lib:Carbon")
129 genpluginproject("ppc", "_Cm", libraries=["QuickTimeLib"], outputdir="::Lib:Carbon")
130 genpluginproject("carbon", "_Cm", outputdir="::Lib:Carbon")
Just van Rossum11ccf3c2001-12-13 13:21:38 +0000131 # XXX can't work properly because we need to set a custom fragment initializer
132 #genpluginproject("carbon", "_CG",
133 # sources=["_CGModule.c", "CFMLateImport.c"],
134 # libraries=["CGStubLib"],
135 # outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000136 genpluginproject("carbon", "_Ctl", outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000137 genpluginproject("ppc", "_Ctl", libraries=["CarbonAccessors.o", "ControlsLib", "AppearanceLib"],
Jack Jansenb3be2162001-11-30 14:16:36 +0000138 libraryflags="Debug, WeakImport", outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000139 genpluginproject("carbon", "_Dlg", outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000140 genpluginproject("ppc", "_Dlg", libraries=["CarbonAccessors.o", "DialogsLib", "AppearanceLib"],
Jack Jansenb3be2162001-11-30 14:16:36 +0000141 libraryflags="Debug, WeakImport", outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000142 genpluginproject("carbon", "_Drag", outputdir="::Lib:Carbon")
143 genpluginproject("ppc", "_Drag", libraries=["DragLib"], outputdir="::Lib:Carbon")
144 genpluginproject("all", "_Evt", outputdir="::Lib:Carbon")
145 genpluginproject("all", "_Fm", outputdir="::Lib:Carbon")
146 genpluginproject("ppc", "_Help", outputdir="::Lib:Carbon")
147 genpluginproject("ppc", "_Icn", libraries=["IconServicesLib"], outputdir="::Lib:Carbon")
148 genpluginproject("carbon", "_Icn", outputdir="::Lib:Carbon")
149 genpluginproject("all", "_List", outputdir="::Lib:Carbon")
150 genpluginproject("carbon", "_Menu", outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000151 genpluginproject("ppc", "_Menu", libraries=["CarbonAccessors.o", "MenusLib", "ContextualMenu", "AppearanceLib"],
Jack Jansenb3be2162001-11-30 14:16:36 +0000152 libraryflags="Debug, WeakImport", outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000153 genpluginproject("all", "_Qd", outputdir="::Lib:Carbon")
154 genpluginproject("ppc", "_Qt", libraries=["QuickTimeLib"], outputdir="::Lib:Carbon")
155 genpluginproject("carbon", "_Qt", outputdir="::Lib:Carbon")
156 genpluginproject("all", "_Qdoffs", outputdir="::Lib:Carbon")
157 genpluginproject("all", "_Res", outputdir="::Lib:Carbon")
158 genpluginproject("all", "_Scrap", outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000159 genpluginproject("ppc", "_Snd", libraries=["CarbonAccessors.o", "SoundLib"], outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000160 genpluginproject("carbon", "_Snd", outputdir="::Lib:Carbon")
161 genpluginproject("all", "_Sndihooks", sources=[":snd:_Sndihooks.c"], outputdir="::Lib:Carbon")
Jack Jansena7594db2001-12-05 22:46:23 +0000162 genpluginproject("ppc", "_TE", libraries=["CarbonAccessors.o", "DragLib"], outputdir="::Lib:Carbon")
Jack Jansen77105a92001-08-23 13:51:46 +0000163 genpluginproject("carbon", "_TE", outputdir="::Lib:Carbon")
164 genpluginproject("ppc", "_Mlte", libraries=["Textension"], outputdir="::Lib:Carbon")
165 genpluginproject("carbon", "_Mlte", outputdir="::Lib:Carbon")
166 genpluginproject("carbon", "_Win", outputdir="::Lib:Carbon")
Jack Jansenb3be2162001-11-30 14:16:36 +0000167 genpluginproject("ppc", "_Win", libraries=["CarbonAccessors.o", "WindowsLib", "AppearanceLib"],
168 libraryflags="Debug, WeakImport", outputdir="::Lib:Carbon")
Jack Jansen19864122001-07-13 20:57:47 +0000169 # Carbon Only?
Jack Jansen77105a92001-08-23 13:51:46 +0000170 genpluginproject("carbon", "_CF", outputdir="::Lib:Carbon")
Just van Rossumaa6e83f2001-12-12 22:42:37 +0000171 genpluginproject("carbon", "_CarbonEvt", outputdir="::Lib:Carbon")
Jack Jansendf222d22001-11-06 15:56:56 +0000172 genpluginproject("carbon", "hfsplus")
Jack Jansenf4b9fb72001-06-26 21:52:08 +0000173
Jack Jansen6c502d72000-12-03 22:31:50 +0000174 # Other Mac modules
Jack Jansen8c19b882001-01-23 22:36:26 +0000175 genpluginproject("all", "calldll", sources=["calldll.c"])
176 genpluginproject("all", "ColorPicker")
177 genpluginproject("ppc", "Printing")
Jack Jansen4a667c72002-01-11 12:39:03 +0000178## genpluginproject("ppc", "waste",
179## sources=[
180## "wastemodule.c",
181## 'WEAccessors.c', 'WEBirthDeath.c', 'WEDebug.c',
182## 'WEDrawing.c', 'WEFontTables.c', 'WEHighLevelEditing.c',
183## 'WEICGlue.c', 'WEInlineInput.c', 'WELineLayout.c', 'WELongCoords.c',
184## 'WELowLevelEditing.c', 'WEMouse.c', 'WEObjects.c', 'WEScraps.c',
185## 'WESelecting.c', 'WESelectors.c', 'WEUserSelectors.c', 'WEUtilities.c',
186## 'WEObjectHandlers.c',
187## 'WETabs.c',
188## 'WETabHooks.c'],
189## libraries=['DragLib'],
190## extradirs=[
191## '::::Waste 1.3 Distribution:*',
192## '::::ICProgKit1.4:APIs']
193## )
194 # This is a hack, combining parts of Waste 2.0 with parts of 1.3
Jack Jansen8c19b882001-01-23 22:36:26 +0000195 genpluginproject("ppc", "waste",
Jack Jansen6c502d72000-12-03 22:31:50 +0000196 sources=[
197 "wastemodule.c",
Jack Jansen4a667c72002-01-11 12:39:03 +0000198 "WEObjectHandlers.c",
199 "WETabs.c", "WETabHooks.c"],
200 libraries=[
201 "WASTE.PPC.lib",
202 "TextCommon",
203 "UnicodeConverter",
204 "DragLib",
205 ],
Jack Jansen0e1c24a2001-01-22 14:50:05 +0000206 extradirs=[
Jack Jansen4a667c72002-01-11 12:39:03 +0000207 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:C_C++ Headers',
208 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:Static Libraries',
209 '::wastemods',
210 ]
Jack Jansen6c502d72000-12-03 22:31:50 +0000211 )
Jack Jansen8c982662001-01-24 16:02:07 +0000212 genpluginproject("carbon", "waste",
213 sources=[
214 "wastemodule.c",
215 "WEObjectHandlers.c",
216 "WETabs.c", "WETabHooks.c"],
217 libraries=["WASTE.Carbon.lib"],
218 extradirs=[
219 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:C_C++ Headers',
220 '{Compiler}:MacOS Support:(Third Party Support):Waste 2.0 Distribution:Static Libraries',
Jack Jansen4a667c72002-01-11 12:39:03 +0000221 '::wastemods',
222 ]
Jack Jansen8c982662001-01-24 16:02:07 +0000223 )
Jack Jansen4a667c72002-01-11 12:39:03 +0000224## '::::Waste 1.3 Distribution:Extras:Sample Object Handlers',
225## '::::Waste 1.3 Distribution:Extras:Waste Tabs 1.3.2']
Jack Jansen8c19b882001-01-23 22:36:26 +0000226 genpluginproject("ppc", "ctb")
227 genpluginproject("ppc", "icglue", sources=["icgluemodule.c"],
Jack Jansen4a667c72002-01-11 12:39:03 +0000228 libraries=["InternetConfigLib"])
229 genpluginproject("carbon", "icglue", sources=["icgluemodule.c"])
Jack Jansen8c19b882001-01-23 22:36:26 +0000230 genpluginproject("ppc", "macspeech", libraries=["SpeechLib"])
Jack Jansen6c502d72000-12-03 22:31:50 +0000231
232if __name__ == '__main__':
233 genallprojects()
234
Jack Jansen1eda2032001-01-21 22:24:27 +0000235