]> git.saurik.com Git - wxWidgets.git/blame - build/bakefiles/regenMakefile.py
added precomp-headers-exclude (DSP files only so far) and fixed dependencies for...
[wxWidgets.git] / build / bakefiles / regenMakefile.py
CommitLineData
ddf98968
VS
1#!/usr/bin/env python
2
3#
4# Generates Makefile that is used to regenerate native makefiles from
5# bakefiles.
6#
7# $Id$
8#
9
2ae7eb26 10import string, os.path, copy
ddf98968
VS
11
12file = open('Makefile', 'wt')
13file.write("""
14# Generated by regenMakefile.py
15
31009f33 16BAKEFILE = bakefile -v
ddf98968
VS
17
18
31009f33
VS
19CDEPS = config.bkl common.bkl common_contrib.bkl
20SDEPS = config.bkl common.bkl common_samples.bkl
50da51ee 21MDEPS = common.bkl config.bkl files.bkl monolithic.bkl multilib.bkl opengl.bkl wxwin.py
ddf98968
VS
22""")
23
2ae7eb26 24lines = {}
ddf98968 25all = {}
481290e2 26all['autoconf'] = ['../../configure']
ddf98968 27
2ae7eb26
VS
28linesCur = None
29
ddf98968
VS
30def addMakefile(bake, makedirs, deps=[], args={}):
31 """Adds rules to regenerate native makefile in directory 'makedir' from
32 bakefiles 'bake'. 'deps' contains additional dependencies (bakefiles
33 other than 'bake'."""
34 print 'adding %s...' % bake
2ae7eb26
VS
35 global linesCur
36 linesCur = ['\n']
ddf98968
VS
37
38 def add(bake, makedirs, make, dep, format, args={}):
2ae7eb26 39 global linesCur
ddf98968
VS
40 a = ''
41 if 'all' in args: a += ' %s' % args['all']
42 if format in args: a += ' %s' % args[format]
2e1a466f
VS
43 if format != 'autoconf' and 'not_autoconf' in args:
44 a += ' %s' % args['not_autoconf']
ddf98968
VS
45 if format in makedirs:
46 makedir = makedirs[format]
47 else:
48 makedir = makedirs['all']
49 tfile = '%s/%s' % (makedir, make)
2ae7eb26
VS
50 linesCur.append('%s: %s' % (tfile, dep))
51 linesCur.append('\t$(BAKEFILE) -f%s -o$@ %s %s' % (format, a, bake))
52 linesCur.append('\ttouch $@')
ddf98968
VS
53 if format not in all: all[format] = []
54 all[format].append(tfile)
55
56 dep = string.join(deps + [bake], ' ')
57
58 add(bake, makedirs, 'Makefile.in', dep, 'autoconf', args)
f5f530fd 59 add(bake, makedirs, 'makefile.bcc', dep, 'borland', args)
e234d4c9 60 add(bake, makedirs, 'makefile.vc', dep, 'msvc', args)
2e1a466f 61 add(bake, makedirs, 'makefile.gcc', dep, 'mingw', args)
31009f33 62 add(bake, makedirs, 'makefile.wat', dep, 'watcom', args)
2ae7eb26
VS
63
64 lines[bake] = linesCur
ddf98968
VS
65
66
67
68# -----------------------------------------------
69# Add the makefiles:
70# -----------------------------------------------
71
72# main makefile:
73d01310
VS
73addMakefile('wx.bkl', {'all':'..','autoconf':'../..'}, [ '$(MDEPS)' ],
74 args={
75 'borland':'-DOPTIONS_FILE=config.bcc',
76 'msvc':'-DOPTIONS_FILE=config.vc',
77 'mingw':'-DOPTIONS_FILE=config.gcc',
78 'watcom':'-DOPTIONS_FILE=config.wat',
79 })
ddf98968
VS
80
81# samples main makefile:
fd3880a7 82addMakefile('../../samples/samples.bkl', {'all':'../../samples'},
73d01310
VS
83 args={
84 'autoconf':'-DAUTOCONF_MACROS_FILE=../../autoconf_inc.m4',
85 'borland':'-DOPTIONS_FILE=../build/config.bcc -DWRITE_OPTIONS_FILE=0',
86 'msvc':'-DOPTIONS_FILE=../build/config.vc -DWRITE_OPTIONS_FILE=0',
87 'mingw':'-DOPTIONS_FILE=../build/config.gcc -DWRITE_OPTIONS_FILE=0',
88 'watcom':'-DOPTIONS_FILE=../build/config.wat -DWRITE_OPTIONS_FILE=0',
89 })
ddf98968
VS
90
91
a90f1b0b 92CONTRIB_DIR = 1
2e1a466f 93SAMPLES_DIR = 2
a90f1b0b
VS
94
95def onSubmakefile(type, dirname, names):
ddf98968
VS
96 bakes = [x for x in names if x.endswith('.bkl')]
97 if len(bakes) == 0: return
2ae7eb26 98 bakes.sort()
2e1a466f 99 dirname = dirname.replace(os.sep, '/')
ddf98968
VS
100 depth = dirname.count('/') - 2
101 if depth <= 0: return
2e1a466f
VS
102
103 if type==SAMPLES_DIR:
104 prefix = ''.join(['../' for i in range(0,depth)])
105 dirflags = '-DWXTOPDIR=%s../' % prefix
73d01310 106 cfgbase = '%s../build/config.' % prefix
2e1a466f
VS
107 elif type==CONTRIB_DIR:
108 dirflags = '-DSRCDIR=../../src/%s' % dirname.split('/')[-1]
109 dirflags += ' -DWXTOPDIR=../../../'
73d01310 110 cfgbase = '../../../build/config.'
ddf98968
VS
111
112 args = {
2e1a466f 113 'not_autoconf':dirflags,
481290e2 114 'autoconf':'-DAUTOCONF_MACROS_FILE=../../autoconf_inc.m4',
73d01310
VS
115 'msvc':'-DOPTIONS_FILE='+cfgbase+'vc -DWRITE_OPTIONS_FILE=0',
116 'mingw':'-DOPTIONS_FILE='+cfgbase+'gcc -DWRITE_OPTIONS_FILE=0',
117 'borland':'-DOPTIONS_FILE='+cfgbase+'bcc -DWRITE_OPTIONS_FILE=0',
118 'watcom':'-DOPTIONS_FILE='+cfgbase+'wat -DWRITE_OPTIONS_FILE=0',
ddf98968
VS
119 }
120
121 for bake in bakes:
a90f1b0b
VS
122 if type==CONTRIB_DIR:
123 acdir = '../../contrib/src/%s' % dirname.split('/')[-1]
31009f33 124 ruledep = '$(CDEPS)'
a90f1b0b
VS
125 else:
126 acdir = dirname
31009f33 127 ruledep = '$(SDEPS)'
c0608865 128 addMakefile('%s/%s' % (dirname, bake),
31009f33 129 {'all':dirname,'autoconf':acdir}, deps=[ruledep],
ddf98968
VS
130 args=args)
131
2e1a466f
VS
132os.path.walk(os.path.join('..','..','samples'),
133 onSubmakefile, SAMPLES_DIR)
134os.path.walk(os.path.join('..','..','contrib','build'),
135 onSubmakefile, CONTRIB_DIR)
3560dc76
VS
136os.path.walk(os.path.join('..','..','contrib','samples'),
137 onSubmakefile, SAMPLES_DIR)
9fae71ed
VS
138os.path.walk(os.path.join('..','..','contrib','utils'),
139 onSubmakefile, SAMPLES_DIR)
ddf98968
VS
140
141
142cleanCmds = ''
2ae7eb26
VS
143allK = all.keys()
144allK.sort()
145cleanList = []
57700c50
VS
146
147for f in allK:
148 all[f].sort()
149
2ae7eb26 150for f in allK:
ddf98968 151 for i in all[f]:
2ae7eb26 152 cleanList.append('\trm -f %s\n' % i)
2ae7eb26 153 cleanCmds = ''.join(cleanList)
ddf98968 154
2ae7eb26 155for f in allK:
ddf98968 156 var = '%s_ALL' % f.upper()
2ae7eb26 157 file.write('%s = \\\n\t%s\n' % (var,' \\\n\t'.join(all[f])))
ddf98968
VS
158
159file.write('all:')
2ae7eb26 160for f in allK:
ddf98968
VS
161 file.write(' %s' % f)
162file.write('\n\n')
2ae7eb26 163for f in allK:
ddf98968
VS
164 file.write('%s: $(%s_ALL)\n' % (f, f.upper()))
165
166file.write("""
167clean:
168\trm -f ../../autoconf_inc.m4
ddf98968
VS
169%s
170
daa66792
VS
171library: ../../Makefile.in ../makefile.bcc ../makefile.vc ../makefile.wat ../makefile.gcc
172
6bd5dab5 173../../autoconf_inc.m4: ../../Makefile.in
ddf98968
VS
174../../configure: ../../autoconf_inc.m4
175\t(cd ../.. ; aclocal && autoconf)
176
ddf98968
VS
177Makefile: regenMakefile.py
178\t./regenMakefile.py
179\t@echo
180\t@echo -------------------------------------------
181\t@echo Please rerun make, Makefile was regenerated
182\t@echo -------------------------------------------
183\t@echo
184\t@exit 1
185""" % cleanCmds)
2ae7eb26
VS
186linesK = lines.keys()
187linesK.sort()
188for lk in linesK:
189 for l in lines[lk]:
190 file.write('%s\n' % l)
ddf98968 191file.close()