source: trunk/SConstruct@ 1348

Last change on this file since 1348 was 1335, checked in by mar637, 17 years ago

added custom fortran location. added darwin release mode options

File size: 7.7 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 ("rpfitsroot",
51 "The root directory where rpfits is installed", None),
52 ("rpfitslibdir", "The rpfits library location", None),
53
54 EnumOption("mode", "The type of build.", "debug",
55 ["release","debug"], ignorecase=1),
56 ("makedist",
57 "Make a binary archive giving a suffix, e.g. sarge or fc5",
58 ""),
59 EnumOption("makedoc", "Build the userguide in specified format",
60 "none",
61 ["none", "pdf", "html"], ignorecase=1)
62 )
63
64env = Environment( toolpath = ['./scons'],
65 tools = ["default", "archiver", "utils",
66 "quietinstall"],
67 ENV = { 'PATH' : os.environ[ 'PATH' ],
68 'HOME' : os.environ[ 'HOME' ] },
69 options = opts)
70
71Help(opts.GenerateHelpText(env))
72env.SConsignFile()
73
74if env["PLATFORM"] == "darwin":
75 env.EnsureSConsVersion(0,96,95)
76
77casacoretooldir = os.path.join(env["casacoreroot"],"share",
78 "casacore")
79if not os.path.exists(casacoretooldir):
80 print "Could not find casacore scons tools"
81 Exit(1)
82
83# load casacore specific build flags
84env.Tool('casa', [casacoretooldir])
85
86if not env.GetOption('clean'):
87 conf = Configure(env)
88
89 conf.env.AppendUnique(LIBPATH=os.path.join(conf.env["casacoreroot"],
90 "lib"))
91 conf.env.AppendUnique(CPPPATH=os.path.join(conf.env["casacoreroot"],
92 "include", "casacore"))
93 if not conf.CheckLib("casa_casa", language='c++'): Exit(1)
94 conf.env.PrependUnique(LIBS=["casa_ms", "casa_components", "casa_coordinates", "casa_lattices", "casa_fits", "casa_measures", "casa_scimath", "casa_scimath_f", "casa_tables", "casa_mirlib"])
95 conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
96 if not conf.CheckHeader("Python.h", language='c'):
97 Exit(1)
98 pylib = 'python'+distutils.sysconfig.get_python_version()
99 if env['PLATFORM'] == "darwin":
100 conf.env.Append(FRAMEWORKS=["Python"])
101 else:
102 if not conf.CheckLib(library=pylib, language='c'): Exit(1)
103
104 conf.env.AddCustomPackage('boost')
105 if not conf.CheckLibWithHeader(env["boostlib"],
106 'boost/python.hpp', language='c++'):
107 Exit(1)
108 # test for cfitsio
109 if not conf.CheckLib("m"): Exit(1)
110 conf.env.AddCustomPackage('cfitsio')
111 if not conf.CheckLibWithHeader(conf.env["cfitsiolib"],
112 'fitsio.h', language='c'):
113 Exit(1)
114 conf.env.AddCustomPackage('wcs')
115 if not conf.CheckLibWithHeader('wcs', 'wcslib/wcs.h', language='c'):
116 Exit(1)
117 conf.env.AddCustomPackage('rpfits')
118 if not conf.CheckLib("rpfits"): Exit(1)
119
120 # test for blas/lapack
121 conf.env.AddCustomPackage("lapack")
122 if not conf.CheckLib(conf.env["lapacklib"]): Exit(1)
123 blasname = conf.env.get("blaslib", "blas")
124 conf.env.AddCustomPackage("blas")
125 if not conf.CheckLib(conf.env["blaslib"]): Exit(1)
126 conf.env.CheckFortran(conf)
127 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
128 env = conf.Finish()
129
130env["version"] = "trunk"
131
132if env['mode'] == 'release':
133 if env["PLATFORM"] != "darwin":
134 env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
135 env.Append(CCFLAGS=["-O2"])
136else:
137 env.Append(CCFLAGS=["-g"])
138
139# Export for SConscript files
140Export("env")
141
142# build externals
143env.SConscript("external/SConscript")
144# build library
145so = env.SConscript("src/SConscript", build_dir="build", duplicate=0)
146# test module import, to see if there are unresolved symbols
147def test_module(target,source,env):
148 pth = str(target[0])
149 mod = os.path.splitext(pth)[0]
150 sys.path.insert(2, os.path.split(mod)[0])
151 __import__(os.path.split(mod)[1])
152 print "ok"
153 return 0
154def test_str(target, source, env):
155 return "Testing module..."
156
157taction = Action(test_module, test_str)
158env.AddPostAction(so, taction)
159
160# install targets
161somod = env.Install("$moduledir/asap", so )
162pymods = env.Install("$moduledir/asap", env.SGlob("python/*.py"))
163bins = env.Install("$prefix/bin", ["bin/asap", "bin/asap_update_data"])
164shares = env.Install("$moduledir/asap/data", "share/ipythonrc-asap")
165env.Alias('install', [somod, pymods, bins, shares])
166
167# install aips++ data repos
168rootdir=None
169outdir = os.path.join(env["moduledir"],'asap','data')
170sources = ['ephemerides','geodetic']
171if os.path.exists("/nfs/aips++/data"):
172 rootdir = "/nfs/aips++/data"
173elif os.path.exists("data"):
174 rootdir = "./data"
175if rootdir is not None:
176 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
177 data = env.InstallAs(ofiles, ifiles)
178 env.Alias('install', data)
179
180# make binary distribution
181if len(env["makedist"]):
182 env["stagedir"] = "asap-%s-%s" % (env["version"], env["makedist"])
183 env.Command('Staging distribution for archive in %s' % env["stagedir"],
184 '', env.MessageAction)
185 st0 = env.QInstall("$stagedir/asap", [so, env.SGlob("python/*.py")] )
186 env.QInstall("$stagedir/bin", ["bin/asap", "bin/asap_update_data"])
187 env.QInstall("$stagedir", ["bin/install"])
188 env.QInstall("$stagedir/asap/data", "share/ipythonrc-asap")
189 if rootdir is not None:
190 # This creates a directory Using data table... - disabled
191 #env.Command("Using data tables in %s" % rootdir,
192 # '', env.MessageAction)
193 outdir = os.path.join(env["stagedir"],'asap','data')
194 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
195 env.QInstallAs(ofiles, ifiles)
196 else:
197 env.Command("No data tables available. Use 'asap_update_data' after install",
198 '', env.MessageAction)
199 arch = env.Archiver(os.path.join("dist",env["stagedir"]),
200 env["stagedir"])
201 env.AddPostAction(arch, Delete("$stagedir"))
202if env["makedoc"].lower() != "none":
203 env.SConscript("doc/SConscript")
204
205if env.GetOption("clean"):
206 Execute(Delete(".sconf_temp"))
Note: See TracBrowser for help on using the repository browser.