Source
1
+
#! /usr/bin/env python
2
+
3
+
#
4
+
# Generate CMakeLists.txt files by running
5
+
#
6
+
# cd code/
7
+
# ./create.py
8
+
# mkdir build
9
+
# cd build/
10
+
# cmake -Wdev ..
11
+
# make -j 2 VERBOSE=
12
+
13
+
import os
14
+
import commands
15
+
16
+
modules = ["graphics", "casaqt", "msvis", "plotms", "display", "casadbus", "tableplot", "flagging", "calibration", "synthesis", "alma", "oldalma", "atnf", "dish", "nrao", "stdcasa"]
17
+
deps = {"casaqt" :['CASACORE', 'QT4', 'QWT', 'PYTHON', 'XERCES', "graphics"],
18
+
"plotms" :['CASACORE', 'QT4', "casaqt", "msvis"],
19
+
"tableplot" : ['CASACORE', 'PYTHON'],
20
+
"flagging" : ['CASACORE', 'tableplot', 'msvis'],
21
+
"msvis" : ['CASACORE', 'graphics'],
22
+
"graphics" : ['CASACORE', 'PGPLOT', 'X11'],
23
+
"casadbus" : ['CASACORE', 'DBUS'],
24
+
"calibration" : ['CASACORE', 'tableplot', 'msvis'],
25
+
"synthesis" : ['CASACORE', 'LAPACK', 'ATM', 'casadbus', 'msvis', 'calibration'],
26
+
"alma" : ['CASACORE', 'LIBXML2', 'Boost'],
27
+
"oldalma" : ['CASACORE', 'LIBXML2', 'Boost'],
28
+
"stdcasa" : ['CASACORE'],
29
+
"display" : ['CASACORE', 'WCSLIB', 'QT4', 'casaqt', 'msvis'],
30
+
"atnf" : ['CASACORE', 'RPFITS', 'CFITSIO'],
31
+
"dish" : ['CASACORE'],
32
+
"nrao" : ['CASACORE']}
33
+
34
+
35
+
os.chdir("./include")
36
+
37
+
for mod in deps.keys():
38
+
if not os.path.exists(mod):
39
+
os.system('ln -s ../%s/implement ./%s' % (mod, mod))
40
+
41
+
os.chdir("..")
42
+
43
+
for mod in modules:
44
+
45
+
os.chdir(mod)
46
+
os.system("cp /tmp/gpl.txt ./CMakeLists.txt")
47
+
cml = open("./CMakeLists.txt", "a")
48
+
49
+
if mod in ["alma", "oldalma"]:
50
+
cml.write("add_definitions( -DWITHOUT_ACS )\n\n")
51
+
cml.write("if( APPLE )\n")
52
+
cml.write(" set( CMAKE_CXX_FLAGS\n")
53
+
cml.write(" \"${CMAKE_CXX_FLAGS} -march=i586\" )\n")
54
+
cml.write("endif()\n\n")
55
+
56
+
if mod == "casadbus":
57
+
cml.write("casa_add_dbus_proxy( " +
58
+
"plotserver/PlotServerProxy.dbusproxy.h " +
59
+
"implement/plotserver/PlotServerProxy.dbusproxy.xml )\n")
60
+
cml.write("casa_add_dbus_proxy( " +
61
+
"session/DBusSession.dbusproxy.h " +
62
+
"implement/session/DBusSession.dbusproxy.xml )\n")
63
+
cml.write("casa_add_dbus_proxy( " +
64
+
"viewer/ViewerProxy.dbusproxy.h " +
65
+
"implement/viewer/ViewerProxy.dbusproxy.xml )\n")
66
+
cml.write("\n")
67
+
68
+
py_sources = commands.getoutput(
69
+
'find . -name \\*.py | sort | sed "s/^\\.\\///" | grep -vw modules | grep -vw implement | grep -v test | grep -vw regressions | grep -vw usecases | grep -vw demos | grep -vw recipes | xargs -n1 echo " "'
70
+
)
71
+
72
+
cc_sources = commands.getoutput(
73
+
'find implement -name \\*.cc | sort | grep -vw test | grep -vw singledish | xargs -n1 echo " "'
74
+
)
75
+
76
+
f_sources = commands.getoutput(
77
+
'find implement -name \\*.f | sort | grep -w fortran | xargs -n1 echo " "'
78
+
)
79
+
if os.path.exists('apps'):
80
+
exe_sources = commands.getoutput(
81
+
'\ls -1 apps/ | sort | grep -v makefile | grep -v module_paramgui'
82
+
).split()
83
+
else:
84
+
exe_sources = []
85
+
86
+
test_sources = commands.getoutput(
87
+
'find implement -name \\*.cc | sort | grep -w test | grep -v test.dMultichannelRaster.cc | grep -v test.dRGBTestPattern.cc | grep -v test.dRGBWCRaster.cc | grep -v test.dPanelDisplay.cc | grep -v test.dQtPlotter.cc | grep -v test.tArrayAsRaster.cc | grep -v test.dLatticeAsRaster.cc | grep -v test.dNBody.cc | grep -v test.tTblAsRaster.cc | grep -v test.dProfile2dDD.cc | grep -v test.tTblAsXY.cc | grep -v test.tTblAsContour.cc | grep -v test.tArrayAndDrawing.cc | grep -v test.dLatticeAsVector.cc | grep -v test.tApplicator.cc | grep -v test.tcal_cmpt2.cc | grep -v test.tcal_cmpt.cc | grep -v test.AtmosphereTest.cc | grep -v test.tFlagRow.cc | grep -v test.dRegionFile.cc | grep -v test.tSelection.cc'
88
+
).split()
89
+
90
+
qo_h_sources = commands.getoutput(
91
+
'find implement -name \\*.qo.h | sort | grep -vw test | xargs -n1 echo " "'
92
+
)
93
+
ui_sources = commands.getoutput(
94
+
'find implement -name \\*.ui | sort | grep -vw test | xargs -n1 echo " "'
95
+
)
96
+
97
+
qrc_sources = commands.getoutput(
98
+
'find implement -name \\*.qrc | sort | grep -vw test'
99
+
).split()
100
+
101
+
xmltask_sources = commands.getoutput(
102
+
'find . -name \\*.xml | sort | sed "s/^\\.\\///" | grep -vw makefile.xml | grep -w tasks | xargs -n1 echo " "'
103
+
)
104
+
105
+
xmltool_sources = commands.getoutput(
106
+
'find . -name \\*.xml | sort | sed "s/^\\.\\///" | grep -vw makefile.xml | grep -w implement | grep -v singledish | xargs -n1 echo " "'
107
+
)
108
+
109
+
#print cc_sources
110
+
if mod == 'stdcasa':
111
+
# QT_USE_FILE also calls add_definitions, therefore do not call it at the highest level
112
+
# necessary?? cml.write("include( ${QT_USE_FILE} )\n")
113
+
cml.write("add_custom_command( OUTPUT version.cc\n")
114
+
cml.write(" COMMAND \n")
115
+
cml.write(" sed -e 's|MAJOR|${CASA_MAJOR_VERSION}|'\n")
116
+
cml.write(" -e 's|MINOR|${CASA_MINOR_VERSION}|'\n")
117
+
cml.write(" -e 's|PATCH|${CASA_PATCH_VERSION}|'\n")
118
+
cml.write(" -e 's|REVISION|${SVNREVISION}|'\n")
119
+
cml.write(" -e 's|DATE|${BUILDTIME}|'\n")
120
+
cml.write(" -e 's|INFO||'\n")
121
+
cml.write(" ${CMAKE_CURRENT_SOURCE_DIR}/implement/version.template > version.cc\n")
122
+
cml.write(" || ${PERL_EXECUTABLE} -e 'unlink(\"version.cc\")\; exit 1\;'\n")
123
+
cml.write(")\n\n")
124
+
125
+
if 'QT4' in deps[mod]:
126
+
cml.write("include( ${QT_USE_FILE} )\n")
127
+
#cml.write("message( the QTlibraries are ${QT_LIBRARIES})\n")
128
+
cml.write("set( QT4_LIBRARIES ${QT_LIBRARIES} )\n\n")
129
+
130
+
if qo_h_sources.find('qo') >= 0:
131
+
cml.write("qt4_wrap_cpp( outfiles_qoh\n")
132
+
# not here, but below cml.write(cc_sources + '\n')
133
+
cml.write(qo_h_sources + '\n')
134
+
cml.write(' )\n')
135
+
#cml.write("message( the outfiles are ${outfiles})\n")
136
+
137
+
if ui_sources.find('ui') >= 0:
138
+
cml.write("\ncasa_qt4_wrap_ui( outfiles_ui\n")
139
+
cml.write(ui_sources)
140
+
cml.write('\n )\n\n')
141
+
#cml.write("message( the uioutfiles are ${outfiles_ui})\n")
142
+
143
+
for s in qrc_sources:
144
+
d = s[10:s.find('/', 10)]
145
+
#print "Source is", s
146
+
#print "Dir is", d
147
+
cml.write("casa_qt4_add_resources( outfiles_qrc %s OPTIONS -name %s )\n" % (s, d))
148
+
cml.write('\n')
149
+
150
+
151
+
# moc creates double namespace object files, if this
152
+
# is already defined when moc is run
153
+
154
+
#cml.write('include_directories( ${CMAKE_SOURCE_DIR}/include )\n')
155
+
#cml.write('message("just included ${casadbus_INCLUDE_DIRS}")\n')
156
+
157
+
if mod == "plotms":
158
+
cml.write('include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/implement/Gui ) ' +
159
+
'\n# because the generated code contain relative paths to the source tree\n\n')
160
+
161
+
if mod == "display":
162
+
cml.write('\ninclude_directories( ${CMAKE_CURRENT_BINARY_DIR}/QtAutoGui ) # for generated code\n\n')
163
+
164
+
cml.write("casa_add_library( %s\n" % mod)
165
+
if 'QT4' in deps[mod]:
166
+
cml.write(" ${outfiles_qoh} ${outfiles_ui} ${outfiles_qrc}\n")
167
+
cml.write(cc_sources + '\n')
168
+
else:
169
+
cml.write(cc_sources)
170
+
cml.write('\n')
171
+
cml.write(f_sources)
172
+
if mod == "casadbus":
173
+
cml.write('\nplotserver/PlotServerProxy.dbusproxy.h')
174
+
cml.write('\nsession/DBusSession.dbusproxy.h')
175
+
cml.write('\nviewer/ViewerProxy.dbusproxy.h')
176
+
if mod == "stdcasa":
177
+
cml.write(' version.cc\n')
178
+
cml.write(' )\n\n')
179
+
180
+
#cml.write('# Executables\n')
181
+
for exe in exe_sources:
182
+
183
+
if exe == "asdm2MS" or exe == "oldasdm2MS":
184
+
185
+
sources = commands.getoutput(
186
+
'find apps/%s -name \\*.cc | sort | xargs -n1 echo " "' % exe
187
+
)
188
+
cml.write('casa_add_executable( %s %s \n' % (mod, exe))
189
+
cml.write(sources)
190
+
cml.write('\n )\n')
191
+
else:
192
+
sources = commands.getoutput(
193
+
'find apps/%s -name \\*.cc | sort' % exe
194
+
)
195
+
cml.write('casa_add_executable( %s %s ' % (mod, exe))
196
+
cml.write(sources)
197
+
cml.write(' )\n')
198
+
199
+
if mod == "casaqt":
200
+
cml.write('\ninstall( PROGRAMS apps/qcasabrowser/casabrowser DESTINATION bin )\n')
201
+
202
+
for t in test_sources:
203
+
tname = os.path.basename(t).replace(".cc", "")
204
+
if tname not in ["dDBusViewerProxy",
205
+
"tFlagger",
206
+
"tMsPlot"]:
207
+
if mod == "flagging":
208
+
cml.write('casa_add_test( %s %s )\n' % (mod, t))
209
+
else:
210
+
cml.write('casa_add_assay( %s %s )\n' % (mod, t))
211
+
212
+
213
+
214
+
cml.close()
215
+
os.chdir('..')