source: trunk/SConstruct@ 1457

Last change on this file since 1457 was 1443, checked in by Malte Marquarding, 16 years ago

Fix ticket #127; still have to add class header hack

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