| 1 | # PAL SConstruct file
|
|---|
| 2 | import os
|
|---|
| 3 |
|
|---|
| 4 | version = "0.9.2"
|
|---|
| 5 |
|
|---|
| 6 | def CheckStarlink(context):
|
|---|
| 7 | context.Message( "Checking for Starlink environment...")
|
|---|
| 8 | if "STARLINK_DIR" in os.environ:
|
|---|
| 9 | star_root = os.environ["STARCONF_DEFAULT_PREFIX"]
|
|---|
| 10 | star_lib = os.path.join(star_root, "lib")
|
|---|
| 11 | star_inc = os.path.join(star_root, "include")
|
|---|
| 12 | star_share = os.path.join(star_root, "share")
|
|---|
| 13 | star_bin = os.path.join(star_root, "bin")
|
|---|
| 14 | context.env.PrependENVPath('PATH', star_bin)
|
|---|
| 15 | context.Result(star_root)
|
|---|
| 16 | context.env.Replace(PREFIX = star_root)
|
|---|
| 17 | context.env.Append(CPPPATH=star_inc, LIBPATH=star_lib)
|
|---|
| 18 | return { "root": star_root,
|
|---|
| 19 | "lib": star_lib,
|
|---|
| 20 | "include": star_inc,
|
|---|
| 21 | "bin": star_bin,
|
|---|
| 22 | "share": star_share, }
|
|---|
| 23 | context.Result("failed")
|
|---|
| 24 | return None
|
|---|
| 25 |
|
|---|
| 26 | # Allow --prefix to be specified. We don't use it in Starlink mode
|
|---|
| 27 | # though
|
|---|
| 28 | AddOption('--prefix',
|
|---|
| 29 | dest='prefix',
|
|---|
| 30 | type='string',
|
|---|
| 31 | nargs=1,
|
|---|
| 32 | action='store',
|
|---|
| 33 | metavar='DIR',
|
|---|
| 34 | help='installation prefix')
|
|---|
| 35 |
|
|---|
| 36 | env = Environment(PREFIX = "/usr/local" ) # Initialise the environment
|
|---|
| 37 |
|
|---|
| 38 | prefix = GetOption("prefix")
|
|---|
| 39 | if prefix:
|
|---|
| 40 | env.Replace(PREFIX = prefix)
|
|---|
| 41 |
|
|---|
| 42 |
|
|---|
| 43 | # Basic configure checks: but not if --help or --clean
|
|---|
| 44 | if not GetOption("help") and not GetOption("clean"):
|
|---|
| 45 | conf = Configure(env, custom_tests = {"CheckStarlink": CheckStarlink} )
|
|---|
| 46 |
|
|---|
| 47 | if not conf.CheckCC():
|
|---|
| 48 | print("!! Your compiler and/or environment is not correctly configured.")
|
|---|
| 49 | Exit(0)
|
|---|
| 50 |
|
|---|
| 51 | if conf.CheckFunc("copysign"):
|
|---|
| 52 | conf.env.Append(CPPDEFINES={"HAVE_COPYSIGN": 1})
|
|---|
| 53 |
|
|---|
| 54 | if conf.CheckFunc("isblank"):
|
|---|
| 55 | conf.env.Append(CPPDEFINES={"HAVE_ISBLANK": 1})
|
|---|
| 56 |
|
|---|
| 57 | if conf.CheckFunc("strlcpy"):
|
|---|
| 58 | conf.env.Append(CPPDEFINES={"HAVE_STRLCPY": 1})
|
|---|
| 59 |
|
|---|
| 60 | # Force -lm if we need it
|
|---|
| 61 | conf.CheckLib("m","sin")
|
|---|
| 62 |
|
|---|
| 63 | # Try to look in current directory
|
|---|
| 64 | conf.env.Append(LIBPATH=["."])
|
|---|
| 65 | conf.env.Append(CPPPATH=["."])
|
|---|
| 66 |
|
|---|
| 67 | # If we are in a Starlink environment we know we have
|
|---|
| 68 | # ERFA so just set things up for that. This should be done
|
|---|
| 69 | # using a general SCons "are we starlink" plugin
|
|---|
| 70 | starlink = conf.CheckStarlink()
|
|---|
| 71 | if starlink is not None:
|
|---|
| 72 | conf.env.Append(LIBS=["erfa"])
|
|---|
| 73 | conf.env.Append(CPPDEFINES={"HAVE_STAR_UTIL": 1})
|
|---|
| 74 | conf.env.Append(LIBS=["starutil"])
|
|---|
| 75 | else:
|
|---|
| 76 | # Allow PREFIX to work
|
|---|
| 77 | conf.env.Append(CPPPATH=[os.path.join("$PREFIX", "include")])
|
|---|
| 78 | conf.env.Append(LIBPATH=[os.path.join("$PREFIX", "lib")])
|
|---|
| 79 |
|
|---|
| 80 | # Maybe starutil will be available
|
|---|
| 81 | if conf.CheckLib("starutil"):
|
|---|
| 82 | conf.env.Append(CPPDEFINES={"HAVE_STAR_UTIL": 1})
|
|---|
| 83 |
|
|---|
| 84 | # Need to look for ERFA vs SOFA
|
|---|
| 85 | if not conf.CheckLib("erfa","eraCal2jd"):
|
|---|
| 86 | if conf.CheckLib("sofa_c","iauCal2jd"):
|
|---|
| 87 | conf.env.Append(CPPDEFINES={"HAVE_SOFA_H": 1})
|
|---|
| 88 | else:
|
|---|
| 89 | print("!! Neither ERFA not SOFA library located. Can not continue. !!")
|
|---|
| 90 | Exit(0)
|
|---|
| 91 |
|
|---|
| 92 | env = conf.Finish()
|
|---|
| 93 |
|
|---|
| 94 | # PAL source code
|
|---|
| 95 | libpal_sources = [
|
|---|
| 96 | "pal1Atms.c",
|
|---|
| 97 | "pal1Atmt.c",
|
|---|
| 98 | "palAddet.c",
|
|---|
| 99 | "palAirmas.c",
|
|---|
| 100 | "palAltaz.c",
|
|---|
| 101 | "palAmp.c",
|
|---|
| 102 | "palAmpqk.c",
|
|---|
| 103 | "palAop.c",
|
|---|
| 104 | "palAoppa.c",
|
|---|
| 105 | "palAoppat.c",
|
|---|
| 106 | "palAopqk.c",
|
|---|
| 107 | "palAtmdsp.c",
|
|---|
| 108 | "palCaldj.c",
|
|---|
| 109 | "palDafin.c",
|
|---|
| 110 | "palDat.c",
|
|---|
| 111 | "palDe2h.c",
|
|---|
| 112 | "palDeuler.c",
|
|---|
| 113 | "palDfltin.c",
|
|---|
| 114 | "palDh2e.c",
|
|---|
| 115 | "palDjcal.c",
|
|---|
| 116 | "palDmat.c",
|
|---|
| 117 | "palDmoon.c",
|
|---|
| 118 | "palDrange.c",
|
|---|
| 119 | "palDs2tp.c",
|
|---|
| 120 | "palDt.c",
|
|---|
| 121 | "palDtp2s.c",
|
|---|
| 122 | "palDtps2c.c",
|
|---|
| 123 | "palDtt.c",
|
|---|
| 124 | "palEcmat.c",
|
|---|
| 125 | "palEl2ue.c",
|
|---|
| 126 | "palEpco.c",
|
|---|
| 127 | "palEpv.c",
|
|---|
| 128 | "palEqecl.c",
|
|---|
| 129 | "palEqgal.c",
|
|---|
| 130 | "palEtrms.c",
|
|---|
| 131 | "palEvp.c",
|
|---|
| 132 | "palFk45z.c",
|
|---|
| 133 | "palFk524.c",
|
|---|
| 134 | "palFk54z.c",
|
|---|
| 135 | "palGaleq.c",
|
|---|
| 136 | "palGalsup.c",
|
|---|
| 137 | "palGe50.c",
|
|---|
| 138 | "palGeoc.c",
|
|---|
| 139 | "palIntin.c",
|
|---|
| 140 | "palMap.c",
|
|---|
| 141 | "palMappa.c",
|
|---|
| 142 | "palMapqk.c",
|
|---|
| 143 | "palMapqkz.c",
|
|---|
| 144 | "palNut.c",
|
|---|
| 145 | "palNutc.c",
|
|---|
| 146 | "palOap.c",
|
|---|
| 147 | "palOapqk.c",
|
|---|
| 148 | "palObs.c",
|
|---|
| 149 | "palOne2One.c",
|
|---|
| 150 | "palPa.c",
|
|---|
| 151 | "palPertel.c",
|
|---|
| 152 | "palPertue.c",
|
|---|
| 153 | "palPlanel.c",
|
|---|
| 154 | "palPlanet.c",
|
|---|
| 155 | "palPlante.c",
|
|---|
| 156 | "palPlantu.c",
|
|---|
| 157 | "palPm.c",
|
|---|
| 158 | "palPolmo.c",
|
|---|
| 159 | "palPrebn.c",
|
|---|
| 160 | "palPrec.c",
|
|---|
| 161 | "palPreces.c",
|
|---|
| 162 | "palPrenut.c",
|
|---|
| 163 | "palPv2el.c",
|
|---|
| 164 | "palPv2ue.c",
|
|---|
| 165 | "palPvobs.c",
|
|---|
| 166 | "palRdplan.c",
|
|---|
| 167 | "palRefco.c",
|
|---|
| 168 | "palRefro.c",
|
|---|
| 169 | "palRefv.c",
|
|---|
| 170 | "palRefz.c",
|
|---|
| 171 | "palRverot.c",
|
|---|
| 172 | "palRvgalc.c",
|
|---|
| 173 | "palRvlg.c",
|
|---|
| 174 | "palRvlsrd.c",
|
|---|
| 175 | "palRvlsrk.c",
|
|---|
| 176 | "palSubet.c",
|
|---|
| 177 | "palSupgal.c",
|
|---|
| 178 | "palUe2el.c",
|
|---|
| 179 | "palUe2pv.c",
|
|---|
| 180 | ]
|
|---|
| 181 |
|
|---|
| 182 | sun267_sources = [ "sun267.tex" ]
|
|---|
| 183 | sun267_pdf = env.PDF( sun267_sources )
|
|---|
| 184 | Default(sun267_pdf)
|
|---|
| 185 |
|
|---|
| 186 | # Compiler should look in current directory for header files
|
|---|
| 187 |
|
|---|
| 188 | staticpal = env.StaticLibrary(target="pal", source=libpal_sources)
|
|---|
| 189 | sharedpal = env.SharedLibrary( target="pal", source = libpal_sources,
|
|---|
| 190 | SHLIBVERSION=version )
|
|---|
| 191 |
|
|---|
| 192 | palTest = env.Program("palTest", "palTest.c", LIBS=["pal"] )
|
|---|
| 193 | test_alias = Alias("test", [palTest], palTest[0].abspath)
|
|---|
| 194 | AlwaysBuild(test_alias)
|
|---|
| 195 |
|
|---|
| 196 | installed_sharedlib = env.InstallVersionedLib(os.path.join("$PREFIX","lib"),
|
|---|
| 197 | [sharedpal], SHLIBVERSION=version )
|
|---|
| 198 | installed_staticlib = env.Install("$PREFIX/lib", [staticpal] )
|
|---|
| 199 |
|
|---|
| 200 | # Just build the library by default
|
|---|
| 201 | Default(sharedpal)
|
|---|
| 202 | Default(staticpal)
|
|---|
| 203 |
|
|---|
| 204 | # install on request
|
|---|
| 205 | if "install" in COMMAND_LINE_TARGETS:
|
|---|
| 206 | env.Alias( "install", "$PREFIX" )
|
|---|
| 207 | Default(installed_sharedlib, installed_staticlib)
|
|---|
| 208 |
|
|---|