[2486] | 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 |
---|