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 |
|
---|