1#
2# Makefile for racket
3#
4
5PACKAGE = racket
6
7srcdir = @srcdir@
8prefix = @prefix@
9exec_prefix = @exec_prefix@
10datarootdir = @datarootdir@
11bindir = @bindir@
12libdir = @libdir@
13includepltdir = @includepltdir@
14libpltdir = @libpltdir@
15libpltdir_rel = @libpltdir_rel@
16etcpltdir = @etcpltdir@
17sharepltdir = @sharepltdir@
18configdir = @etcpltdir@
19collectsdir = @collectsdir@
20builddir = @builddir@
21
22# for version.mak:
23mainsrcdir = @srcdir@/..
24@INCLUDEDEP@ @srcdir@/../version/version.mak
25
26NOOP = :
27
28CC = @CC@
29CPP = @CPP@
30
31# Although CFLAGS is defined via configure, the intent is that
32# CFLAGS and CPPFLAGS can be adjusted at `make' time.
33CFLAGS = @CFLAGS@ @COMPFLAGS@ @PROFFLAGS@
34CPPFLAGS =  @PREFLAGS@
35
36AR = @AR@
37ARFLAGS = @ARFLAGS@
38RANLIB = @RANLIB@
39
40STRIP_DEBUG = @STRIP_DEBUG@
41STRIP_LIB_DEBUG = @STRIP_LIB_DEBUG@
42
43STRIP_SIGNATURE = @STRIP_SIGNATURE@
44RESTORE_SIGNATURE = @RESTORE_SIGNATURE@ "${srcdir}/../mac/entitlements.plist"
45
46ARLIBFLAGS = @LDFLAGS@ @LIBS@
47
48RACKET = racket
49
50# See ../../Makefile about RUN_RACKET_<X>, which
51# typically redirects to RUN_THIS_RACKET_<X>:
52RUN_THIS_RACKET_CGC = ./racket@CGC@
53RUN_THIS_RACKET_MMM = ./racket@MMM@
54
55SETUP_BOOT = -O "info@compiler/cm" -l- setup @BOOT_MODE@ $(srcdir)/../setup-go.rkt ../compiled
56SETUP_BOOT_COLLECTS_PATH = $(SETUP_BOOT) collpath.inc collpath.d  "$(srcdir)/../start/collects-path.rkt" "${srcdir}/.."
57
58MZSRC = $(srcdir)/src
59
60FOREIGN_DIR = foreign
61FOREIGN_OBJ = $(FOREIGN_DIR)/foreign.@LTO@
62LIBFFI_OBJ_ON = $(FOREIGN_DIR)/libffi/src/*.@LTO@ $(FOREIGN_DIR)/libffi/src/*/*.@LTO@
63LIBFFI_OBJ_OFF =
64FOREIGN_OBJS = $(FOREIGN_OBJ) $(LIBFFI_OBJ_@OWN_LIBFFI@)
65LIBFFI_LIB_ON = foreign/libffi/libffi@FOREIGN_CONVENIENCE@.la
66LIBFFI_LIB_OFF =
67FOREIGN_LIB = $(FOREIGN_OBJ) $(LIBFFI_LIB_@OWN_LIBFFI@)
68FOREIGN_STUB_LIB = $(FOREIGN_OBJ)
69FOREIGN_OBJSLIB = @FOREIGN_OBJSLIB@
70# Dependency always uses FOREIGN_LIB, but linker uses FOREIGN_OBJSLIB. The
71#  FOREIGN_OBJSLIB expansion has too many "*"s to be a valid make target,
72#  while FOREIGN_LIB is not always acceptable to the linker.
73# The foreign build always uses libtool, so that's why we use .la instead of @LTA@
74#  in FOREIGN_LIB.
75
76# About EXE_SUFFIX:
77#  Cygwin offers the illusion that binaries have no ".exe" suffix by
78#  having the file-open syscall open an ".exe" file for reading when
79#  (1) the given filename has no suffix, and (2) there's not a suffixless
80#  file present. However, Cygwin doesn't do that when opening a file for
81#  output, even when the output mode is 'update. So we need to explicitly
82#  add EXE_SUFFIX in a few places.
83
84################################################################################
85
86bin:
87	$(MAKE) @MZBINTARGET@
88
89normal-bin:
90	$(MAKE) @MAIN_VARIANT@-with-gracket
91
92common:
93	$(MAKE) g-c
94	$(MAKE) @FOREIGNTARGET@
95	$(MAKE) rktio-lib
96
97cgc:
98	$(MAKE) cgc-core
99	$(MAKE) sysinfer@CGC@
100
101cgc-core:
102	$(MAKE) common
103	$(MAKE) dynlib
104	$(MAKE) mzlibrary
105	$(MAKE) racket@CGC@@EXE_SUFFIX@
106	$(MAKE) cstartup
107	$(MAKE) mzlibrary
108	$(MAKE) racket@CGC@@EXE_SUFFIX@
109	$(MAKE) mzcom@CGC@@EXE_SUFFIX@
110
1113m:
112	$(MAKE) @CGC_IF_NEEDED_FOR_MMM@
113	$(MAKE) cstartup
114	cd gc2; $(MAKE) all
115	cd dynsrc; $(MAKE) dynlib3m
116	cd gc2; $(MAKE) ../racket@MMM@@EXE_SUFFIX@
117	cd gc2; $(MAKE) ../mzcom@MMM@@EXE_SUFFIX@
118	$(MAKE) sysinfer@MMM@
119
1203m-with-gracket:
121	$(MAKE) 3m
122	$(MAKE) @MAKE_GRACKET@-3m
123
124gracket-3m:
125	cd gracket && $(MAKE) 3m
126
127no-3m:
128	$(NOOP)
129
130cgc-with-gracket:
131	$(MAKE) cgc
132	$(MAKE) @MAKE_GRACKET@-cgc
133
134gracket-cgc:
135	cd gracket && $(MAKE) cgc
136
137no-cgc:
138	$(NOOP)
139
140both:
141	$(MAKE) cgc-core
142	$(MAKE) 3m
143
144racketlib:
145	$(MAKE) g-c
146	$(MAKE) @FOREIGNTARGET@
147	$(MAKE) mzlibrary
148
149dynlib:
150	cd dynsrc; $(MAKE) dynlib
151
152dynexample:
153	$(MAKE) dynlib
154	cd dynsrc; $(MAKE) dynexample
155
156oe:
157	$(MAKE) dynlib
158	cd dynsrc; $(MAKE) oe
159
160g-c:
161	cd @GCDIR@; $(MAKE) ../libmzgc.@LIBSFX@
162
163exports:
164	cd src; $(MAKE) mzheaders
165
166sproc-extra-lib:
167	cd @GCDIR@; $(MAKE) sproc.@LTO@
168	$(MAKE) sproc.@LTO@
169
170gc.@LIBSFX@:
171	$(AR) $(ARFLAGS) @GCDIR@/gc.@LIBSFX@ @GCDIR@/*.@LTO@
172
173# Compilation of the foreign libraries (this compiles all of them)
174foreign-stuff:
175	cd $(FOREIGN_DIR); $(MAKE) all
176
177foreign-stub:
178	cd $(FOREIGN_DIR); $(MAKE) stub
179
180rktio-lib:
181	cd rktio; $(MAKE) CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)"
182
183mzlibrary:
184	cd src; $(MAKE) all
185	$(MAKE) libracket.@LIBSFX@
186
187# For no-cgc-needed, we don't need to build the gc or link racketcgc,
188# but gc2 depends on a few plain-src objects
189no-cgc-needed:
190	cd src; $(MAKE) plain-objs
191	$(MAKE) @FOREIGNTARGET@
192	$(MAKE) rktio-lib
193	$(MAKE) main.@LTO@
194	$(MAKE) mingw-other
195	cd dynsrc; $(MAKE) ../starter@EXE_SUFFIX@
196
197ALL_CPPFLAGS = -I$(builddir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/../version $(CPPFLAGS) @OPTIONS@ @GC2OPTIONS@ @MZOPTIONS@
198MKSYSTEM_ARGS = -cqu $(srcdir)/mksystem.rkt system.rktd "$(CPP) $(ALL_CPPFLAGS) $(srcdir)/src/systype.c" "@MMM_INSTALLED@" @CROSS_COMPILE_TARGET_KIND@
199
200sysinfer@CGC@:
201	@RUN_RACKET_CGC@ $(MKSYSTEM_ARGS) "@RUN_RACKET_CGC@" "$(RUN_THIS_RACKET_CGC)"
202
203sysinfer@MMM@:
204	@RUN_RACKET_MMM@ $(MKSYSTEM_ARGS) "@RUN_RACKET_MMM@" "$(RUN_THIS_RACKET_MMM)"
205
206
207FOREIGN_USED_LIB = $(FOREIGN_OBJ) $(FOREIGN_LIB)
208FOREIGN_USED_OBJSLIB = $(FOREIGN_OBJSLIB)
209FOREIGN_NOT_USED_LIB = $(FOREIGN_OBJ)
210FOREIGN_NOT_USED_OBJSLIB = $(FOREIGN_OBJ)
211
212LIBRKTIO = rktio/librktio.@LTA@
213LIBRKTIO_FOR_DLL_la = $(LIBRKTIO)
214LIBRKTIO_FOR_DLL_a =
215LIBRKTIO_FOR_LIB_la =
216LIBRKTIO_FOR_LIB_a = $(LIBRKTIO)
217LIBRKTIO_FOR_DLL = $(LIBRKTIO_FOR_DLL_@LIBSFX@)
218LIBRKTIO_FOR_LIB = $(LIBRKTIO_FOR_LIB_@LIBSFX@)
219
220libracket.@LIBSFX@: src/*.@LTO@ $(@FOREIGN_IF_USED@_LIB) $(LIBRKTIO_FOR_DLL)
221	$(AR) $(ARFLAGS) libracket.@LIBSFX@ src/*.@LTO@ $(@FOREIGN_IF_USED@_OBJSLIB) $(LIBRKTIO_FOR_DLL) @LIBRACKET_DEP@
222
223# Irix sproc, only
224sproc.@LTO@: @GCDIR@/sproc.@LTO@
225	cp @GCDIR@/sproc.@LTO@ sproc.@LTO@
226
227# Unix ----------------------------------------
228
229racket@CGC@@NOT_OSX@@NOT_MINGW@: libracket.@LIBSFX@ libmzgc.@LIBSFX@ main.@LTO@ $(LIBRKTIO_FOR_LIB) $(SPECIALIZINGOBJECTS)
230	@MZLINKER@ -o racket@CGC@ main.@LTO@ $(SPECIALIZINGOBJECTS) libracket.@LIBSFX@ libmzgc.@LIBSFX@ $(LIBRKTIO_FOR_LIB) @LDFLAGS@ @LIBS@
231	@POST_LINKER@ racket@CGC@
232
233mzcom@CGC@@NOT_MINGW@:
234	$(NOOP)
235
236# Mac OS ----------------------------------------
237
238MZFW = Racket.framework/Versions/$(FWVERSION)/Racket
239
240MACLIBRKT_LIBS = $(SPECIALIZINGOBJECTS) libracket.@LIBSFX@ libmzgc.@LIBSFX@ $(LIBRKTIO) -framework CoreFoundation
241
242$(MZFW): libracket.@LIBSFX@ libmzgc.@LIBSFX@ $(SPECIALIZINGOBJECTS) $(LIBRKTIO)
243	mkdir -p  Racket.framework/Versions/$(FWVERSION)
244	@MZLINKER@ -o $(MZFW) @LDFLAGS@ -dynamiclib -all_load $(MACLIBRKT_LIBS) @LIBS@
245	rm -f Racket.framework/Racket
246	ln -s Versions/$(FWVERSION)/Racket Racket.framework/Racket
247
248# Depending on MACLIBRKT_LINK_MODE, use Framework or statically link the framework's code:
249MACLIBRKT_LINK_fw = -F. -framework Racket
250MACLIBRKT_LINK_static = $(MACLIBRKT_LIBS)
251
252racket@CGC@@OSX@: $(MZFW) main.@LTO@
253	@MZLINKER@ -o racket@CGC@ @PROFFLAGS@ @LDFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names $(MACLIBRKT_LINK_@MACLIBRKT_LINK_MODE@) @LIBS@
254	/usr/bin/install_name_tool -change "Racket.framework/Versions/$(FWVERSION)/Racket" "@executable_path/Racket.framework/Versions/$(FWVERSION)/Racket" "racket@CGC@"
255
256# mingw ----------------------------------------
257
258lib/libmzgcxxxxxxx.dll: libmzgc.@LIBSFX@
259	mkdir -p lib
260	@MZLINKER@ -shared -o lib/libmzgcxxxxxxx.dll -Wl,--output-def -Wl,libmzgc.def -Wl,--whole-archive libmzgc.@LIBSFX@ -Wl,--no-whole-archive @LDFLAGS@ -static-libgcc @LIBS@
261
262mzsj86g.o: $(srcdir)/src/mzsj86g.S
263	$(CC) -c -o mzsj86g.o $(srcdir)/src/mzsj86g.S
264
265lib/libracketxxxxxxx.dll: lib/libmzgcxxxxxxx.dll libracket.@LIBSFX@ mzsj86g.o $(LIBRKTIO)
266	mkdir -p lib
267	@MZLINKER@ -shared -o lib/libracketxxxxxxx.dll mzsj86g.o -Wl,--output-def -Wl,libracket.def -Wl,--whole-archive libracket.@LIBSFX@ -Wl,--no-whole-archive $(LIBRKTIO) @LDFLAGS@ -lshell32 -luser32 -lws2_32 -lwinmm lib/libmzgcxxxxxxx.dll -static-libgcc @LIBS@
268
269libracket.dll.a: lib/libracketxxxxxxx.dll
270	@DLLTOOL@ --def libracket.def -D libracketxxxxxxx.dll --output-exp libracketxxxxxxx.exp --output-lib libracketxxxxxxx.lib --output-delaylib libracket.dll.a
271
272libmzgc.dll.a: lib/libmzgcxxxxxxx.dll
273	@DLLTOOL@ --def libmzgc.def -D libmzgcxxxxxxx.dll --output-lib libmzgcxxxxxxx.lib --output-exp libmzgcxxxxxxx.lib --output-delaylib libmzgc.dll.a
274
275rres.o: $(srcdir)/../worksp/racket/racket.rc
276	@WINDRES@ -i $(srcdir)/../worksp/racket/racket.rc -o rres.o
277
278MW_RACKET_LIBS = libracket.dll.a libmzgc.dll.a @LDFLAGS@ @LIBS@ -ldelayimp -static-libgcc
279
280racket@CGC@@EXE_SUFFIX@@MINGW@: libracket.dll.a libmzgc.dll.a main.@LTO@ MemoryModule.@LTO@ $(SPECIALIZINGOBJECTS) rres.o
281	@MZLINKER@ -o racket@CGC@@EXE_SUFFIX@ main.@LTO@ MemoryModule.@LTO@ rres.o $(SPECIALIZINGOBJECTS) $(MW_RACKET_LIBS)
282
283MemoryModule.@LTO@: $(srcdir)/../start/MemoryModule.c $(srcdir)/../start/MemoryModule.h
284	$(CC) -c -I $(srcdir)/../start -o MemoryModule.@LTO@ $(srcdir)/../start/MemoryModule.c
285
286mingw-other@MINGW@: mzsj86g.o MemoryModule.@LTO@ rres.o comres.o com_glue.@LTO@
287	$(NOOP)
288
289mingw-other@NOT_MINGW@:
290	$(NOOP)
291
292mzcom@CGC@@EXE_SUFFIX@@MINGW@: libracket.dll.a libmzgc.dll.a mzcom.@LTO@ mzobj.@LTO@ com_glue.@LTO@ $(SPECIALIZINGOBJECTS) comres.o
293	@MZLINKER@ -mwindows -o mzcom@CGC@@EXE_SUFFIX@ mzcom.@LTO@ mzobj.@LTO@ com_glue.@LTO@ comres.o $(SPECIALIZINGOBJECTS) -lole32 -loleaut32 -luuid $(MW_RACKET_LIBS)
294
295comres.o : $(srcdir)/../worksp/mzcom/mzcom.rc $(srcdir)/../mzcom/prebuilt/MzCOM.tlb
296	@WINDRES@ -I $(srcdir)/../mzcom -I $(srcdir)/../mzcom/prebuilt -i $(srcdir)/../worksp/mzcom/mzcom.rc -o comres.o
297
298# ----------------------------------------
299
300DEF_COLLECTS_DIR = -DINITIAL_COLLECTS_DIRECTORY='"'"`cd $(srcdir)/../../collects; @PWD@`"'"'
301DEF_CONFIG_DIR = -DINITIAL_CONFIG_DIRECTORY='"'"`cd $(srcdir)/../..; @PWD@`/etc"'"'
302DEF_C_DIRS = $(DEF_COLLECTS_DIR) $(DEF_CONFIG_DIR)
303
304MAIN_HEADER_DEPS = $(srcdir)/include/scheme.h $(srcdir)/include/schthread.h $(srcdir)/sconfig.h \
305                   $(srcdir)/src/stypes.h $(srcdir)/cmdline.inc $(srcdir)/../start/parse_cmdl.inc \
306                   $(srcdir)/../start/cmdl_to_argv.inc \
307	           $(srcdir)/../start/config.inc $(srcdir)/../start/self_exe.inc $(srcdir)/../start/delayed.inc \
308	           $(srcdir)/../start/embedded_dll.inc
309
310MAIN_INCLUDES = -I$(builddir) -I$(srcdir)/include -I$(srcdir)/../version
311
312main.@LTO@: $(srcdir)/main.c $(MAIN_HEADER_DEPS)
313	$(CC) $(MAIN_INCLUDES) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ @MZOPTIONS@ $(DEF_C_DIRS) -c $(srcdir)/main.c -o main.@LTO@
314
315main_ee.@LTO@: main.@LTO@
316	$(CC) $(MAIN_INCLUDES) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ @MZOPTIONS@ $(DEF_C_DIRS) -DSTANDALONE_WITH_EMBEDDED_EXTENSION -c $(srcdir)/main.c -o main_ee.@LTO@
317
318ee-main:
319	$(MAKE) main_ee.@LTO@
320
321ee-app: $(RACKET) main_ee.@LTO@
322	if [ "$(EEAPP)" = '' ] ; then echo "ERROR: You must specify EEAPP" ; else $(CC) $(MAIN_CFLAGS_NODBG) -o $(EEAPP) main_ee.@LTO@ $(EEOBJECTS) $(SPECIALIZINGOBJECTS) libracket.@LIBSFX@ libmzgc.@LIBSFX@ @LIBS@ ; fi
323
324MZCOM_DEPS = $(MAIN_HEADER_DEPS) $(srcdir)/../mzcom/com_glue.h $(srcdir)/../mzcom/resource.h
325
326mzcom.@LTO@: $(srcdir)/../mzcom/mzcom.cxx $(MZCOM_DEPS)
327	$(CC) -fno-exceptions $(MAIN_INCLUDES) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ @MZOPTIONS@ $(DEF_C_DIRS) -c $(srcdir)/../mzcom/mzcom.cxx -o mzcom.@LTO@
328
329mzobj.@LTO@: $(srcdir)/../mzcom/mzobj.cxx $(MZCOM_DEPS)
330	$(CC) -fno-exceptions $(MAIN_INCLUDES) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ @MZOPTIONS@ -c $(srcdir)/../mzcom/mzobj.cxx -o mzobj.@LTO@
331
332com_glue.@LTO@: $(srcdir)/../mzcom/com_glue.c $(MZCOM_DEPS)
333	$(CC) $(MAIN_INCLUDES) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ @MZOPTIONS@ -c $(srcdir)/../mzcom/com_glue.c -o com_glue.@LTO@
334
335exn:
336	$(RACKET) -um $(srcdir)/src/makeexn > $(srcdir)/src/schexn.h
337	$(RACKET) -um $(srcdir)/src/makeexn kernstruct $(collectsdir)/racket/private/kernstruct.rkt
338
339CSTARTUPDEST = cstartup.inc
340
341MZCONFIGDIR@NOT_MINGW@ = .
342MZCONFIGDIR@MINGW@ = "$(srcdir)/../worksp"
343
344headers:
345	@RUN_RACKET_CGC@ -cqu $(srcdir)/mkincludes.rkt @DIRCVTPRE@"$(DESTDIR)$(includepltdir)"@DIRCVTPOST@ "$(srcdir)" $(MZCONFIGDIR)
346	cd ..; cp bc/system.rktd "$(DESTDIR)$(libpltdir)/system.rktd"
347
348# The `cstartup` target may update "cstartup.inc", either replacing a
349# stub "cstartup.inc" that redirects to "startup.inc" or rebuilding
350# because "startup.inc" or "racket_version.h" changed; so, during a CGC
351# build, we try again after building this target to potentially update
352# the CGC build to a compiled-startup build. A particular `cstartup`
353# target variant is selected by the `configure` script based on whether
354# `--{en,dis}able-cify` is specified; for example `STARTUP_AS_AUTO`
355# with be the empty string is neither is specified, in which case
356# of the the other targets is selected by a recursive `$(MAKE)`.
357
358cstartup@STARTUP_AS_AUTO@:
359	$(MAKE) cstartup_`@RUN_RACKET_CGC@ -cu $(srcdir)/src/startup-select.rkt`
360
361# For compiling the startup code to bytecode
362cstartup@STARTUP_AS_BYTECODE@:
363	@RUN_RACKET_CGC@ -cu $(srcdir)/src/compile-startup.rkt $(CSTARTUPDEST) cstartup.zo $(srcdir)/src/startup.inc $(srcdir)/../version/racket_version.h
364
365# For compiling the startup code to C
366cstartup@STARTUP_AS_C@:
367	@RUN_RACKET_CGC@ -cu $(srcdir)/src/cify-check.rkt $(CSTARTUPDEST)
368	$(MAKE) cstartup.inc
369
370cstartup_:
371	echo "Bad startup choice, probably an error running startup-select.rkt"
372	exit 1
373
374# Running "cify-startup.rkt" through "$(SETUP_BOOT)" generates more
375# dependencies in "cstartup.d" for `$(CSTARTUPDEST)`
376$(CSTARTUPDEST): $(srcdir)/src/startup.inc $(srcdir)/../version/racket_version.h
377	@RUN_RACKET_CGC@ $(SETUP_BOOT) cstartup.inc cstartup.d $(srcdir)/src/cify-startup.rkt $(srcdir)/src/startup.inc $(srcdir)/../version/racket_version.h
378@INCLUDEDEP@ cstartup.d
379
380mark:
381	racket -cu $(srcdir)/src/mkmark.rkt $(srcdir)/src < $(srcdir)/src/mzmarksrc.c
382
383clean@NOT_OSX@:
384	/bin/rm -rf tmp[123456789] tests/tmp[123456789] tests/sub[123]
385	/bin/rm -f tests/*~
386	/bin/rm -f *.@LTO@ core
387	/bin/rm -f mzdyn.o libmzgc.@LIBSFX@ libracket.@LIBSFX@ libracket3m.@LIBSFX@ libdl.a racket racket.multiboot
388	/bin/rm -f include/macosxpre
389	/bin/rm -f include/macosxpre.p
390	/bin/rm -f $(CSTARTUPDEST)
391	cd gc2; $(MAKE) clean
392	cd sgc; $(MAKE) clean
393	cd src; $(MAKE) clean
394	cd dynsrc; $(MAKE) clean
395	if [ -d ../foreign ] ; then cd ../foreign ; $(MAKE) clean ; fi
396
397clean@OSX@:
398	rm -rf Racket.framework
399	$(MAKE) clean@NOT_OSX@
400
401BUILDINFO=$(DESTDIR)$(libpltdir)/buildinfo
402ICP=@ICP@
403ICP_LIB=@ICP_LIB@
404ICP_STATIC_LIB=@ICP_STATIC_LIB@
405
406install:
407	$(MAKE) install-@MAIN_VARIANT@
408
409install-3m:
410	$(MAKE) headers
411	$(MAKE) @MZINSTALLTARGET@
412	$(MAKE) @MZINSTALLTARGET@-3m
413	$(MAKE) @MZINSTALLTARGET@-3m-final
414	$(MAKE) install-@MAKE_GRACKET@-3m
415
416install-cgc:
417	$(MAKE) headers
418	$(MAKE) @MZINSTALLTARGET@
419	$(MAKE) @MZINSTALLTARGET@-cgc
420	$(MAKE) @MZINSTALLTARGET@-cgc-final
421	$(MAKE) install-@MAKE_GRACKET@-cgc
422
423install-both:
424	$(MAKE) headers
425	$(MAKE) @MZINSTALLTARGET@
426	$(MAKE) @MZINSTALLTARGET@-3m
427	$(MAKE) @MZINSTALLTARGET@-cgc
428	$(MAKE) @MZINSTALLTARGET@-@MAIN_VARIANT@-final
429	$(MAKE) install-@MAKE_GRACKET@-3m
430	$(MAKE) install-@MAKE_GRACKET@-cgc
431
432install-gracket-3m:
433	cd gracket; $(MAKE) install-3m
434
435install-gracket-cgc:
436	cd gracket; $(MAKE) install-cgc
437
438install-no-3m:
439	$(NOOP)
440
441install-no-cgc:
442	$(NOOP)
443
444install-lib-finish:
445	if [ "$(DESTDIR)" = "" ]; then \
446	  @LIBFINISH@ "$(LIB_FINISH_DIR)"; \
447	fi
448
449install-post-collects:
450	$(MAKE) install-@MAKE_GRACKET@-post-collects
451
452install-gracket-post-collects:
453	cd gracket && $(MAKE) install-post-collects
454
455install-no-post-collects:
456	$(NOOP)
457
458# Intended for configuration by an external makefile that drives this one:
459SELF_ROOT_CONFIG_FLAG = -Z
460SELF_ROOT_CONFIG_DIR = ../../../../build/config
461SELF_ROOT_CONFIG = $(SELF_ROOT_CONFIG_FLAG) $(SELF_ROOT_CONFIG_DIR)
462
463INST_CONFIG = -X @DIRCVTPRE@"$(DESTDIR)$(collectsdir)"@DIRCVTPOST@ -G @DIRCVTPRE@"$(DESTDIR)$(configdir)"@DIRCVTPOST@
464SETUP_RACKET_FLAGS = $(INST_CONFIG) $(SETUP_MACHINE_FLAGS) $(SELF_ROOT_CONFIG) @INSTALL_SETUP_RACKET_FLAGS@
465SETUP_SETUP_FLAGS = @INSTALL_SETUP_FLAGS@ $(PLT_SETUP_OPTIONS) $(PLT_ISO)
466SETUP_ARGS = $(SETUP_RACKET_FLAGS) -N "raco" -l- setup $(SETUP_SETUP_FLAGS)
467
468install-setup-3m:
469	@RUN_RACKET_MMM@ $(SETUP_ARGS)
470
471install-setup-cgc:
472	@RUN_RACKET_CGC@ $(SETUP_ARGS)
473
474# Unix install ----------------------------------------
475
476# Prefix might be relative to srcdir, or it might be absolute, so we
477# have to go up and install things from there.
478
479unix-install:
480	cd ..; rm -f "$(DESTDIR)@MZINSTALLBINDIR@/racket@CGC_INSTALLED@"
481	cd ..; rm -f "$(DESTDIR)@MZINSTALLBINDIR@/racket@MMM_INSTALLED@"
482	cd ..; cp bc/starter@EXE_SUFFIX@ "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@"
483	cp $(srcdir)/../start/starter-sh .
484	cd ..; cp bc/starter-sh "$(DESTDIR)$(libpltdir)/starter-sh"
485	cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@"
486	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@"
487	@RUN_RACKET_CGC@ $(SETUP_BOOT_COLLECTS_PATH) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@
488	cd ..; echo 'CC=@CC@' > "$(BUILDINFO)"
489	cd ..; echo 'CFLAGS=$(CFLAGS) $(CPPFLAGS)' >> "$(BUILDINFO)"
490	cd ..; echo 'OPTIONS=@OPTIONS@' >> "$(BUILDINFO)"
491	cd ..; echo 'MZOPTIONS=@MZOPTIONS@' >> "$(BUILDINFO)"
492	cd ..; echo "LDFLAGS=@LDFLAGS@" >> "$(BUILDINFO)"
493	cd ..; echo 'LIBS=@LIBS@' >> "$(BUILDINFO)"
494
495unix-install-cgc:
496	$(MAKE) unix-@INSTALL_LIBS_ENABLE@-libs-cgc
497	cd ..; $(ICP) bc/racket@CGC@ "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@"
498	cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@"
499	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@"
500	cd ..; cp bc/mzdyn.o "$(DESTDIR)$(libpltdir)/mzdyn.o"
501	@RUN_RACKET_CGC@ $(SETUP_BOOT_COLLECTS_PATH) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@@EXE_SUFFIX@" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@
502	$(RESTORE_SIGNATURE) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@"
503
504unix-install-libs-cgc:
505	cd ..; $(ICP_LIB) bc/libmzgc.@LIBSFX@ "$(DESTDIR)$(libdir)/libmzgc.@LIBSFX@"
506	cd ..; $(ICP_LIB) bc/libracket.@LIBSFX@ "$(DESTDIR)$(libdir)/libracket.@LIBSFX@"
507	cd ..; $(ICP_STATIC_LIB) bc/rktio/librktio.@LIBSFX@ "$(DESTDIR)$(libdir)/librktio.@LIBSFX@"
508	cd ..; $(STRIP_LIB_DEBUG) "$(DESTDIR)$(libdir)/libmzgc.@LIBSFX@"
509	cd ..; $(STRIP_LIB_DEBUG) "$(DESTDIR)$(libdir)/libracket.@LIBSFX@"
510
511unix-no-install-libs-cgc:
512	$(NOOP)
513
514unix-install-cgc-final:
515	$(NOOP)
516
517unix-install-3m:
518	cd ..; $(ICP) bc/racket@MMM@ "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@"
519	cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@"
520	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@"
521	$(MAKE) unix-@INSTALL_LIBS_ENABLE@-libs-3m
522	cd ..; $(ICP) bc/mzdyn3m.o "$(DESTDIR)$(libpltdir)/mzdyn3m.o"
523	@RUN_RACKET_MMM@ $(SETUP_BOOT_COLLECTS_PATH) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@@EXE_SUFFIX@" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@
524	$(RESTORE_SIGNATURE) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@"
525
526unix-install-libs-3m:
527	cd ..; $(ICP_LIB) bc/libracket3m.@LIBSFX@ "$(DESTDIR)$(libdir)/libracket3m.@LIBSFX@"
528	cd ..; $(ICP_STATIC_LIB) bc/rktio/librktio.@LIBSFX@ "$(DESTDIR)$(libdir)/librktio.@LIBSFX@"
529	cd ..; $(STRIP_LIB_DEBUG) "$(DESTDIR)$(libdir)/libracket3m.@LIBSFX@"
530
531unix-no-install-libs-3m:
532	$(NOOP)
533
534unix-install-3m-final:
535	$(NOOP)
536
537# mingw install ----------------------------------------
538
539mingw-install:
540	cd ..; rm -f "$(DESTDIR)@MZINSTALLBINDIR@/racket@CGC_INSTALLED@"
541	cd ..; rm -f "$(DESTDIR)@MZINSTALLBINDIR@/racket@MMM_INSTALLED@"
542	cd ..; cp bc/starter@EXE_SUFFIX@ "$(DESTDIR)$(libpltdir)/MzStart@EXE_SUFFIX@"
543	cd ..; cp bc/mrstarter@EXE_SUFFIX@ "$(DESTDIR)$(libpltdir)/MrStart@EXE_SUFFIX@"
544	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/MzStart@EXE_SUFFIX@"
545	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/MrStart@EXE_SUFFIX@"
546	cp "$(srcdir)/../mzcom/prebuilt/MzCOM.tlb" MzCOM.tlb
547	cd ..; cp bc/MzCOM.tlb "$(DESTDIR)$(libpltdir)/MzCOM.tlb"
548
549mingw-install-cgc:
550	cd ..; mkdir -p "$(DESTDIR)$(libdir)/gcc"
551	cd ..; $(ICP) bc/libmzgcxxxxxxx.lib "$(DESTDIR)$(libdir)/gcc/libmzgcxxxxxxx.lib"
552	cd ..; $(ICP) bc/libmzgcxxxxxxx.exp "$(DESTDIR)$(libdir)/gcc/libmzgcxxxxxxx.exp"
553	cd ..; $(ICP) bc/libmzgc.def "$(DESTDIR)$(libdir)/libmzgcxxxxxxx.def"
554	cd ..; $(ICP) bc/libracketxxxxxxx.lib "$(DESTDIR)$(libdir)/gcc/libracketxxxxxxx.lib"
555	cd ..; $(ICP) bc/libracketxxxxxxx.exp "$(DESTDIR)$(libdir)/gcc/libracketxxxxxxx.exp"
556	cd ..; $(ICP) bc/libracket.def "$(DESTDIR)$(libdir)/libracketxxxxxxx.def"
557	cd ..; $(ICP) bc/mzdyncgc.o "$(DESTDIR)$(libdir)/gcc/mzdyn.obj"
558	cd ..; $(ICP) bc/mzdyncgc.exp "$(DESTDIR)$(libdir)/gcc/mzdyn.exp"
559	cd ..; $(ICP) bc/lib/libmzgcxxxxxxx.dll "$(DESTDIR)$(libdir)/libmzgcxxxxxxx.dll"
560	cd ..; $(ICP) bc/lib/libracketxxxxxxx.dll "$(DESTDIR)$(libdir)/libracketxxxxxxx.dll"
561	cd ..; $(ICP) bc/racket@CGC@@EXE_SUFFIX@ "$(DESTDIR)@MZINSTALLBINDIR@/Racket@CGC_INSTALLED@@EXE_SUFFIX@"
562	cd ..; $(ICP) bc/mzcom@CGC@@EXE_SUFFIX@ "$(DESTDIR)$(libdir)/MzCOM@CGC_INSTALLED@@EXE_SUFFIX@"
563	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libdir)/libmzgcxxxxxxx.dll"
564	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libdir)/libracketxxxxxxx.dll"
565	cd ..; $(STRIP_DEBUG) "$(DESTDIR)@MZINSTALLBINDIR@/Racket@CGC_INSTALLED@@EXE_SUFFIX@"
566	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libdir)/MzCOM@CGC_INSTALLED@@EXE_SUFFIX@"
567	@RUN_RACKET_CGC@ $(SETUP_BOOT_COLLECTS_PATH) @DIRCVTPRE@"$(DESTDIR)@MZINSTALLBINDIR@/Racket@CGC_INSTALLED@@EXE_SUFFIX@"@DIRCVTPOST@ $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@
568
569mingw-install-cgc-final:
570	$(NOOP)
571
572mingw-install-3m:
573	cd ..; mkdir -p "$(DESTDIR)$(libdir)/gcc"
574	cd ..; $(ICP) bc/gc2/libracket3mxxxxxxx.lib "$(DESTDIR)$(libdir)/gcc/libracket3mxxxxxxx.lib"
575	cd ..; $(ICP) bc/gc2/libracket3mxxxxxxx.exp "$(DESTDIR)$(libdir)/gcc/libracket3mxxxxxxx.exp"
576	cd ..; $(ICP) bc/gc2/libracket3m.def "$(DESTDIR)$(libdir)/libracket3mxxxxxxx.def"
577	cd ..; $(ICP) bc/mzdyn3m.o "$(DESTDIR)$(libdir)/gcc/mzdyn3m.obj"
578	cd ..; $(ICP) bc/mzdyn3m.exp "$(DESTDIR)$(libdir)/gcc/mzdyn3m.exp"
579	cd ..; $(ICP) bc/racket@MMM@@EXE_SUFFIX@ "$(DESTDIR)@MZINSTALLBINDIR@/Racket@MMM_INSTALLED@@EXE_SUFFIX@"
580	cd ..; $(ICP) bc/mzcom@MMM@@EXE_SUFFIX@ "$(DESTDIR)$(libdir)/MzCOM@MMM_INSTALLED@@EXE_SUFFIX@"
581	cd ..; $(ICP) bc/lib/libracket3mxxxxxxx.dll "$(DESTDIR)$(libdir)/libracket3mxxxxxxx.dll"
582	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libdir)/libracket3mxxxxxxx.dll"
583	cd ..; $(STRIP_DEBUG) "$(DESTDIR)@MZINSTALLBINDIR@/Racket@MMM_INSTALLED@@EXE_SUFFIX@"
584	cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libdir)/MzCOM@MMM_INSTALLED@@EXE_SUFFIX@"
585	@RUN_RACKET_MMM@ $(SETUP_BOOT_COLLECTS_PATH) @DIRCVTPRE@"$(DESTDIR)@MZINSTALLBINDIR@/Racket@MMM_INSTALLED@@EXE_SUFFIX@"@DIRCVTPOST@ $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@
586
587mingw-install-3m-final:
588	$(NOOP)
589
590# OS X install ----------------------------------------
591
592MZFWDIR = @FRAMEWORK_INSTALL_DIR@/Racket.framework
593MZFWMMM = Racket.framework/Versions/$(FWVERSION)_3m/Racket
594FRAMEWORK_REL_PREFIX = "@executable_path/../$(libpltdir_rel)/"
595FRAMEWORK_ABS_PREFIX = "$(libpltdir)/"
596
597osx-install:
598	$(MAKE) unix-install
599	rm -f $(DESTDIR)$(MZFWDIR)/Racket
600	rm -rf $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)
601	rm -rf $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)_3m
602	if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then @RUN_RACKET_CGC@ -cu "$(srcdir)/../mac/clean-fw.rkt" $(DESTDIR)$(MZFWDIR) ; fi
603	mkdir -p $(DESTDIR)@FRAMEWORK_INSTALL_DIR@
604
605osx-install-cgc:
606	$(MAKE) unix-install-cgc
607	mkdir -p $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)
608	cp $(MZFW) $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)/
609	$(STRIP_SIGNATURE) $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@"
610	/usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)/Racket" $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@"
611	$(RESTORE_SIGNATURE) $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@"
612
613osx-install-cgc-final:
614	$(MAKE) unix-install-cgc-final
615	ln -s Versions/$(FWVERSION)/Racket $(DESTDIR)$(MZFWDIR)/
616
617osx-install-3m:
618	$(MAKE) unix-install-3m
619	mkdir -p $(DESTDIR)"$(MZFWDIR)/Versions/$(FWVERSION)_3m"
620	cp $(MZFWMMM) $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)_3m/
621	$(STRIP_SIGNATURE) $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@"
622	/usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)_3m/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_3m/Racket" $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@"
623	$(RESTORE_SIGNATURE) $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@"
624
625osx-install-3m-final:
626	$(MAKE) unix-install-3m-final
627	ln -s Versions/$(FWVERSION)_3m/Racket $(DESTDIR)$(MZFWDIR)/
628
629
630# Cygwin install ----------------------------------------
631
632unix-cygwin-install:
633	$(MAKE) unix-install
634	cd dynsrc; $(MAKE) cygwin-install-core
635
636unix-cygwin-install-cgc:
637	$(MAKE) unix-install-cgc
638	cd dynsrc; $(MAKE) cygwin-install-cgc
639
640unix-cygwin-install-cgc-final:
641	$(MAKE) unix-install-cgc-final
642
643unix-cygwin-install-3m:
644	$(MAKE) unix-install-3m
645	cd dynsrc; $(MAKE) cygwin-install-3m
646
647unix-cygwin-install-3m-final:
648	$(MAKE) unix-install-3m-final
649
650# Generate plt-gdbinit ----------------------------------------
651
652mz-gdbinit: $(srcdir)/mk-gdbinit.rkt $(srcdir)/src/stypes.h
653	$(RACKET) $(srcdir)/mk-gdbinit.rkt
654
655
656# Reconfigure ----------------------------------------
657
658SRC_MAKEFILES = $(srcdir)/Makefile.in \
659                $(srcdir)/src/Makefile.in $(srcdir)/gracket/Makefile.in \
660                $(srcdir)/gc2/Makefile.in $(srcdir)/gracket/gc2/Makefile.in \
661                $(srcdir)/../rktio/Makefile.in $(srcdir)/dynsrc/Makefile.in \
662                $(srcdir)/foreign/Makefile.in $(srcdir)/foreign/libffi/Makefile.in
663
664# Only fire the `Makefile` rule explicitly via `reconfigure`
665NO_RECONFIG =
666ON_RECONFIG = no
667
668reconfigure:
669	$(MAKE) Makefile NO_RECONFIG=no ON_RECONFIG=
670
671Makefile$(ON_RECONFIG): $(srcdir)/configure $(SRC_MAKEFILES)
672	$(srcdir)/configure $(CONFIGURE_ARGS_qq) $(MORE_CONFIGURE_ARGS)
673