1 | import sys, os
|
---|
2 | from SCons.Variables import Variables
|
---|
3 | from SCons.Script import AddOption, GetOption
|
---|
4 |
|
---|
5 | def generate(env):
|
---|
6 |
|
---|
7 | class CLOptions(object):
|
---|
8 | def __init__(self):
|
---|
9 | self.opts = {}
|
---|
10 | self.variables = []
|
---|
11 |
|
---|
12 | def add_option(self, *args, **kw):
|
---|
13 | AddOption(*args, **kw)
|
---|
14 | key = kw.get('dest')
|
---|
15 | value = GetOption(key)
|
---|
16 | defvalue = kw.get('default')
|
---|
17 | self.variables.append((key, '', defvalue))
|
---|
18 | if value != defvalue:
|
---|
19 | self.opts[key] = value
|
---|
20 |
|
---|
21 | def update(self, fname):
|
---|
22 | if os.path.exists(fname) and not GetOption("silent") and not env.GetOption("help"):
|
---|
23 | print "Restoring previous command-line options from '%s'" % fname
|
---|
24 | vars = Variables(fname, self.opts)
|
---|
25 | vars.AddVariables(*self.variables)
|
---|
26 | vars.Update(env)
|
---|
27 | vars.Save(fname, env)
|
---|
28 |
|
---|
29 | def add_pkg_option(self, libid, root=None, lib=None, libdir=None,
|
---|
30 | incdir=None, help=None):
|
---|
31 | libname = lib or libid
|
---|
32 | self.add_str_option(libid+"-lib", libname,
|
---|
33 | help="%s library name (default: %s)" % (libname, libname))
|
---|
34 | self.add_str_option(libid+"-root", root,
|
---|
35 | help="%s package root" % libid)
|
---|
36 | self.add_str_option(libid+"-incdir", incdir,
|
---|
37 | help="%s package 'include' directory (overwrites '-root')" % libid)
|
---|
38 | self.add_str_option(libid+"-libdir", libdir,
|
---|
39 | help="%s package 'lib' directory (overwrites '-root')" \
|
---|
40 | % libid)
|
---|
41 |
|
---|
42 | def add_str_option(self, optname, default=None, help=None):
|
---|
43 | envopt = optname.replace("-", "_")
|
---|
44 | self.add_option("--%s" % optname, dest=envopt, type="string",
|
---|
45 | default=default, help=help)
|
---|
46 |
|
---|
47 | def add_comp_option(self, optname, default=None, help=None):
|
---|
48 | self.add_option("--with-%s" % optname.lower(), dest=optname,
|
---|
49 | type="string", default=default, help=help)
|
---|
50 |
|
---|
51 |
|
---|
52 |
|
---|
53 | env.CLOptions = CLOptions()
|
---|
54 |
|
---|
55 | def AddCommandLineOptions( ):
|
---|
56 | """ Adds the build environment options to the opts. """
|
---|
57 |
|
---|
58 | env.CLOptions.add_option("--enable-shared", dest="enable_shared",
|
---|
59 | action="store_true", default=False,
|
---|
60 | help="Enable building shared (dynamic) libraries")
|
---|
61 | env.CLOptions.add_option("--disable-static", dest="disable_static",
|
---|
62 | action="store_true", default=False,
|
---|
63 | help="Disable building static libraries")
|
---|
64 | env.CLOptions.add_option("--enable-hdf5", dest="enable_hdf5",
|
---|
65 | action="store_true", default=False,
|
---|
66 | help="Enable the HDF5 library")
|
---|
67 | env.CLOptions.add_option("--enable-fftw3", dest="enable_fftw3",
|
---|
68 | action="store_true", default=False,
|
---|
69 | help="Enable the FFTW3 library")
|
---|
70 | env.CLOptions.add_option("--disable-fftw3-threads", dest="disable_fftw3_threads",
|
---|
71 | action="store_true", default=False,
|
---|
72 | help="Disable use of threads in the FFTW3 library")
|
---|
73 | env.CLOptions.add_option("--disable-dl", dest="disable_dl",
|
---|
74 | action="store_true", default=False,
|
---|
75 | help="Disable the use of dlopen")
|
---|
76 | env.CLOptions.add_option("--enable-readline", dest="enable_readline",
|
---|
77 | action="store_true", default=False,
|
---|
78 | help="Enable the readline library")
|
---|
79 | env.CLOptions.add_option("--data-dir", dest="data_dir", default=None,
|
---|
80 | action="store", type="string",
|
---|
81 | help="The location of the measures data directory to compile in as the default search location")
|
---|
82 | env.CLOptions.add_option("--build-type", dest="build_type", default="opt",
|
---|
83 | action="store", type="string",
|
---|
84 | help="Build optimized 'opt' (default) or debug 'dbg'")
|
---|
85 |
|
---|
86 | env.CLOptions.add_pkg_option("hdf5")
|
---|
87 | env.CLOptions.add_pkg_option("fftw3")
|
---|
88 | env.CLOptions.add_pkg_option("fftw3-threads")
|
---|
89 | env.CLOptions.add_pkg_option("dl")
|
---|
90 | env.CLOptions.add_pkg_option("readline")
|
---|
91 | env.CLOptions.add_pkg_option("blas")
|
---|
92 | env.CLOptions.add_pkg_option("lapack")
|
---|
93 | env.CLOptions.add_pkg_option("f2c", lib="gfortran")
|
---|
94 | env.CLOptions.add_pkg_option("cfitsio")
|
---|
95 | env.CLOptions.add_pkg_option("wcs")
|
---|
96 |
|
---|
97 | options = [("extra-cppflags", None, "Extra pre-processor flags"),
|
---|
98 | ("extra-cxxflags", None, "Extra c++ compiler falgs"),
|
---|
99 | ("extra-cflags", None, "Extra c compiler flags"),
|
---|
100 | ("extra-linkflags", None, "Extra linker flags"),
|
---|
101 | ("extra-fflags", None, "Extra fortran compiler flags"),
|
---|
102 | ("extra-includedir", None, "Extra 'include' dir(s)"),
|
---|
103 | ("extra-librarydir", None, "Extra 'lib' dir(s)"),
|
---|
104 | ("extra-ldlibrarypath", None, "Extra (DY)LD_LIBRARY_PATH"),
|
---|
105 | ("extra-libs", None, "Extra libraries for linker"),
|
---|
106 | ("extra-path", None, "Extra PATH (bin) to search"),
|
---|
107 | ("extra-root", None, "Extra hierachy root to search")]
|
---|
108 | for opt in options:
|
---|
109 | env.CLOptions.add_str_option(*opt)
|
---|
110 | options = [("CC", None, "The c compiler"),
|
---|
111 | ("CXX", None, "The c++ compiler"),
|
---|
112 | ("FORTRAN", None, "The fortran compiler"),]
|
---|
113 | # ("LD", None, "The linker")]
|
---|
114 | for opt in options:
|
---|
115 | env.CLOptions.add_comp_option(*opt)
|
---|
116 |
|
---|
117 |
|
---|
118 | PREFIX = "prefix"
|
---|
119 | EPREFIX = "eprefix"
|
---|
120 | BINDIR = "bindir"
|
---|
121 | LIBDIR = "libdir"
|
---|
122 | INCLUDEDIR = "includedir"
|
---|
123 | SHAREDIR = "sharedir"
|
---|
124 |
|
---|
125 | defdir = "/usr/local"
|
---|
126 |
|
---|
127 | env.CLOptions.add_option("--"+PREFIX, dest=PREFIX,
|
---|
128 | type="string", default=defdir,
|
---|
129 | help="The installation prefix (default: %s)" % defdir)
|
---|
130 | env.CLOptions.add_option("--"+EPREFIX, dest=EPREFIX,
|
---|
131 | type="string", default=defdir)
|
---|
132 | env.CLOptions.add_option("--"+BINDIR, dest=BINDIR,
|
---|
133 | type="string", default=None,
|
---|
134 | help="The installation bin directory (default: %s/bin)" % defdir)
|
---|
135 | env.CLOptions.add_option("--"+LIBDIR, dest=LIBDIR,
|
---|
136 | type="string", default=None,
|
---|
137 | help="The installation lib directory (default: %s/lib)" % defdir)
|
---|
138 | env.CLOptions.add_option("--"+INCLUDEDIR, dest=INCLUDEDIR,
|
---|
139 | type="string", default=None,
|
---|
140 | help="The installation include directory (default: %s/include)" % defdir)
|
---|
141 | env.CLOptions.add_option("--"+SHAREDIR, dest=SHAREDIR,
|
---|
142 | type="string", default=None,
|
---|
143 | help="The installation share directory (default: %s/share)" % defdir)
|
---|
144 |
|
---|
145 | opt = ("universal", None,
|
---|
146 | "Create universal build using any of: ppc,i386,ppc64,x86_64")
|
---|
147 | if sys.platform == 'darwin':
|
---|
148 | env.CLOptions.add_str_option(*opt) # ppc i386 ppc64 x86_64
|
---|
149 |
|
---|
150 | env.CLOptions.update('options.cache')
|
---|
151 |
|
---|
152 | AddCommandLineOptions()
|
---|
153 |
|
---|
154 | def exists(env):
|
---|
155 | return 1
|
---|