source: trunk/SConstruct@ 1732

Last change on this file since 1732 was 1687, checked in by Malte Marquarding, 15 years ago

Don't use pyrap by default. remove AdCommonOptions

File size: 9.3 KB
Line 
1import os
2import sys
3import distutils.sysconfig
4import platform
5import SCons
6
7moduledir = distutils.sysconfig.get_python_lib()
8if platform.architecture()[0] == '64bit':
9 # hack to install into /usr/lib64 if scons is in the 32bit /usr/lib/
10 if moduledir.startswith("/usr/lib/"):
11 moduledir = moduledir.replace("lib", "lib64")
12
13
14EnsureSConsVersion(1,1,0)
15
16opts = Variables("options.cfg")
17opts.AddVariables(
18 ("FORTRAN", "The fortran compiler", None),
19 ("f2clib", "The fortran to c library", None),
20 PathVariable("prefix",
21 "The root installation path",
22 distutils.sysconfig.PREFIX),
23 PathVariable("moduledir",
24 "The python module path (site-packages))",
25 moduledir),
26 PathVariable("casacoreroot", "The location of casacore",
27 "/usr/local"),
28 ("boostroot", "The root dir where boost is installed", None),
29 ("boostlib", "The name of the boost python library",
30 "boost_python"),
31 ("boostlibdir", "The boost library location", None),
32 ("boostincdir", "The boost header file location", None),
33 ("lapackroot",
34 "The root directory where lapack is installed", None),
35 ("lapacklibdir", "The lapack library location", None),
36 ("lapacklib",
37 "The lapack library name (e.g. for specialized AMD libraries",
38 "lapack"),
39 ("blasroot",
40 "The root directory where blas is installed", None),
41 ("blaslibdir", "The blas library location", None),
42 ("blaslib",
43 "The blas library name (e.g. for specialized AMD libraries",
44 "blas"),
45 ("cfitsioroot",
46 "The root directory where cfistio is installed", None),
47 ("cfitsiolibdir", "The cfitsio library location", None),
48 ("cfitsiolib", "The cfitsio library name", "cfitsio"),
49 ("cfitsioincdir", "The cfitsio include location", None),
50 ("wcsroot",
51 "The root directory where wcs is installed", None),
52 ("wcslibdir", "The wcs library location", None),
53 ("rpfitslib", "The rpfits library name", "rpfits"),
54 ("rpfitsroot",
55 "The root directory where rpfits is installed", None),
56 ("rpfitslibdir", "The rpfits library location", None),
57# ("rpfitsincdir", "The rpfits include location", None),
58 ("pyraproot", "The root directory where libpyrap is installed",
59 None),
60 ("pyraplib", "The name of the pyrap library", "pyrap"),
61 ("pyraplibdir", "The directory where libpyrap is installed",
62 None),
63 ("pyrapincdir", "The pyrap include location",
64 None),
65 BoolVariable("enable_pyrap", "Use pyrap conversion library",
66 False),
67
68 EnumVariable("mode", "The type of build.", "release",
69 ["release","debug"], ignorecase=1),
70 ("makedist",
71 "Make a binary archive giving a suffix, e.g. sarge or fc5",
72 ""),
73 EnumVariable("makedoc", "Build the userguide in specified format",
74 "none",
75 ["none", "pdf", "html"], ignorecase=1),
76 BoolVariable("apps", "Build cpp apps", False),
77 BoolVariable("alma", "Enable alma specific functionality",
78 False),
79 )
80
81env = Environment( toolpath = ['./scons'],
82 tools = ["default", "archiver", "utils",
83 "quietinstall"],
84 ENV = { 'PATH' : os.environ[ 'PATH' ],
85 'HOME' : os.environ[ 'HOME' ] },
86 options = opts)
87
88Help(opts.GenerateHelpText(env))
89env.SConsignFile()
90
91casacoretooldir = os.path.join(env["casacoreroot"],"share",
92 "casacore")
93if not os.path.exists(casacoretooldir):
94 print "Could not find casacore scons tools"
95 Exit(1)
96
97# load casacore specific build flags
98env.Tool('casaoptions', [casacoretooldir])
99opts.Update(env)
100env.Tool('casa', [casacoretooldir])
101
102if not env.GetOption('clean'):
103 conf = Configure(env)
104
105 conf.env.AppendUnique(LIBPATH=os.path.join(conf.env["casacoreroot"],
106 "lib"))
107 conf.env.AppendUnique(CPPPATH=os.path.join(conf.env["casacoreroot"],
108 "include", "casacore"))
109 if not conf.CheckLib("casa_casa", language='c++'): Exit(1)
110 conf.env.PrependUnique(LIBS=["casa_images", "casa_ms", "casa_components",
111 "casa_coordinates", "casa_lattices",
112 "casa_fits", "casa_measures", "casa_scimath",
113 "casa_scimath_f", "casa_tables",
114 "casa_mirlib"])
115 conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
116 if not conf.CheckHeader("Python.h", language='c'):
117 Exit(1)
118 pylib = 'python'+distutils.sysconfig.get_python_version()
119 if env['PLATFORM'] == "darwin":
120 conf.env.Append(FRAMEWORKS=["Python"])
121 else:
122 if not conf.CheckLib(library=pylib, language='c'): Exit(1)
123
124 conf.env.AddCustomPackage('boost')
125 if not conf.CheckLibWithHeader(conf.env["boostlib"],
126 'boost/python.hpp', language='c++'):
127 Exit(1)
128
129 conf.env.AddCustomPackage('pyrap')
130 if conf.env.get("enable_pyrap") and conf.CheckLib(conf.env["pyraplib"],
131 language='c++',
132 autoadd=0):
133 conf.env.Append(CPPFLAGS=['-DHAVE_PYRAP'])
134 conf.env.PrependUnique(LIBS=env['pyraplib'])
135
136 # test for cfitsio
137 if not conf.CheckLib("m"): Exit(1)
138 conf.env.AddCustomPackage('cfitsio')
139 if not conf.CheckLibWithHeader(conf.env["cfitsiolib"],
140 'fitsio.h', language='c'):
141 Exit(1)
142 conf.env.AddCustomPackage('wcs')
143 if not conf.CheckLibWithHeader('wcs', 'wcslib/wcs.h', language='c'):
144 Exit(1)
145 conf.env.AddCustomPackage('rpfits')
146 if not conf.CheckLib(conf.env["rpfitslib"], language="c"):
147 Exit(1)
148
149 # test for blas/lapack
150 conf.env.AddCustomPackage("lapack")
151 if not conf.CheckLib(conf.env["lapacklib"]): Exit(1)
152 blasname = conf.env.get("blaslib", "blas")
153 conf.env.AddCustomPackage("blas")
154 if not conf.CheckLib(conf.env["blaslib"]): Exit(1)
155 conf.env.CheckFortran(conf)
156 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
157 if conf.env["alma"]:
158 conf.env.Append(CPPFLAGS=['-DUSE_ALMA'])
159 env = conf.Finish()
160
161env["version"] = "2.x"
162
163if env['mode'] == 'release':
164 if env["PLATFORM"] != "darwin":
165 env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
166 env.Append(CCFLAGS=["-O2"])
167else:
168 env.Append(CCFLAGS=["-g", "-Wall"])
169
170# Export for SConscript files
171Export("env")
172
173# build externals
174env.SConscript("external/SConscript")
175# build library
176so = env.SConscript("src/SConscript", build_dir="build", duplicate=0)
177# test module import, to see if there are unresolved symbols
178def test_module(target,source,env):
179 pth = str(target[0])
180 mod = os.path.splitext(pth)[0]
181 sys.path.insert(2, os.path.split(mod)[0])
182 __import__(os.path.split(mod)[1])
183 print "ok"
184 return 0
185def test_str(target, source, env):
186 return "Testing module..."
187
188taction = Action(test_module, test_str)
189env.AddPostAction(so, taction)
190
191# install targets
192somod = env.Install("$moduledir/asap", so )
193pymods = env.Install("$moduledir/asap", env.SGlob("python/*.py"))
194bins = env.Install("$prefix/bin", ["bin/asap", "bin/asap_update_data"])
195shares = env.Install("$moduledir/asap/data", "share/ipythonrc-asap")
196shares = env.Install("$moduledir/asap/data", "share/ipy_user_conf.py")
197env.Alias('install', [somod, pymods, bins, shares])
198
199# install aips++ data repos
200rootdir=None
201outdir = os.path.join(env["moduledir"],'asap','data')
202sources = ['ephemerides','geodetic']
203if os.path.exists("/nfs/aips++/data"):
204 rootdir = "/nfs/aips++/data"
205elif os.path.exists("data"):
206 rootdir = "./data"
207if rootdir is not None:
208 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
209 data = env.InstallAs(ofiles, ifiles)
210 env.Alias('install', data)
211
212# make binary distribution
213if len(env["makedist"]):
214 env["stagedir"] = "asap-%s-%s" % (env["version"], env["makedist"])
215 env.Command('Staging distribution for archive in %s' % env["stagedir"],
216 '', env.MessageAction)
217 st0 = env.QInstall("$stagedir/asap", [so, env.SGlob("python/*.py")] )
218 env.QInstall("$stagedir/bin", ["bin/asap", "bin/asap_update_data"])
219 env.QInstall("$stagedir", ["bin/install"])
220 env.QInstall("$stagedir/asap/data", "share/ipythonrc-asap")
221 env.QInstall("$stagedir/asap/data", "share/ipy_user_conf.py")
222 if rootdir is not None:
223 # This creates a directory Using data table... - disabled
224 #env.Command("Using data tables in %s" % rootdir,
225 # '', env.MessageAction)
226 outdir = os.path.join(env["stagedir"],'asap','data')
227 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
228 env.QInstallAs(ofiles, ifiles)
229 else:
230 env.Command("No data tables available. Use 'asap_update_data' after install",
231 '', env.MessageAction)
232 arch = env.Archiver(os.path.join("dist",env["stagedir"]),
233 env["stagedir"])
234 env.AddPostAction(arch, Delete("$stagedir"))
235if env["makedoc"].lower() != "none":
236 env.SConscript("doc/SConscript")
237
238if env["apps"]:
239 env.SConscript("apps/SConscript")
240
241if env.GetOption("clean"):
242 Execute(Delete(".sconf_temp"))
Note: See TracBrowser for help on using the repository browser.