
1: # 2: # Makefile.in for Gauche/src 3: # $Id: Makefile.in,v 1.174 2007/09/10 21:18:38 shirok Exp $ 4: # 5: 6: # prelude --------------------------------------------- 7: 8: .PHONY: all test check pre-package install uninstall \ 9: clean distclean maintainer-clean install-check 10: 11: .SUFFIXES: 12: .SUFFIXES: .S .c .o .obj .s .stub .in .exe 13: 14: .c.obj: 15: $(COMPILE) -c `cygpath -w $<` 16: 17: .c.o: 18: $(COMPILE) -c $< 19: 20: .s.o: 21: $(COMPILE) -c $< 22: 23: .S.o: 24: $(COMPILE) -c $< 25: 26: .stub.c: 27: $(HOSTGOSH) ./genstub -D LIBGAUCHE_BODY $< 28: 29: SHELL = @SHELL@ 30: prefix = @prefix@ 31: exec_prefix = @exec_prefix@ 32: bindir = @bindir@ 33: libdir = @libdir@ 34: srcdir = @srcdir@ 35: datadir = @datadir@ 36: datarootdir = @datarootdir@ 37: VPATH = $(srcdir) 38: top_builddir = @top_builddir@ 39: top_srcdir = @top_srcdir@ 40: 41: # These may be overridden by make invocators 42: DESTDIR = 43: CC = @CC@ 44: AR = @AR@ 45: LIBS = @LIBS@ 46: CFLAGS = @CFLAGS@ @SHLIB_SO_CFLAGS@ 47: CPPFLAGS = @CPPFLAGS@ 48: LDFLAGS = @LDFLAGS@ 49: 50: 51: # These are set by configure 52: DEFS = @DEFS@ 53: OPTFLAGS = @OPTFLAGS@ 54: INCLUDES = -I$(srcdir) -I$(srcdir)/../gc/include @LOCAL_INC@ 55: RANLIB = @RANLIB@ 56: OBJEXT = @OBJEXT@ 57: EXEEXT = @EXEEXT@ 58: SOEXT = @SHLIB_DYLIB_SUFFIX@ 59: LINK_HELPER = @LINK_HELPER@ 60: RPATH_TMP = @RPATH_TMP@ 61: RPATH_REAL = @RPATH_REAL@ 62: SONAME_FLAG = @SONAME_FLAG@ 63: MAKEVERSLINK = @MAKEVERSLINK@ 64: 65: # Main definition of compilation commands 66: COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(OPTFLAGS) 67: MKINSTDIR = $(top_srcdir)/mkinstalldirs 68: CCLD = $(LINK_HELPER) $(CC) 69: LINK = TARGETLIB=`pwd` $(CCLD) $(CFLAGS) $(RPATH_TMP) -L. $(LDFLAGS) 70: RELINK = TARGETLIB=$(TARGETLIB) $(CCLD) $(CFLAGS) $(RPATH_REAL) -L. $(LDFLAGS) 71: INSTALL = @INSTALL@ 72: POSTBUILD = TARGETLIB=`pwd` $(MAKEVERSLINK) libgauche.$(SOEXT) 73: POSTINSTALL = TARGETLIB="$(TARGETLIB)" DESTDIR="$(DESTDIR)" $(MAKEVERSLINK) libgauche.$(SOEXT) 74: 75: GENCOMP = $(srcdir)/gencomp -D LIBGAUCHE_BODY 76: 77: # HOSTGOSH is the gosh command used to generate some of the source files. 78: # We need to 'preload' some libraries from the host's environment, for 79: # they are compiled DSO as of 0.8.6 and the ones in the build tree can 80: # be incompatible with the host gosh. 81: # (NB: HOSTGOSH is only invoked building from CVS; it won't be called 82: # when building from tarball.) 83: # We clear GAUCHE_LOAD_PATH to make sure we won't read nonstandard stuff. 84: HOSTGOSH = GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" \ 85: gosh -l./preload -I$(top_srcdir)/src -I$(top_srcdir)/lib 86: 87: LIB_INSTALL_DIR = @libdir@ 88: BIN_INSTALL_DIR = @bindir@ 89: DATA_INSTALL_DIR = $(datadir) 90: 91: GAUCHE_DATA_DIR = $(datadir)/gauche 92: GAUCHE_ARCH_DIR = @libdir@/gauche 93: 94: HEADER_INSTALL_DIR = $(GAUCHE_ARCH_DIR)/@GAUCHE_VERSION@/include 95: SCM_INSTALL_DIR = $(GAUCHE_DATA_DIR)/@GAUCHE_VERSION@/lib 96: ARCH_INSTALL_DIR = $(GAUCHE_ARCH_DIR)/@GAUCHE_VERSION@/@target@ 97: SITE_SCM_DIR = $(GAUCHE_DATA_DIR)/site/lib 98: SITE_ARCH_DIR = $(GAUCHE_ARCH_DIR)/site/@GAUCHE_VERSION@/@target@ 99: ARCH = @target@ 100: 101: # targetlib is given when we relink the final version of gosh to embed 102: # the path to libgauche. Usually it is LIB_INSTALL_DIR, but under 103: # certain circumstances (e.g. MacOSX framework build) it may be overridden. 104: TARGETLIB=$(LIB_INSTALL_DIR) 105: 106: INSTALL_HEADERS = gauche.h \ 107: ../gc/include/gc.h \ 108: ../gc/include/gc_config_macros.h \ 109: ../gc/include/gc_pthread_redirects.h 110: INSTALL_SUBHEADERS = gauche/config.h \ 111: gauche/vm.h gauche/code.h gauche/vminsn.h \ 112: gauche/bits.h gauche/collection.h \ 113: gauche/string.h gauche/charset.h \ 114: gauche/char_euc_jp.h gauche/char_utf_8.h \ 115: gauche/char_sjis.h gauche/char_none.h \ 116: gauche/symbol.h gauche/keyword.h gauche/gloc.h \ 117: gauche/number.h gauche/bignum.h gauche/vector.h \ 118: gauche/hash.h gauche/treemap.h gauche/parameter.h \ 119: gauche/load.h gauche/port.h gauche/system.h \ 120: gauche/weak.h gauche/class.h gauche/exception.h \ 121: gauche/builtin-syms.h gauche/extern.h \ 122: gauche/extend.h gauche/int64.h gauche/float.h \ 123: gauche/scmconst.h \ 124: gauche/pthread.h gauche/uthread.h gauche/arch.h \ 125: gauche/mingw-compat.h 126: INSTALL_LIBS = libgauche.$(SOEXT) 127: INSTALL_BINS = gosh$(EXEEXT) \ 128: gauche-config$(EXEEXT) \ 129: gauche-install$(EXEEXT) \ 130: gauche-package$(EXEEXT) \ 131: gauche-cesconv$(EXEEXT) 132: INSTALL_SCMS = gauche-init.scm genstub cesconv 133: 134: GENERATED_SCRIPTS = gauche-install gauche-package gauche-cesconv 135: 136: PRIVATE_HEADERS = gauche/arith.h 137: 138: # MinGW specific 139: INSTALL_MINGWHEADERS = gauche/mingw-compat.h 140: 141: # build ----------------------------------------------- 142: 143: GCLIB = ../gc/libgc.la 144: 145: gosh_SOURCES = main.c 146: gosh_OBJECTS = main.$(OBJEXT) 147: gosh_LDADD = -lgauche 148: gosh_LDFLAGS = @SHLIB_MAIN_LDFLAGS@ 149: 150: libgauche_LIBRARY = libgauche.$(SOEXT) 151: libgauche_OBJECTS = \ 152: core.$(OBJEXT) vm.$(OBJEXT) compaux.$(OBJEXT) macro.$(OBJEXT) \ 153: code.$(OBJEXT) error.$(OBJEXT) class.$(OBJEXT) prof.$(OBJEXT) \ 154: collection.$(OBJEXT) \ 155: boolean.$(OBJEXT) char.$(OBJEXT) string.$(OBJEXT) list.$(OBJEXT) \ 156: hash.$(OBJEXT) treemap.$(OBJEXT) bits.$(OBJEXT) \ 157: port.$(OBJEXT) write.$(OBJEXT) read.$(OBJEXT) \ 158: vector.$(OBJEXT) weak.$(OBJEXT) symbol.$(OBJEXT) keyword.$(OBJEXT) \ 159: gloc.$(OBJEXT) compare.$(OBJEXT) regexp.$(OBJEXT) signal.$(OBJEXT) \ 160: parameter.$(OBJEXT) module.$(OBJEXT) proc.$(OBJEXT) \ 161: number.$(OBJEXT) bignum.$(OBJEXT) load.$(OBJEXT) paths.$(OBJEXT) \ 162: promise.$(OBJEXT) repl.$(OBJEXT) autoloads.$(OBJEXT) \ 163: system.$(OBJEXT) stdlib.$(OBJEXT) extlib.$(OBJEXT) exclib.$(OBJEXT) \ 164: syslib.$(OBJEXT) moplib.$(OBJEXT) intlib.$(OBJEXT) compile.$(OBJEXT) \ 165: scmlib.$(OBJEXT) objlib.$(OBJEXT) 166: libgauche_LDFLAGS = $(SONAME_FLAG) @SHLIB_DYLIB_LDFLAGS@ 167: 168: HEADERS = gauche.h $(INSTALL_SUBHEADERS) $(PRIVATE_HEADERS) 169: 170: OBJECTS = $(libgauche_OBJECTS) $(gosh_OBJECTS) 171: 172: all : libgauche.$(SOEXT) $(INSTALL_BINS) $(GENERATED_SCRIPTS) 173: 174: gosh$(EXEEXT) : libgauche.$(SOEXT) $(gosh_OBJECTS) 175: @rm -f gosh$(EXEEXT) 176: $(LINK) $(gosh_LDFLAGS) -o gosh$(EXEEXT) $(gosh_OBJECTS) $(gosh_LDADD) $(LIBS) 177: 178: relink : 179: $(RELINK) $(libgauche_LDFLAGS) libgauche.$(SOEXT) $(libgauche_OBJECTS) ../gc/*.lo $(LIBS) 180: $(RELINK) $(gosh_LDFLAGS) -o gosh$(EXEEXT) $(gosh_OBJECTS) $(gosh_LDADD) $(LIBS) 181: 182: $(OBJECTS) : $(HEADERS) 183: 184: stdlib.c : stdlib.stub genstub 185: extlib.c : extlib.stub genstub 186: exclib.c : exclib.stub genstub 187: syslib.c : syslib.stub genstub 188: moplib.c : moplib.stub genstub 189: intlib.c : intlib.stub genstub 190: 191: autoloads.c : autoloads.scm 192: $(HOSTGOSH) ./autoloads.scm 193: 194: builtin-syms.c gauche/builtin-syms.h : builtin-syms.scm 195: $(HOSTGOSH) ./builtin-syms.scm 196: 197: vminsn.c gauche/vminsn.h ../lib/gauche/vm/insn.scm : vminsn.scm geninsn 198: $(HOSTGOSH) ./geninsn 199: 200: compile.c : compile.scm gencomp vminsn.scm 201: $(HOSTGOSH) $(GENCOMP) compile.scm 202: 203: scmlib.c : scmlib.scm gencomp vminsn.scm 204: $(HOSTGOSH) $(GENCOMP) scmlib.scm 205: 206: objlib.c : objlib.scm gencomp vminsn.scm 207: $(HOSTGOSH) $(GENCOMP) objlib.scm 208: 209: symbol.$(OBJEXT) : builtin-syms.c 210: 211: port.$(OBJEXT) : port.c portapi.c 212: 213: vm.$(OBJEXT) : vminsn.c vmstat.c 214: 215: load.$(OBJEXT) : dl_dlopen.c dl_dummy.c dl_win.c dl_darwin.c 216: 217: paths.$(OBJEXT) : getdir_win.c getdir_dummy.c getdir_darwin.c 218: 219: libgauche.$(SOEXT) : $(libgauche_OBJECTS) $(GCLIB) 220: $(LINK) $(libgauche_LDFLAGS) libgauche.$(SOEXT) $(libgauche_OBJECTS) ../gc/*.lo $(LIBS) 221: $(POSTBUILD) 222: 223: gauche-config$(EXEEXT) : gauche-config.$(OBJEXT) 224: $(LINK) -o gauche-config$(EXEEXT) gauche-config.$(OBJEXT) $(LIBS) 225: 226: gauche-config.c gauche/arch.h ../lib/gauche/config.scm : genconfig 227: $(SHELL) ./genconfig 228: 229: gauche-install : gauche-install.in 230: @rm -f gauche-install 231: echo "#!$(BIN_INSTALL_DIR)/gosh" > gauche-install && \ 232: cat gauche-install.in >> gauche-install 233: @chmod -w gauche-install 234: 235: gauche-package : gauche-package.in 236: @rm -f gauche-package 237: echo "#!$(BIN_INSTALL_DIR)/gosh" > gauche-package && \ 238: cat gauche-package.in >> gauche-package 239: @chmod -w gauche-package 240: 241: gauche-cesconv : gauche-cesconv.in 242: @rm -f gauche-cesconv 243: echo "#!$(BIN_INSTALL_DIR)/gosh" > gauche-cesconv && \ 244: cat gauche-cesconv.in >> gauche-cesconv 245: @chmod -w gauche-cesconv 246: 247: # a special build sequence when VM instruction set has been changed 248: newinsn : 249: $(HOSTGOSH) -fno-inline-globals $(GENCOMP) compile.scm 250: $(HOSTGOSH) -fno-inline-globals $(GENCOMP) scmlib.scm 251: $(HOSTGOSH) -fno-inline-globals $(GENCOMP) objlib.scm 252: $(MAKE) all 253: ./gosh -ftest $(GENCOMP) compile.scm 254: ./gosh -ftest $(GENCOMP) scmlib.scm 255: ./gosh -ftest $(GENCOMP) objlib.scm 256: $(MAKE) all 257: 258: # tests ----------------------------------------------- 259: TESTFILES = `cat ../test/TESTS` 260: 261: TESTRECORD = $(top_builddir)/test.record 262: 263: check : test 264: 265: test : gosh$(EXEEXT) test-vmstack$(EXEEXT) test-arith$(EXEEXT) 266: @rm -f test.log $(TESTRECORD) 267: ./test-vmstack >> test.log 268: ./test-arith >> test.log 269: @for testfile in $(TESTFILES); do \ 270: GAUCHE_TEST_RECORD_FILE=$(TESTRECORD) \ 271: ./gosh -ftest -I../test $$testfile >> test.log; \ 272: done 273: @GAUCHE_TEST_RECORD_FILE=$(TESTRECORD) \ 274: ./gosh -ftest -e "(define *case-fold* #f)" ../test/symcase.scm >> test.log 275: @GAUCHE_TEST_RECORD_FILE=$(TESTRECORD) \ 276: ./gosh -ftest -fcase-fold -e "(define *case-fold* #t)" ../test/symcase.scm >> test.log 277: @echo "See test.log for details." 278: 279: test-vmstack$(EXEEXT) : test-vmstack.$(OBJEXT) libgauche.$(SOEXT) 280: $(LINK) -o test-vmstack$(EXEEXT) test-vmstack.$(OBJEXT) $(gosh_LDADD) $(LIBS) 281: 282: test-arith$(EXEEXT) : test-arith.$(OBJEXT) libgauche.$(SOEXT) 283: $(LINK) -o test-arith$(EXEEXT) test-arith.$(OBJEXT) $(gosh_LDADD) $(LIBS) 284: 285: test-arith.$(OBJEXT) : gauche/arith.h 286: 287: install-check : 288: @rm -rf test.log 289: @for f in `cat ../test/TESTS`; do \ 290: ${bindir}/gosh ../test/$$f; \ 291: done 292: 293: # clean ------------------------------------------------ 294: GENERATED = stdlib.c extlib.c exclib.c syslib.c moplib.c intlib.c scmlib.c \ 295: objlib.c compile.c autoloads.c builtin-syms.c \ 296: gauche/builtin-syms.h vminsn.c gauche/vminsn.h \ 297: ../lib/gauche/vm/insn.scm 298: CONFIG_GENERATED = Makefile genconfig gauche/config.h 299: 300: clean : 301: rm -rf core core.[0-9]* gosh$(EXEEXT) gauche-config$(EXEEXT) \ 302: test-vmstack$(EXEEXT) test-arith$(EXEEXT) \ 303: $(GENERATED_SCRIPTS) gauche-config.c \ 304: libgauche.$(SOEXT)* *.$(OBJEXT) *~ *.a *.t *.def *.exp *.exe \ 305: test.log test.dir so_locations gauche/*~ gauche/arch.h 306: 307: distclean : clean 308: rm -f $(CONFIG_GENERATED) 309: 310: maintainer-clean : clean 311: rm -f $(CONFIG_GENERATED) $(GENERATED) 312: 313: # install ---------------------------------------------- 314: 315: INSTALL_DIRS = $(DESTDIR)$(HEADER_INSTALL_DIR) \ 316: $(DESTDIR)$(HEADER_INSTALL_DIR)/gauche \ 317: $(DESTDIR)$(SCM_INSTALL_DIR) \ 318: $(DESTDIR)$(ARCH_INSTALL_DIR) \ 319: $(DESTDIR)$(BIN_INSTALL_DIR) \ 320: $(DESTDIR)$(SITE_SCM_DIR) \ 321: $(DESTDIR)$(SITE_ARCH_DIR) 322: 323: install : all relink 324: $(MKINSTDIR) $(INSTALL_DIRS) 325: $(INSTALL) -m 444 $(INSTALL_HEADERS) $(DESTDIR)$(HEADER_INSTALL_DIR) 326: $(INSTALL) -m 444 $(INSTALL_SUBHEADERS) $(DESTDIR)$(HEADER_INSTALL_DIR)/gauche 327: $(INSTALL) $(INSTALL_LIBS) $(DESTDIR)$(LIB_INSTALL_DIR) 328: $(INSTALL) $(INSTALL_LIBS) $(DESTDIR)$(ARCH_INSTALL_DIR) 329: $(INSTALL) -m 555 $(INSTALL_BINS) $(DESTDIR)$(BIN_INSTALL_DIR) 330: $(INSTALL) -m 555 $(INSTALL_BINS) $(DESTDIR)$(ARCH_INSTALL_DIR) 331: $(INSTALL) -m 444 $(INSTALL_SCMS) $(DESTDIR)$(SCM_INSTALL_DIR) 332: @case `./gauche-config --arch` in *-cygwin*|*-mingw*) \ 333: $(INSTALL) $(INSTALL_LIBS) $(DESTDIR)$(BIN_INSTALL_DIR);;\ 334: esac 335: $(POSTINSTALL) 336: 337: uninstall : 338: for f in $(INSTALL_BINS); do rm -f $(BIN_INSTALL_DIR)/$$f; done 339: for f in $(INSTALL_LIBS); do rm -f $(LIB_INSTALL_DIR)/$$f; done 340: rm -rf $(GAUCHE_ARCH_DIR)/@GAUCHE_VERSION@ $(GAUCHE_DATA_DIR)/@GAUCHE_VERSION@ $(GAUCHE_ARCH_DIR)/site/@GAUCHE_VERSION@ 341: 342: pre-package : $(GENERATED) 343: 344: # MinGW specific stuff -------------------------------- 345: 346: # we don't use $(EXEEXT), for we know it is .exe on MinGW. 347: # using it explicitly prevent make from being confused if $(EXEEXT) is empty. 348: .in.exe: 349: $(SHELL) mingw-exify $< > $<.c 350: $(COMPILE) -c -o $<.o $<.c 351: $(LINK) $(gosh_LDFLAGS) -o $@ $<.o $(gosh_LDADD) $(LIBS) 352: 353: install-mingw: 354: $(INSTALL) -m 444 $(INSTALL_MINGWHEADERS) $(DESTDIR)$(HEADER_INSTALL_DIR)/gauche 355: