source: trunk/SConstruct@ 1333

Last change on this file since 1333 was 1331, checked in by mar637, 18 years ago

changed order of blas and lapack

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
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 env.Append(LINKFLAGS=['-Wl,-O1'])
134
135# Export for SConscript files
136Export("env")
137
138# build externals
139env.SConscript("external/SConscript")
140# build library
141so = env.SConscript("src/SConscript", build_dir="build", duplicate=0)
142# test module import, to see if there are unresolved symbols
143def test_module(target,source,env):
144 pth = str(target[0])
145 mod = os.path.splitext(pth)[0]
146 sys.path.insert(2, os.path.split(mod)[0])
147 __import__(os.path.split(mod)[1])
148 print "ok"
149 return 0
150def test_str(target, source, env):
151 return "Testing module..."
152
153taction = Action(test_module, test_str)
154env.AddPostAction(so, taction)
155
156# install targets
157somod = env.Install("$moduledir/asap", so )
158pymods = env.Install("$moduledir/asap", env.SGlob("python/*.py"))
159bins = env.Install("$prefix/bin", ["bin/asap", "bin/asap_update_data"])
160shares = env.Install("$moduledir/asap/data", "share/ipythonrc-asap")
161env.Alias('install', [somod, pymods, bins, shares])
162
163# install aips++ data repos
164rootdir=None
165outdir = os.path.join(env["moduledir"],'asap','data')
166sources = ['ephemerides','geodetic']
167if os.path.exists("/nfs/aips++/data"):
168 rootdir = "/nfs/aips++/data"
169elif os.path.exists("data"):
170 rootdir = "./data"
171if rootdir is not None:
172 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
173 data = env.InstallAs(ofiles, ifiles)
174 env.Alias('install', data)
175
176# make binary distribution
177if len(env["makedist"]):
178 env["stagedir"] = "asap-%s-%s" % (env["version"], env["makedist"])
179 env.Command('Staging distribution for archive in %s' % env["stagedir"],
180 '', env.MessageAction)
181 st0 = env.QInstall("$stagedir/asap", [so, env.SGlob("python/*.py")] )
182 env.QInstall("$stagedir/bin", ["bin/asap", "bin/asap_update_data"])
183 env.QInstall("$stagedir", ["bin/install"])
184 env.QInstall("$stagedir/asap/data", "share/ipythonrc-asap")
185 if rootdir is not None:
186 # This creates a directory Using data table... - disabled
187 #env.Command("Using data tables in %s" % rootdir,
188 # '', env.MessageAction)
189 outdir = os.path.join(env["stagedir"],'asap','data')
190 ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
191 env.QInstallAs(ofiles, ifiles)
192 else:
193 env.Command("No data tables available. Use 'asap_update_data' after install",
194 '', env.MessageAction)
195 arch = env.Archiver(os.path.join("dist",env["stagedir"]),
196 env["stagedir"])
197 env.AddPostAction(arch, Delete("$stagedir"))
198if env["makedoc"].lower() != "none":
199 env.SConscript("doc/SConscript")
200
201if env.GetOption("clean"):
202 Execute(Delete(".sconf_temp"))
Note: See TracBrowser for help on using the repository browser.