-
Notifications
You must be signed in to change notification settings - Fork 53
/
Makefile
191 lines (167 loc) · 6.38 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#
# Makefile for the IRAF source tree.
#
# ---------------------------------------------------------------------------
# IRAF specific variables
export iraf = $(shell pwd)/
# If IRAFARCH is not set, automatically determine it.
# If it set, but empty, build IRAF without arch specific
# directory names.
export IRAFARCH ?= $(shell unix/hlib/irafarch.sh -current)
ifeq ($(IRAFARCH),)
unexport IRAFARCH
else
export arch = .$(IRAFARCH)
endif
# Default IRAF directory structure
export hostid = unix
export host = $(iraf)$(hostid)/
export hlib = $(host)hlib/
export hbin = $(host)bin$(arch)/
export bin = $(iraf)bin$(arch)/
export noao = $(iraf)noao/
export tmp = /tmp/
# Compiler and other build tools. While the C compiler can be chosen,
# the F77 compiler is fixed to the F2C one provided by IRAF.
export CC ?= cc
export F77 = $(hlib)f77.sh
export FC = $(F77)
export F2C = $(hbin)f2c.e
export MKPKG = $(hbin)mkpkg.e
export XC = $(hbin)xc.e
export RANLIB = ranlib
# General compiler flags. Compiler flags specific to the build of the
# host tools and software are in unix/Makefile.
export CFLAGS ?= -g -O2
export XC_CFLAGS = $(CPPFLAGS) $(CFLAGS)
export XC_LFLAGS = $(LDFLAGS)
.PHONY: all sysgen clean test arch noao host novos core bindirs bin_links config inplace starttime
all:: sysgen
# Do a full sysgen, which consists on the host binaries, the core
# system, and the NOAO package.
sysgen: starttime host core noao
@echo "============== IRAF build was successful! ==============="
@echo
@echo "Start: $(shell date -r .build_started)"
@echo "End: $(shell date)"
@echo
@echo "You may now run \"make test\" for a quick test of the build"
@rm -f .build_started
# Just create a file on sysgen start so that its creation time can be used
starttime:
touch .build_started
# Bootstrap first stage: build xc, mkpkg etc. without the Virtual
# Operating System (VOS)
novos: arch bindirs
$(MAKE) -C $(host) NOVOS=yes bindir=$(hbin) install
$(MAKE) -C $(host) clean
# Build the libraries containing the Virtual Operating System, and
# re-build the build tools (xc, mkpkg, ...) with VOS
host: novos
$(MKPKG) syslibs
$(MAKE) -C $(host) bindir=$(hbin) boot/install
$(MAKE) -C $(host) clean
# Build the core system.
core: host
$(MKPKG)
# Build the NOAO package.
noao: host core
cd $(noao) && $(MKPKG) -p noao
# Run the test suite.
test:
./test/run_tests
./test/run_tests -c cl.e test/cl.md
# Remove all binaries built. This keeps .x files that were generated
# by generic, xyacc and similar.
clean:
$(MAKE) -C unix clean
find ./local ./math ./pkg ./sys ./noao/[adfimnorst]* \
-type f -name \*.\[aeo\] -exec rm -f {} \;
rm -f $(bin)/* noao/bin$(arch)/* $(hbin)* .build_started \
include/drvrsmem.h include/fitsio.h include/fitsio2.h \
include/longnam.h include/votParse.h include/votParse_spp.h
# Prepare the source tree for the architecture specifics
arch:
if [ "$(shell $(hlib)irafarch.sh -nbits)" = 64 ] ; then \
ln -sf iraf64.h $(hlib)iraf.h && \
ln -sf mach64.h $(hlib)mach.h ; \
else \
ln -sf iraf32.h $(hlib)iraf.h && \
ln -sf mach32.h $(hlib)mach.h ; \
fi
if [ "$(shell $(hlib)irafarch.sh -endian)" = big ] ; then \
ln -sf swapbe.h $(hlib)swap.h ; \
else \
ln -sf swaple.h $(hlib)swap.h ; \
fi
# Create bindirs for current architecture
bindirs:
if [ bin$(arch) != bin ] ; then \
mkdir -p bin$(arch) noao/bin$(arch) unix/bin$(arch) && \
rm -rf bin unix/bin noao/bin && \
ln -s bin$(arch) bin && \
ln -s bin$(arch) noao/bin && \
ln -s bin$(arch) unix/bin ; \
else \
if [ -L bin ] ; then rm -f bin unix/bin noao/bin ; fi && \
mkdir -p bin noao/bin unix/bin ; \
fi
# Patch the "iraf" environment variable into shell scripts
# The "grep -q" calls are to make sure that the file was edited
config:
sed -E -i.orig \
s+'^([[:space:]]*d_iraf=).*+\1"$(iraf)"'+ \
$(DESTDIR)$(hlib)irafcl.sh \
$(DESTDIR)$(hlib)setup.sh \
$(DESTDIR)$(hlib)mkiraf.sh
grep '"$(iraf)"' $(DESTDIR)$(hlib)irafcl.sh
grep '"$(iraf)"' $(DESTDIR)$(hlib)setup.sh
grep '"$(iraf)"' $(DESTDIR)$(hlib)mkiraf.sh
sed -E -i.orig \
s+'^([[:space:]]*set[[:space:]]*d_iraf[[:space:]]*=[[:space:]]*).*+\1"$(iraf)"'+ \
$(DESTDIR)$(hlib)setup.csh
grep '"$(iraf)"' $(DESTDIR)$(hlib)setup.csh
bindir = $(HOME)/.iraf/bin
# Create symbolic links for user callable scripts and executables
binary_links:
mkdir -p $(DESTDIR)$(bindir)
ln -sf $(hlib)irafcl.sh $(DESTDIR)$(bindir)/irafcl
ln -sf $(hlib)irafcl.sh $(DESTDIR)$(bindir)/cl
ln -sf $(hlib)irafcl.sh $(DESTDIR)$(bindir)/ecl
ln -sf $(hlib)mkiraf.sh $(DESTDIR)$(bindir)/mkiraf
for hprog in mkpkg rmbin rmfiles rtar sgidispatch wtar xc xyacc ; do \
ln -sf $(hbin)$${hprog}.e $(DESTDIR)$(bindir)/$${hprog} ; \
done
# Do a default in-place (user) installation
inplace: config binary_links
$(hlib)mkiraf.sh --default --init
ln -sf $(hlib)libc/iraf.h $(hlib)/setup.*sh $(HOME)/.iraf/
echo $(iraf) > $(HOME)/.iraf/irafroot
if [ "$(IRAFARCH)" ] ; then \
echo "$(IRAFARCH)" > $(HOME)/.iraf/arch ; \
else \
rm -f $(HOME)/.iraf/arch ; \
fi
# Strip unneeded files from the installation.
#
# *Warning*: Calling this directly will remove all source files from
# your source directory.
strip: noao/bin/x_quad.e
cd $(DESTDIR)$(iraf) && $(hostid)/bin/rmfiles.e -f $(hostid)/hlib/strip.iraf
cd $(DESTDIR)$(iraf)/noao && ../$(hostid)/bin/rmfiles.e -f lib/strip.noao
prefix ?= /usr/local
install: noao/bin/x_quad.e
mkdir -p $(DESTDIR)$(prefix)/lib/iraf $(DESTDIR)$(prefix)/bin $(DESTDIR)$(prefix)/share/man/man1 $(DESTDIR)/etc/iraf
cp -a -f bin* dev extern include lib local math mkpkg noao pkg sys test unix \
$(DESTDIR)$(prefix)/lib/iraf
$(MAKE) config binary_links strip iraf=$(prefix)/lib/iraf/ bindir=$(prefix)/bin
cp -f $(hlib)mkiraf.man $(DESTDIR)$(prefix)/share/man/man1/mkiraf.1
cp -f $(hlib)irafcl.man $(DESTDIR)$(prefix)/share/man/man1/irafcl.1
ln -sf irafcl.1 $(DESTDIR)$(prefix)/share/man/man1/ecl.1
ln -sf irafcl.1 $(DESTDIR)$(prefix)/share/man/man1/cl.1
cp -f $(host)boot/mkpkg/mkpkg.man $(DESTDIR)$(prefix)/share/man/man1/mkpkg.1
cp -f $(host)boot/spp/xc.man $(DESTDIR)$(prefix)/share/man/man1/xc.1
cp -f $(host)boot/xyacc/xyacc.man $(DESTDIR)$(prefix)/share/man/man1/xyacc.1
cp -f $(host)boot/generic/generic.man $(DESTDIR)$(prefix)/share/man/man1/generic.1
cp -f $(host)gdev/sgidev/sgidispatch.man $(DESTDIR)$(prefix)/share/man/man1/sgidispatch.1
echo $(prefix)/lib/iraf/ > $(DESTDIR)/etc/iraf/irafroot