source: trunk/SConstruct@ 1328

Last change on this file since 1328 was 1327, checked in by mar637, 18 years ago

enabled customisable lib names

File size: 7.6 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("userconfig.py")
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
74casacoretooldir = os.path.join(env["casacoreroot"],"share",
75 "casacore")
76if not os.path.exists(casacoretooldir):
77 print "Could not find casacore scons tools"
78 Exit(1)
79
80# load casacore specific build flags
81print casacoretooldir
82env.Tool('casa', [casacoretooldir])
83
84if not env.GetOption('clean'):
85 conf = Configure(env)
86
87 conf.env.AppendUnique(LIBPATH=os.path.join(conf.env["casacoreroot"],
88 "lib"))
89 conf.env.AppendUnique(CPPPATH=os.path.join(conf.env["casacoreroot"],
90 "include", "casacore"))
91 if not conf.CheckLib("casa_casa", language='c++'): Exit(1)
92 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"])
93 conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
94 if not conf.CheckHeader("Python.h", language='c'):
95 Exit(1)
96 pylib = 'python'+distutils.sysconfig.get_python_version()
97 if env['PLATFORM'] == "darwin":
98 conf.env.Append(FRAMEWORKS=["Python"])
99 else:
100 if not conf.CheckLib(library=pylib, language='c'): Exit(1)
101
102 conf.env.AddCustomPackage('boost')
103 if not conf.CheckLibWithHeader(env["boostlib"],
104 'boost/python.hpp', language='c++'):
105 Exit(1)
106 # test for cfitsio
107 if not conf.CheckLib("m"): Exit(1)
108 conf.env.AddCustomPackage('cfitsio')
109 if not conf.CheckLibWithHeader(conf.env["cfitsiolib"],
110 'fitsio.h', language='c'):
111 Exit(1)
112 conf.env.AddCustomPackage('wcs')
113 if not conf.CheckLibWithHeader('wcs', 'wcslib/wcs.h', language='c'):
114 Exit(1)
115 conf.env.AddCustomPackage('rpfits')
116 if not conf.CheckLib("rpfits"): Exit(1)
117
118 # test for blas/lapack
119 blasname = conf.env.get("blaslib", "blas")
120 conf.env.AddCustomPackage("blas")
121 if not conf.CheckLib(conf.env["blaslib"]): Exit(1)
122 conf.env.AddCustomPackage("lapack")
123 if not conf.CheckLib(conf.env["lapacklib"]): Exit(1)
124 conf.env.CheckFortran(conf)
125 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
126 env = conf.Finish()
127
128env["version"] = "trunk"
129
130if env['mode'] == 'release':
131 env.Append(LINKFLAGS=['-Wl,-O1'])
132
133# Export for SConscript files
134Export("env")
135
136# build externals
137env.SConscript("external/SConscript")
138# build library
139so = env.SConscript("src/SConscript", build_dir="build", duplicate=0)
140# test module import, to see if there are unresolved symbols
141def test_module(target,source,env):
142 pth = str(target[0])
143 mod = os.path.splitext(pth)[0]
144 sys.path.insert(2, os.path.split(mod)[0])
145 __import__(os.path.split(mod)[1])
146 print "ok"
147 return 0
148def test_str(target, source, env):
149 return "Testing module..."
150
151taction = Action(test_module, test_str)
152env.AddPostAction(so, taction)
153
154# install targets
155somod = env.Install("$moduledir/asap", so )
156pymods = env.Install("$moduledir/asap", env.SGlob("python/*.py"))
157bins = env.Install("$prefix/bin", ["bin/asap", "bin/asap_update_data"])
158shares = env.Install("$moduledir/asap/data", "share/ipythonrc-asap")
159env.Alias('install', [somod, pymods, bins, shares])
160
161# install aips++ data repos
162rootdir=None
163outdir = os.path.join(env["moduledir"],'asap','data')
164sources = ['ephemerides','geodetic']
165if os.path.exists("/nfs/aips++/data"):
166 rootdir = "/nfs/aips++/data"
167elif os.path.exists("data"):
168 rootdir = "./data"
169if rootdir is not None:
170 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
171 data = env.InstallAs(ofiles, ifiles)
172 env.Alias('install', data)
173
174# make binary distribution
175if len(env["makedist"]):
176 env["stagedir"] = "asap-%s-%s" % (env["version"], env["makedist"])
177 env.Command('Staging distribution for archive in %s' % env["stagedir"],
178 '', env.MessageAction)
179 st0 = env.QInstall("$stagedir/asap", [so, env.SGlob("python/*.py")] )
180 env.QInstall("$stagedir/bin", ["bin/asap", "bin/asap_update_data"])
181 env.QInstall("$stagedir", ["bin/install"])
182 env.QInstall("$stagedir/asap/data", "share/ipythonrc-asap")
183 if rootdir is not None:
184 # This creates a directory Using data table... - disabled
185 #env.Command("Using data tables in %s" % rootdir,
186 # '', env.MessageAction)
187 outdir = os.path.join(env["stagedir"],'asap','data')
188 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
189 env.QInstallAs(ofiles, ifiles)
190 else:
191 env.Command("No data tables available. Use 'asap_update_data' after install",
192 '', env.MessageAction)
193 arch = env.Archiver(os.path.join("dist",env["stagedir"]),
194 env["stagedir"])
195 env.AddPostAction(arch, Delete("$stagedir"))
196if env["makedoc"].lower() != "none":
197 env.SConscript("doc/SConscript")
198
199if env.GetOption("clean"):
200 Execute(Delete(".sconf_temp"))
Note: See TracBrowser for help on using the repository browser.