1# GLOBAL CFLAGS
2
3GC_CFLAGS = \
4	    -DGC_THREADS \
5	    -DLARGE_CONFIG=1 \
6	    -DTHREAD_LOCAL_ALLOC=1 \
7	    -DHAS_X86_THREAD_STATE64___RAX=1 \
8	    -DATOMIC_UNCOLLECTABLE=1 \
9	    -DNO_EXECUTE_PERMISSION=1 \
10	    -DALL_INTERIOR_POINTERS=1 \
11	    -DJAVA_FINALIZATION=1 \
12	    -DGC_GCJ_SUPPORT=1 \
13	    -DUSE_I686_PREFETCH \
14		-DDONT_ADD_BYTE_AT_END \
15		-DHANDLE_FORK \
16		-DGC_NOT_DLL
17
18GLOBAL_CFLAGS =  @ONIG_CFLAGS@ \
19		 -g \
20		 -Wall \
21		 -I src -I $(includedir) \
22		 -D MONA_SCHEME -D USE_BOEHM_GC \
23		 -D MOSH_LIB_PATH="\"@MOSH_LIB_PATH@\"" \
24		 -D_FILE_OFFSET_BITS=64 -Wall -pipe $(DEBUG_FLAGS) \
25		 $(GC_CFLAGS) \
26		 @MOSH_OPTS@ # temp -Wno-deprecated
27
28GLOBAL_CXXFLAGS = -Wno-deprecated
29
30LIBS += @ONIG_LIBS@
31
32include automake/dist-git-revision.mk
33
34if DEVELOPER
35GIT_IS_DIRTY=$(shell git diff --quiet HEAD || echo "dirty")
36GIT_COMMIT_REVISION=$(shell git describe --always)$(GIT_IS_DIRTY)
37GIT_COMMIT_UNIXTIME=$(shell git cat-file commit HEAD|grep 'committer'|  awk '{ print $$(NF-1); }')
38GIT_COMMIT_DATE=$(shell date -d "1970/01/01 09:00:00 $(GIT_COMMIT_UNIXTIME) seconds" "+%Y/%m/%d %H:%M:%S")
39else
40GIT_COMMIT_REVISION="$(DIST_GIT_REVISION)"
41GIT_COMMIT_DATE="$(DIST_GIT_COMMIT_DATE)"
42endif
43
44GLOBAL_CFLAGS+=-D GIT_COMMIT_REVISION="\"$(GIT_COMMIT_REVISION)\"" -D GIT_COMMIT_DATE="\"$(GIT_COMMIT_DATE)\""
45
46if DEVELOPER
47DEBUG_FLAGS=-DDEBUG_VERSION
48endif
49
50AM_CFLAGS   = $(GLOBAL_CFLAGS)
51AM_CXXFLAGS = $(GLOBAL_CFLAGS) $(GLOBAL_CXXFLAGS)
52
53# Boehm GC
54BOEHM_GC_DIR = extlibs/gc-cvs
55
56# for GTEST
57GTEST_DIR     = $(top_srcdir)/gtest
58USER_DIR      = .
59TESTS         = # used later
60
61man_MANS = doc/mosh.1 doc/mosh_config.1
62
63if DEVELOPER
64bin_PROGRAMS = mosh nmosh test_port test_fasl test_ffi test_object test_vm test_compat test_getopt test_thread
65else
66bin_PROGRAMS = mosh nmosh
67endif
68
69bin_SCRIPTS = src/mosh_config
70
71# mosh core sources
72
73MOSH_CORE_SRCS = \
74src/Code.h  src/SharedReference.h                                      \
75src/NonGenerativeRTDs.h                                                \
76src/HeapObject.h                                                       \
77src/Object-inl.h                                                       \
78src/Object-accessors.h                                                 \
79src/Pair-inl.h                                                         \
80src/VM-inl.h                                                           \
81src/match.h                                                            \
82src/baselib.h                                                          \
83src/CProcedure.h                                                       \
84src/Instruction.h                                                      \
85src/Callable.h                                                         \
86src/GenericMap.h                                                       \
87src/BinaryInputPort.h                                                  \
88src/BinaryOutputPort.h                                                 \
89src/scheme.h                                                           \
90src/ByteVector.h                                                       \
91src/HashTable.h                                                        \
92src/Pair.h                                                             \
93src/ExecutableMemory.h                                                 \
94src/LineBufferedFileBinaryOutputPort.h                                 \
95src/Stack.h                                                            \
96src/Gloc.h                         src/BinaryInputOutputPort.h         \
97src/Box.h                          src/Port.h                          \
98src/BinaryPort.h                   src/OutputPort.h                    \
99src/Codec.h                                                            \
100src/Transcoder.h                   src/Transcoder.cpp                  \
101src/ProcedureMacro.h                                                   \
102src/EqvHashTable.h                 src/EqvHashTable.cpp                \
103src/Compnum.h                      src/Compnum.cpp                     \
104src/Fixnum.h                       src/Fixnum.cpp                      \
105src/Closure.h                      src/Closure.cpp                     \
106src/UtilityProcedures.h            src/UtilityProcedures.cpp           \
107src/ProcessProcedures.h            src/ProcessProcedures.cpp           \
108src/Reader.h                       src/Reader.cpp                      \
109src/NumberReader.h                 src/NumberReader.cpp                \
110src/scheme.h                       src/scheme.cpp                      \
111src/Regexp.h                       src/Regexp.cpp                      \
112src/Symbol.h                       src/Symbol.cpp                      \
113src/VM.h                           src/VM.cpp                          \
114src/VM-Profiler.cpp                src/VM-Run.cpp                      \
115src/VM-Run.h                       src/Continuation.h                  \
116src/Scanner.h                      src/Scanner.cpp                     \
117src/NumberScanner.h                src/NumberScanner.cpp               \
118src/ByteArrayBinaryInputPort.h     src/ByteArrayBinaryInputPort.cpp    \
119src/ByteArrayBinaryOutputPort.h    src/ByteArrayBinaryOutputPort.cpp   \
120src/ScannerHelper.h                src/ScannerHelper.cpp               \
121src/Reader.tab.hpp                 src/Reader.tab.cpp                  \
122src/NumberReader.tab.hpp           src/NumberReader.tab.cpp            \
123src/FileBinaryInputPort.h          src/FileBinaryInputPort.cpp         \
124src/BufferedFileBinaryInputPort.h  src/BufferedFileBinaryInputPort.cpp \
125src/FileBinaryOutputPort.h         src/FileBinaryOutputPort.cpp        \
126src/BufferedFileBinaryOutputPort.h src/BufferedFileBinaryOutputPort.cpp\
127src/CustomBinaryInputPort.h        src/CustomBinaryInputPort.cpp       \
128src/CustomTextualInputPort.h       src/CustomTextualInputPort.cpp      \
129src/CustomTextualOutputPort.h      src/CustomTextualOutputPort.cpp     \
130src/CustomTextualInputOutputPort.h src/CustomTextualInputOutputPort.cpp\
131src/CustomBinaryInputOutputPort.h  src/CustomBinaryInputOutputPort.cpp \
132src/TextualOutputPort.h            src/TextualOutputPort.cpp           \
133src/TextualInputPort.cpp           src/TextualInputPort.h              \
134src/TranscodedTextualInputPort.cpp src/TranscodedTextualInputPort.h    \
135src/TranscodedTextualOutputPort.cpp src/TranscodedTextualOutputPort.h  \
136src/StringTextualOutputPort.h      src/StringTextualOutputPort.cpp     \
137src/StringTextualInputPort.h       src/StringTextualInputPort.cpp      \
138src/Codec.cpp                      src/Codec.h                         \
139src/UTF8Codec.cpp                  src/UTF8Codec.h                     \
140src/UTF16Codec.cpp                 src/UTF16Codec.h                    \
141src/UTF32Codec.cpp                 src/UTF32Codec.h                    \
142src/EqHashTable.h                  src/EqHashTable.cpp                 \
143src/SString.h                      src/SString.cpp                     \
144src/GenericHashTable.h             src/GenericHashTable.cpp            \
145src/Object.h                       src/Object.cpp                      \
146src/CompilerProcedures.cpp         src/CompilerProcedures.h            \
147src/HashTableProcedures.cpp        src/HashTableProcedures.h           \
148src/RegexpProcedures.cpp           src/RegexpProcedures.h              \
149src/StringProcedures.cpp           src/StringProcedures.h              \
150src/PortProcedures.cpp             src/PortProcedures.h                \
151src/ListProcedures.cpp             src/ListProcedures.h                \
152src/ErrorProcedures.cpp            src/ErrorProcedures.h               \
153src/ArithmeticProcedures.cpp       src/ArithmeticProcedures.h          \
154src/FlonumProcedures.cpp           src/FlonumProcedures.h              \
155src/BitwiseProcedures.cpp          src/BitwiseProcedures.h             \
156src/ByteVectorProcedures.cpp       src/ByteVectorProcedures.h          \
157src/SocketProcedures.cpp           src/SocketProcedures.h              \
158src/Equivalent.h                   src/Equivalent.cpp                  \
159src/ucs4string.h                   src/ucs4string.cpp                  \
160src/Vector.h                       src/Vector.cpp                      \
161src/Fasl.h \
162src/FaslReader.h                   src/FaslReader.cpp                  \
163src/FaslWriter.h                   src/FaslWriter.cpp                  \
164src/Arithmetic.h                   src/Arithmetic.cpp                  \
165src/Ratnum.h                       src/Ratnum.cpp                      \
166src/Bignum.h                       src/Bignum.cpp                      \
167src/Flonum.h                       src/Flonum.cpp                      \
168src/CodeBuilder.h                  src/CodeBuilder.cpp                 \
169src/FixnumProcedures.h             src/FixnumProcedures.cpp            \
170src/Latin1Codec.h                  src/Latin1Codec.cpp                 \
171src/FFI.h                          src/FFI.cpp                         \
172src/FFIProcedures.h                src/FFIProcedures.cpp               \
173src/CustomBinaryOutputPort.h       src/CustomBinaryOutputPort.cpp      \
174src/FileBinaryInputOutputPort.h    src/FileBinaryInputOutputPort.cpp   \
175src/SocketBinaryInputOutputPort.h  src/SocketBinaryInputOutputPort.cpp \
176src/TranscodedTextualInputOutputPort.h  src/TranscodedTextualInputOutputPort.cpp   \
177src/BufferedFileBinaryInputOutputPort.h  src/BufferedFileBinaryInputOutputPort.cpp \
178src/TestingFileBinaryOutputPort.h src/TestingFileBinaryInputPort.h                 \
179src/TestingVM.h src/OSConstants.h \
180src/getoptU.h src/getoptU.cpp  \
181src/StandardOutputPort.h \
182src/StandardErrorPort.h \
183src/StandardInputPort.h \
184src/BlockBufferedFileBinaryOutputPort.h \
185src/BlockBufferedFileBinaryInputOutputPort.h \
186src/LineBufferedFileBinaryInputOutputPort.h \
187src/MultiVMProcedures.h src/MultiVMProcedures.cpp \
188src/OSCompatSocket.h src/OSCompatSocket.cpp \
189src/OSCompatThread.h src/OSCompatThread.cpp \
190src/VMFactory.cpp src/VMFactory.h \
191src/SimpleStruct.h \
192src/OSCompat.h src/OSCompat.cpp \
193src/stubs.cpp src/posix/terminal/terminal.c src/generic/boehmgc-stubs.c
194
195if FFI_I386
196MOSH_CORE_SRCS += src/ffi_stub_i386.S
197endif
198
199if FFI_X86_64
200MOSH_CORE_SRCS += src/ffi_stub_x86_64.S
201endif
202
203if MINGW32
204MOSH_CORE_SRCS += src/win32/process.c
205endif
206
207if KQUEUE
208MOSH_CORE_SRCS += src/bsd/kqueue/kqueue_stubs.c
209endif
210
211if PTRACE_COMMON
212MOSH_CORE_SRCS += src/posix/ptrace/ptrace_common.c
213endif
214
215GC_SRCS = \
216$(BOEHM_GC_DIR)/allchblk.c \
217$(BOEHM_GC_DIR)/alloc.c \
218$(BOEHM_GC_DIR)/blacklst.c \
219$(BOEHM_GC_DIR)/checksums.c \
220$(BOEHM_GC_DIR)/dbg_mlc.c \
221$(BOEHM_GC_DIR)/dyn_load.c \
222$(BOEHM_GC_DIR)/finalize.c \
223$(BOEHM_GC_DIR)/gc_dlopen.c \
224$(BOEHM_GC_DIR)/gcj_mlc.c \
225$(BOEHM_GC_DIR)/headers.c \
226$(BOEHM_GC_DIR)/malloc.c \
227$(BOEHM_GC_DIR)/mallocx.c \
228$(BOEHM_GC_DIR)/mark.c \
229$(BOEHM_GC_DIR)/mark_rts.c \
230$(BOEHM_GC_DIR)/gc_misc.c \
231$(BOEHM_GC_DIR)/new_hblk.c \
232$(BOEHM_GC_DIR)/obj_map.c \
233$(BOEHM_GC_DIR)/os_dep.c \
234$(BOEHM_GC_DIR)/mach_dep.c \
235$(BOEHM_GC_DIR)/pcr_interface.c \
236$(BOEHM_GC_DIR)/real_malloc.c \
237$(BOEHM_GC_DIR)/reclaim.c \
238$(BOEHM_GC_DIR)/specific.c \
239$(BOEHM_GC_DIR)/stubborn.c \
240$(BOEHM_GC_DIR)/typd_mlc.c \
241$(BOEHM_GC_DIR)/backgraph.c \
242$(BOEHM_GC_DIR)/thread_local_alloc.c \
243$(BOEHM_GC_DIR)/libatomic_ops/src/atomic_ops.c
244
245GC_PTHREAD_SRCS = \
246$(BOEHM_GC_DIR)/pthread_start.c \
247$(BOEHM_GC_DIR)/pthread_support.c \
248$(BOEHM_GC_DIR)/pthread_stop_world.c
249
250GC_DARWIN_SRCS = \
251$(BOEHM_GC_DIR)/darwin_stop_world.c
252
253GC_WIN32_SRCS = \
254$(BOEHM_GC_DIR)/win32_threads.c
255
256if GC_PTHREAD
257GC_SRCS += $(GC_PTHREAD_SRCS)
258endif
259
260if GC_DARWIN
261GC_SRCS += $(GC_DARWIN_SRCS)
262endif
263
264if GC_WIN32
265GC_SRCS += $(GC_WIN32_SRCS)
266endif
267
268MOSH_CORE_SRCS += $(GC_SRCS)
269
270noinst_LIBRARIES = libmosh_main.a libnmosh_main.a libmosh_core_for_test.a
271
272# mosh
273# -O3 causes miss compile of NumberReader.tab.cpp. (newest gcc?)
274# see http://d.hatena.ne.jp/higepon/20081114/1226645373
275libmosh_main_a_SOURCES  = src/main.cpp src/psyntax_mosh_image.cpp
276mosh_SOURCES = $(MOSH_CORE_SRCS)
277mosh_LDADD = libmosh_main.a $(REGEXP_LIB) @MOSH_LDADD_ARCH@
278mosh_DEPENDENCIES = libmosh_main.a
279
280libnmosh_main_a_SOURCES = src/main.cpp src/nmosh_image.cpp
281libnmosh_main_a_CXXFLAGS = $(GLOBAL_CFLAGS) $(GLOBAL_CXXFLAGS) -D WITH_NMOSH_DEFAULTS
282nmosh_SOURCES = $(MOSH_CORE_SRCS)
283nmosh_LDADD = libnmosh_main.a $(REGEXP_LIB) @MOSH_LDADD_ARCH@
284nmosh_DEPENDENCIES = libnmosh_main.a
285
286libmosh_core_for_test_a_SOURCES = $(MOSH_CORE_SRCS)
287
288if MINGW32
289nmosh_LDADD += mosh-icon.o
290nmosh_DEPENDENCIES += mosh-icon.o
291mosh-icon.o : win/mosh.rc misc/logo/mosh.ico
292	-mkdir -p $(top_builddir)/misc/logo
293	-cp -p $(top_srcdir)/misc/logo/mosh.ico $(top_builddir)/misc/logo
294	$(WINDRES) $< -o mosh-icon.o
295endif
296
297# if BUILD_LOCAL_ONIG
298# include extlibs/onig-5.9.2.mk
299# MOSH_CORE_SRCS += $(ONIG_SRCS)
300# endif
301
302BUILT_SOURCES = src/Object-accessors.h src/Instruction.h src/Reader.tab.hpp src/NumberReader.tab.hpp src/Reader.tab.cpp src/NumberReader.tab.cpp src/Scanner.cpp src/NumberScanner.cpp src/cprocedures.cpp src/labels.cpp src/OSConstants.h
303
304include automake/corelibs.mk
305
306#mosh_core_fasl_libraries = $(mosh_core_libraries:.ss=.ss.fasl)
307
308datadir = @MOSH_LIB_PATH@
309data_DATA = src/all-tests.scm
310nobase_data_DATA = ${mosh_core_libraries} #${mosh_core_fasl_libraries}
311
312INCLUDES       = -I $(top_srcdir)/$(BOEHM_GC_DIR)/include -I $(top_srcdir)/$(BOEHM_GC_DIR)/libatomic_ops/src -I$(top_srcdir)/src
313EXTRA_DIST     = \
314boot/vm.scm boot/baselib boot/compiler.scm \
315boot/free-vars.scm misc/scripts boot/baselib/match.scm doc \
316boot/free-vars-decl.scm \
317boot/runtimes/psyntax-mosh/psyntax.scm \
318boot/runtimes/psyntax-mosh/psyntax \
319boot/runtimes/psyntax-mosh/Makefile \
320boot/runtimes/psyntax-mosh/print-prefix.ss \
321boot/runtimes/psyntax-mosh/psyntax-prefix.txt \
322doc/mosh.1 doc/mosh_config.1 \
323doc/RELNOTE lib src \
324tests src/call.inc.cpp ${GTEST_DIR} \
325doc README.md misc \
326boot/runtimes/srfi-mosh/Makefile \
327boot/runtimes/srfi-mosh/README \
328boot/runtimes/srfi-mosh/bootstrap.common \
329boot/runtimes/srfi-mosh/bootstrap.vanilla-mosh \
330boot/runtimes/srfi-mosh/bootstrap.psyntax-mosh \
331boot/runtimes/srfi-mosh/build-run.ss \
332boot/runtimes/srfi-mosh/compat-mosh-run.scm \
333boot/runtimes/srfi-mosh/expander.scm \
334boot/runtimes/srfi-mosh/init.ss \
335boot/runtimes/srfi-mosh/init5.scm \
336boot/runtimes/srfi-mosh/layout.scm \
337boot/runtimes/srfi-mosh/lib.boot \
338boot/runtimes/srfi-mosh/lib.rnrs \
339boot/runtimes/srfi-mosh/mosh-exceptions.scm \
340boot/runtimes/srfi-mosh/mosh-utils5.scm \
341boot/runtimes/srfi-mosh/runtime.scm \
342gen-git-build.sh \
343CMakeLists.txt cmake extlibs
344
345GENERATED = \
346src/all-tests.scm src/Scanner.cpp src/NumberScanner.cpp  \
347src/DebugInstruction.h src/cprocedures.cpp  src/OSConstants.h src/Object-accessors.h \
348src/labels.cpp  src/Instruction.h \
349src/match.h \
350src/NumberReader.tab.cpp src/NumberReader.tab.hpp \
351src/Reader.tab.cpp src/Reader.tab.hpp \
352src/nmosh_image.cpp
353
354CLEANFILES = gtest.a gtest_main.a lib/libffitest.so.1.0 src/ffitest.o
355MAINTAINERCLEANFILES = $(GENERATED)
356
357#  N.B. We don't use backend's (gensym) for following reasons.
358#   (a) When we read serialize libraries, we need all symbols are interned.
359#       Because symbols who have same string should be eq?, even when they are loaded from separate files.
360
361#   (b) When we precompile system libraries, we want to control the start index of gensym.
362#       Since we should avoid index overlapping between pre-compile libraries and pre-compiled psyntax.
363#       So using environment variable MOSH_GENSYM_PREFIX, we control the prefix.
364
365# all fasl should be newer than *.ss and psyntax.h binary
366# lib/mosh/queue.ss.mosh-fasl: $(mosh_core_libraries) psyntax.h
367# 	(find . -name "*.ss.mosh-fasl" | xargs rm) ; true
368# 	(find . -name "*.sls.mosh-fasl" | xargs rm) ; true
369# 	MOSH_GENSYM_PREFIX=L ./mosh scripts/pre-compile-r6rs.scm scripts/pre-compile-target.scm
370
371# update: lib/mosh/queue.ss.mosh-fasl
372
373doc:
374	mosh misc/scripts/gen-doc-from-r6rs.scm $(R6RS_DOC_PATH)
375	$(NATURALDOCS) -i . -o HTML doc/html -p doc/config -s pink -xi tools
376
377.PHONY: doc test
378.PHONY: ptest ntest testB testR testL ntestB ntestR ntestL install Xtest testD
379
380bench:
381#	@GOSH@ ./misc/scripts/bench.scm > /dev/null
382	LANG=C gosh ./misc/scripts/bench2.scm
383
384include Generate.mk
385
386#### test
387check: test
388
389#FIXME: use macro
390MOSHBIN ="MOSH_LOADPATH=$(abs_top_srcdir)/lib $(abs_builddir)/mosh $(MOSH_TESTARGS)"
391NMOSHBIN ="NMOSH_CACHEDIR=$(abs_builddir)/nmosh-cache MOSH_LOADPATH=$(abs_top_srcdir)/lib $(abs_builddir)/nmosh $(MOSH_TESTARGS)"
392
393test: ptest ntest
394Xtest: ptest ntest testD ntestD
395ptest: testB testR testL
396ntest: ntestB ntestR ntestL
397
398testB: lib/libffitest.so.1.0 ./mosh src/all-tests.scm
399	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest)
400	(MOSH_TARGET=$(MOSHBIN) MOSH_BUILDDIR=$(abs_top_builddir) MOSH_SRCDIR=$(abs_top_srcdir) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-ffi)
401	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-mosh)
402
403testL:
404	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir)/tests/srfi)
405	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir)/tests/irregex)
406	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir)/tests/yuni)
407
408testR:
409	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir)/tests/r6rs-test-suite)
410
411#check-am is Automake's internal target..
412testU: check-am
413
414ntestB: lib/libffitest.so.1.0 ./nmosh src/all-tests.scm
415	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest)
416	(MOSH_TARGET=$(NMOSHBIN) MOSH_BUILDDIR=$(abs_top_builddir) MOSH_SRCDIR=$(abs_top_srcdir) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-ffi)
417	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-nmosh)
418
419ntestL:
420	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir)/tests/srfi)
421	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir)/tests/irregex)
422	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir)/tests/yuni)
423
424ntestR:
425	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir)/tests/r6rs-test-suite)
426
427testD:
428	(MOSH_TARGET=$(MOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-for-developer)
429
430ntestD:
431	(MOSH_TARGET=$(NMOSHBIN) $(MAKE) -C $(top_srcdir) -f tests/Makefile runtest-for-developer)
432
433# Builds gtest.a and gtest_main.a.
434
435GTEST_CPPFLAGS_ = -I$(GTEST_DIR)
436
437# For simplicity and to avoid depending on Google Test's
438# implementation details, the dependencies specified below are
439# conservative and not optimized.  This is fine as Google Test
440# compiles fast and for ordinary users its source rarely changes.
441gtest-all.o : $(GTEST_DIR)/gtest/gtest-all.cc
442	$(CXX) $(GTEST_CPPFLAGS_) $(CXXFLAGS) -o $@ -c $<
443
444gtest_main.o : $(GTEST_DIR)/gtest/gtest_main.cc
445	$(CXX) $(GTEST_CPPFLAGS_) $(CXXFLAGS) -o $@ -c $<
446
447gtest.a : gtest-all.o
448	$(AR) $(ARFLAGS) $@ $^
449
450gtest_main.a : gtest-all.o gtest_main.o
451	$(AR) $(ARFLAGS) $@ $^
452	$(RANLIB) $@
453
454check_PROGRAMS=
455TEST_CXXFLAGS_     = $(GLOBAL_CFLAGS) $(GLOBAL_CXXFLAGS) -I$(GTEST_DIR) -I$(GTEST_DIR)/gtest -DGTEST_HAS_CLONE=0  -DTEST_SRCDIR="\"$(top_srcdir)/\""
456TEST_LDADD_        = libmosh_core_for_test.a gtest_main.a $(REGEXP_LIB)  @MOSH_LDADD_ARCH@
457TEST_DEPENDENCIES_ = libmosh_core_for_test.a gtest_main.a
458
459TESTS += test_object
460check_PROGRAMS += test_object
461test_object_DEPENDENCIES = $(TEST_DEPENDENCIES_)
462test_object_CXXFLAGS = $(TEST_CXXFLAGS_)
463test_object_SOURCES = src/ObjectTest.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
464test_object_LDADD = $(TEST_LDADD_)
465
466TESTS += test_vm
467check_PROGRAMS += test_vm
468test_vm_DEPENDENCIES = $(TEST_DEPENDENCIES_)
469test_vm_CXXFLAGS = $(TEST_CXXFLAGS_)
470test_vm_SOURCES = src/VMTest.cpp src/TestingVM.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
471test_vm_LDADD = $(TEST_LDADD_)
472
473TESTS += test_port
474check_PROGRAMS += test_port
475test_port_DEPENDENCIES = $(TEST_DEPENDENCIES_)
476test_port_CXXFLAGS = $(TEST_CXXFLAGS_)
477test_port_SOURCES = src/PortTest.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
478test_port_LDADD = $(TEST_LDADD_)
479
480TESTS += test_fasl
481check_PROGRAMS += test_fasl
482test_fasl_DEPENDENCIES = $(TEST_DEPENDENCIES_)
483test_fasl_CXXFLAGS = $(TEST_CXXFLAGS_)
484test_fasl_SOURCES = src/FaslTest.cpp src/TestingSignalHandler.cpp src/TestingVM.cpp src/psyntax_mosh_image.cpp
485test_fasl_LDADD = $(TEST_LDADD_)
486
487TESTS += test_ffi
488check_PROGRAMS += test_ffi
489test_ffi_DEPENDENCIES = $(TEST_DEPENDENCIES_) lib/libffitest.so.1.0
490test_ffi_CXXFLAGS = $(TEST_CXXFLAGS_)
491test_ffi_SOURCES = src/FFITest.cpp src/TestingSignalHandler.cpp src/TestingVM.cpp src/psyntax_mosh_image.cpp
492test_ffi_LDADD = $(TEST_LDADD_)
493
494TESTS += test_compat
495check_PROGRAMS += test_compat
496test_compat_DEPENDENCIES = $(TEST_DEPENDENCIES_)
497test_compat_CXXFLAGS = $(TEST_CXXFLAGS_)
498test_compat_SOURCES = src/OSCompatTest.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
499test_compat_LDADD = $(TEST_LDADD_)
500
501TESTS += test_getopt
502check_PROGRAMS += test_getopt
503test_getopt_DEPENDENCIES = $(TEST_DEPENDENCIES_)
504test_getopt_CXXFLAGS = $(TEST_CXXFLAGS_)
505test_getopt_SOURCES = src/getoptUTest.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
506test_getopt_LDADD = $(TEST_LDADD_)
507
508TESTS += test_thread
509check_PROGRAMS += test_thread
510test_thread_DEPENDENCIES = $(TEST_DEPENDENCIES_)
511test_thread_CXXFLAGS = $(TEST_CXXFLAGS_)
512test_thread_SOURCES = src/OSCompatThreadTest.cpp src/TestingSignalHandler.cpp src/psyntax_mosh_image.cpp
513test_thread_LDADD = $(TEST_LDADD_)
514
515dist-hook:
516	-rm -f $(top_distdir)/doc/text/Download.txt
517	-rm -f $(top_distdir)/src/ffitest.o
518	-rm -f $(top_distdir)/src/mosh_config
519	-rm -f $(top_distdir)/src/stamp-h1
520	-rm -f $(top_distdir)/src/config.h.in~
521	-rm -f $(top_distdir)/lib/mosh/config.ss
522	-rm -f $(top_distdir)/lib/mosh/mysql.ss
523	-rm -f $(top_distdir)/lib/libffitest.so.1.0
524	-rm -f $(top_distdir)/src/config.h
525
526# for FFI test
527lib/libffitest.so.1.0: src/ffitest.c
528	$(CC) -g -std=c99 -Wall -fPIC -c $< -o src/ffitest.o
529	$(CC) -g -Wl @SHLIB_SO_LDFLAGS@ -o $@ src/ffitest.o
530
531# for flymake
532check-syntax:
533	$(CXX) -o nul $(GLOBAL_CFLAGS) $(GLOBAL_CXXFLAGS) $(INCLUDES) $(DEFAULT_INCLUDES) -DHAVE_CONFIG_H -S ${CHK_SOURCES}
534