0
|
1 |
#
|
|
2 |
#
|
|
3 |
# CDDL HEADER START
|
|
4 |
#
|
|
5 |
# The contents of this file are subject to the terms of the
|
|
6 |
# Common Development and Distribution License (the "License").
|
|
7 |
# You may not use this file except in compliance with the License.
|
|
8 |
#
|
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
10 |
# or http://www.opensolaris.org/os/licensing.
|
|
11 |
# See the License for the specific language governing permissions
|
|
12 |
# and limitations under the License.
|
|
13 |
#
|
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each
|
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
16 |
# If applicable, add the following below this CDDL HEADER, with the
|
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying
|
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner]
|
|
19 |
#
|
|
20 |
# CDDL HEADER END
|
|
21 |
#
|
11
|
22 |
# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
|
0
|
23 |
# Use is subject to license terms.
|
|
24 |
#
|
11
|
25 |
# ident "@(#)Makefile.sfw 1.4 10/03/16 SMI"
|
0
|
26 |
|
2
|
27 |
VER=23.1
|
0
|
28 |
EMACSDIST=emacs-$(VER)
|
|
29 |
|
|
30 |
include ../Makefile.cmd
|
|
31 |
|
|
32 |
# Strategy:
|
|
33 |
# We need to build emacs multiple times, for 32/64-bit, and for
|
|
34 |
# the different toolkit variants. Rather than make multiple copies
|
|
35 |
# of the unpacked emacs source tree, we reuse a single tree, copying
|
|
36 |
# out the parts we want after each build.
|
|
37 |
#
|
|
38 |
# We copy these files into a local proto directory, rather than
|
|
39 |
# putting them into the real proto directly, for two reasons:
|
|
40 |
# 1) Files should not go into the proto unless "make install"
|
|
41 |
# is used.
|
|
42 |
# 2) An emacs distribution has lots of files. A local proto
|
|
43 |
# allows us to examine these files in isolation
|
|
44 |
# before they get mixed into the real proto, and is
|
|
45 |
# thus an aid to debugging and packaging.
|
|
46 |
#
|
|
47 |
|
|
48 |
# Paths to proto/usr/bin and its subdirectories
|
|
49 |
PBIN= proto/usr/bin
|
|
50 |
PBIN32= $(PBIN)/$(MACH32)
|
|
51 |
PBIN64= $(PBIN)/$(MACH64)
|
|
52 |
PSHAREMAN1= proto/usr/share/man/man1
|
|
53 |
|
|
54 |
# Paths to proto/usr/gnu
|
|
55 |
PGBIN= proto/usr/gnu/bin
|
|
56 |
PGSHAREMAN1= proto/usr/gnu/share/man/man1
|
|
57 |
|
|
58 |
MANPAGES= $(PSHAREMAN1)/b2m.1 \
|
|
59 |
$(PSHAREMAN1)/ebrowse.1 \
|
|
60 |
$(PSHAREMAN1)/emacs.1 \
|
|
61 |
$(PSHAREMAN1)/emacs-gtk.1 \
|
|
62 |
$(PSHAREMAN1)/emacs-nox.1 \
|
|
63 |
$(PSHAREMAN1)/emacs-x.1 \
|
|
64 |
$(PSHAREMAN1)/emacsclient.1 \
|
|
65 |
$(PSHAREMAN1)/grep-changelog.1 \
|
|
66 |
$(PSHAREMAN1)/rcs-checkin.1 \
|
|
67 |
$(PSHAREMAN1)/emacsclient.1 \
|
|
68 |
$(PGSHAREMAN1)/ctags.1 \
|
|
69 |
$(PGSHAREMAN1)/etags.1
|
|
70 |
|
|
71 |
# The various toolkit permutations
|
|
72 |
EMACS_X= $(PBIN)/emacs-x $(PBIN)/emacs-x-$(VER) \
|
|
73 |
$(PBIN32)/emacs-x $(PBIN32)/emacs-x-$(VER) \
|
|
74 |
$(PBIN64)/emacs-x $(PBIN64)/emacs-x-$(VER)
|
|
75 |
|
|
76 |
EMACS_NOX= $(PBIN)/emacs-nox $(PBIN)/emacs-nox-$(VER) \
|
|
77 |
$(PBIN32)/emacs-nox $(PBIN32)/emacs-nox-$(VER) \
|
|
78 |
$(PBIN64)/emacs-nox $(PBIN64)/emacs-nox-$(VER)
|
|
79 |
|
|
80 |
EMACS_GTK= $(PBIN)/emacs-gtk $(PBIN)/emacs-gtk-$(VER) \
|
|
81 |
$(PBIN32)/emacs-gtk $(PBIN32)/emacs-gtk-$(VER) \
|
2
|
82 |
$(PBIN64)/emacs-gtk $(PBIN64)/emacs-gtk-$(VER)
|
0
|
83 |
|
|
84 |
# On X86, the machine types differ (i386-pc and x86_64-pc). We want
|
|
85 |
# to share the 32-bit architecture specific binaries in both cases,
|
|
86 |
# so we install the i386-pc version, and use a symlink to make the
|
|
87 |
# amd64 version see them. The name of the 32-bit version will be
|
|
88 |
# something like i386-pc-solaris2.11, where the 2.11 is tied
|
|
89 |
# to the output from 'uname -r'. So use uname to get the value, so
|
|
90 |
# that we might handle a transition from Nevada (5.11) to the next thing.
|
|
91 |
#
|
|
92 |
LIBDIR=proto/usr/lib/emacs/$(VER)
|
|
93 |
SOL_REV:sh=uname -r | sed "s,^5\.,2\.,"
|
|
94 |
LIBDIRSYMLINK:sh= if [ "$MACH" = 'i386' ]; \
|
|
95 |
then echo '$(LIBDIR)/x86_64-pc-solaris$(SOL_REV)'; \
|
|
96 |
fi
|
|
97 |
|
|
98 |
all: $(EMACS_X) .WAIT $(EMACS_NOX) .WAIT $(EMACS_GTK) .WAIT \
|
|
99 |
$(PBIN)/emacs .WAIT $(MANPAGES) $(LIBDIRSYMLINK)
|
|
100 |
|
|
101 |
install: all
|
|
102 |
$(SH) install-sfw
|
|
103 |
|
|
104 |
# LPROTO is a fully qualified path to the proto subdirectory.
|
|
105 |
# It is needed for the emacs makefile install rule.
|
|
106 |
#
|
|
107 |
LPROTO:sh= echo `pwd`/proto
|
|
108 |
|
|
109 |
# Uncomment this for debugging only. It configures emacs to
|
|
110 |
# run from the local proto instead of from its final installed
|
|
111 |
# location
|
|
112 |
#
|
|
113 |
##INSTALL_ROOT=$(LPROTO)
|
|
114 |
|
|
115 |
# Execute the build_emacs script with an appropriate environment
|
|
116 |
BUILD_EMACS= env GCC="$(GCC)" PATH=$(SFW_PATH) sh -x tools/build_emacs
|
|
117 |
|
|
118 |
|
|
119 |
# Build the base 32-bit emacs-x, and install it along with the rest of
|
|
120 |
# the emacs distribution into the local proto area. We use the emacs
|
|
121 |
# makefile install rule to do this, as discussed in README.SUNWgnu-emacs.
|
|
122 |
#
|
|
123 |
# Note that we put usr/src/tools at the head of the PATH. This is done
|
|
124 |
# in order to ensure that the emacs install uses the no-op links
|
|
125 |
# to /bin/true for chown and chgrp. We don't need the file ownerships
|
|
126 |
# to change, and we don't have a 'games' user.
|
|
127 |
#
|
|
128 |
# Once the emacs install is finished, we then tweak the results:
|
|
129 |
# - Change 'emacs' to $(MACH)/emacs-x
|
|
130 |
# - Put ctags/etags into usr/gnu/bin instead of usr/bin
|
|
131 |
# - Throw away the manpages that were installed. We will
|
|
132 |
# generate them again, using sed to bolt on an ATTRIBUTES section
|
|
133 |
#
|
|
134 |
$(PBIN32)/emacs-x : $(PBIN32) $(PGBIN) $(PGSHAREMAN1)
|
|
135 |
rm -f $(PBIN)/emacs # emacs install will clobber this
|
|
136 |
$(BUILD_EMACS) 32 lucid $(INSTALL_ROOT)
|
|
137 |
(cd $(EMACSDIST); env prefix=$(LPROTO) bindir=$(LPROTO)/usr/bin \
|
|
138 |
datarootdir=$(LPROTO)/usr/share \
|
|
139 |
libexecdir=$(LPROTO)/usr/lib \
|
|
140 |
INSTALL=ginstall \
|
|
141 |
MAKE=$(GMAKE) \
|
|
142 |
PATH="$${SRC}/tools:$(SFW_PATH)" \
|
|
143 |
$(GMAKE) install)
|
|
144 |
mv $(PBIN)/emacs $(PBIN32)/emacs-x
|
|
145 |
mv $(PBIN)/emacs-$(VER) $(PBIN32)/emacs-x-$(VER)
|
|
146 |
mv $(PBIN)/ctags $(PBIN)/etags $(PGBIN)
|
|
147 |
rm $(PSHAREMAN1)/*
|
|
148 |
|
|
149 |
|
|
150 |
|
|
151 |
# For the other 5 variants, we do the build with the necessary
|
|
152 |
# configuration, and then take only the emacs binary. These binaries
|
|
153 |
# will operate with the files produced by the base 32-bit build.
|
|
154 |
|
|
155 |
$(PBIN64)/emacs-x: $(PBIN64)
|
|
156 |
$(BUILD_EMACS) 64 lucid $(INSTALL_ROOT)
|
|
157 |
cp $(EMACSDIST)/src/emacs $(PBIN64)/emacs-x
|
|
158 |
ln -f $(PBIN64)/emacs-x $(PBIN64)/emacs-x-$(VER)
|
|
159 |
|
|
160 |
$(PBIN32)/emacs-nox: $(PBIN32)
|
|
161 |
$(BUILD_EMACS) 32 nox $(INSTALL_ROOT)
|
|
162 |
cp $(EMACSDIST)/src/emacs $(PBIN32)/emacs-nox
|
|
163 |
ln -f $(PBIN32)/emacs-nox $(PBIN32)/emacs-nox-$(VER)
|
|
164 |
|
|
165 |
$(PBIN64)/emacs-nox: $(PBIN64)
|
|
166 |
$(BUILD_EMACS) 64 nox $(INSTALL_ROOT)
|
|
167 |
cp $(EMACSDIST)/src/emacs $(PBIN64)/emacs-nox
|
|
168 |
ln -f $(PBIN64)/emacs-nox $(PBIN64)/emacs-nox-$(VER)
|
|
169 |
|
|
170 |
$(PBIN32)/emacs-gtk: $(PBIN32)
|
|
171 |
$(BUILD_EMACS) 32 gtk $(INSTALL_ROOT)
|
|
172 |
cp $(EMACSDIST)/src/emacs $(PBIN32)/emacs-gtk
|
|
173 |
ln -f $(PBIN32)/emacs-gtk $(PBIN32)/emacs-gtk-$(VER)
|
|
174 |
|
|
175 |
$(PBIN64)/emacs-gtk: $(PBIN64)
|
|
176 |
$(BUILD_EMACS) 64 gtk $(INSTALL_ROOT)
|
|
177 |
cp $(EMACSDIST)/src/emacs $(PBIN64)/emacs-gtk
|
|
178 |
ln -f $(PBIN64)/emacs-gtk $(PBIN64)/emacs-gtk-$(VER)
|
|
179 |
|
|
180 |
|
|
181 |
# Rules to copy emacs manpages into the local proto, adding the
|
|
182 |
# Sun-specific attribute information. Some go in usr/share/man, others
|
|
183 |
# in usr/gnu/share/man
|
|
184 |
#
|
|
185 |
# ctags is a special case that should not go through sunman.pl.
|
|
186 |
# It simply inlines etags.1.
|
|
187 |
#
|
2
|
188 |
$(PGSHAREMAN1)/ctags.1: $(EMACSDIST)/doc/man/ctags.1
|
|
189 |
cp $(EMACSDIST)/doc/man/ctags.1 $(PGSHAREMAN1)/ctags.1
|
0
|
190 |
|
2
|
191 |
$(PSHAREMAN1)/% $(PGSHAREMAN1)/%: $(EMACSDIST)/doc/man/%
|
11
|
192 |
perl tools/sunman.pl editor/gnu-emacs < $< > $@
|
0
|
193 |
|
|
194 |
# Manpages lacking from the emacs distribution that we supply
|
|
195 |
#
|
|
196 |
# The emacs binaries come in their own packages
|
|
197 |
#
|
|
198 |
$(PSHAREMAN1)/emacs-x.1: augment/man/man1/emacs-x.1
|
11
|
199 |
perl tools/sunman.pl editor/gnu-emacs/gnu-emacs-x11 \
|
0
|
200 |
< augment/man/man1/emacs-x.1 > $(PSHAREMAN1)/emacs-x.1
|
|
201 |
|
|
202 |
$(PSHAREMAN1)/emacs-nox.1: augment/man/man1/emacs-nox.1
|
11
|
203 |
perl tools/sunman.pl editor/gnu-emacs/gnu-emacs-no-x11 \
|
0
|
204 |
< augment/man/man1/emacs-nox.1 > $(PSHAREMAN1)/emacs-nox.1
|
|
205 |
|
|
206 |
$(PSHAREMAN1)/emacs-gtk.1: augment/man/man1/emacs-gtk.1
|
11
|
207 |
perl tools/sunman.pl editor/gnu-emacs/gnu-emacs-gtk \
|
0
|
208 |
< augment/man/man1/emacs-gtk.1 > $(PSHAREMAN1)/emacs-gtk.1
|
|
209 |
|
|
210 |
$(PSHAREMAN1)/%: augment/man/man1/%
|
11
|
211 |
perl tools/sunman.pl editor/gnu-emacs < $< > $@
|
0
|
212 |
|
|
213 |
|
|
214 |
$(LIBDIRSYMLINK): $(LIBDIR)
|
|
215 |
(cd $(LIBDIR); \
|
|
216 |
ln -s i386-pc-solaris$(SOL_REV) x86_64-pc-solaris$(SOL_REV));
|
|
217 |
|
|
218 |
# Subdirectores we need to create within the local proto area
|
|
219 |
proto $(PBIN) $(PBIN32) $(PBIN64) $(PGBIN) $(PGSHAREMAN1) \
|
|
220 |
proto/usr/lib $(LIBDIR) :
|
|
221 |
mkdir -p $@
|
|
222 |
|
|
223 |
# The emacs files in PBIN are all links to /usr/lib/isaexec.
|
|
224 |
# Use a copy of the system version in our local proto so we have
|
|
225 |
# a file to link against. This file is not delivered to the real proto
|
|
226 |
#
|
|
227 |
proto/usr/lib/isaexec: proto/usr/lib
|
|
228 |
cp /usr/lib/isaexec proto/usr/lib
|
|
229 |
|
|
230 |
$(PBIN)/emacs-x $(PBIN)/emacs-x-$(VER) \
|
|
231 |
$(PBIN)/emacs-nox $(PBIN)/emacs-nox-$(VER) \
|
|
232 |
$(PBIN)/emacs-gtk $(PBIN)/emacs-gtk-$(VER) : $(PBIN) proto/usr/lib/isaexec
|
|
233 |
ln proto/usr/lib/isaexec $@
|
|
234 |
|
|
235 |
# proto/usr/bin/emacs is a shell script that decides which binary
|
|
236 |
# to exec at runtime.
|
|
237 |
#
|
|
238 |
$(PBIN)/emacs: augment/emacs
|
|
239 |
rm -f $(PBIN)/emacs
|
|
240 |
cp augment/emacs $(PBIN)
|
|
241 |
chmod +x $(PBIN)/emacs
|
|
242 |
|
|
243 |
test: # there aren't any
|
|
244 |
|
|
245 |
clean:
|
|
246 |
-rm -rf $(EMACSDIST) proto
|
|
247 |
|
|
248 |
include ../Makefile.targ
|
|
249 |
|
|
250 |
FRC:
|