############################################################-*-Makefile-*-#### # Project Installation and Distribution ############################################################################## # $Id$ # scala documents DOCUMENTS_ROOT = $(PROJECT_DOCUMENTDIR) DOCUMENTS_FILES += $(DOCUMENTS_ROOT)/reference/ScalaReference.pdf DOCUMENTS_FILES += $(DOCUMENTS_ROOT)/reference/ScalaByExample.pdf DOCUMENTS_FILES += $(DOCUMENTS_ROOT)/tutorial/ScalaTutorial.pdf # scala examples EXAMPLES_ROOT = $(PROJECT_SOURCEDIR)/examples EXAMPLES_LIST += $(call READLIST, $(PROJECT_LISTDIR)/examples.lst) EXAMPLES_FILES = $(EXAMPLES_LIST:%=$(EXAMPLES_ROOT)/%) # emacs scala-mode EMACS_ROOT = $(PROJECT_SUPPORTDIR)/emacs EMACS_LIST += $(call READLIST,$(PROJECT_LISTDIR)/emacs.lst) EMACS_FILES = $(EMACS_LIST:%=$(EMACS_ROOT)/%) # jedit scala-mode JEDIT_ROOT = $(PROJECT_SUPPORTDIR)/jedit JEDIT_LIST += scala.xml JEDIT_FILES = $(JEDIT_LIST:%=$(JEDIT_ROOT)/%) # ultraedit scala-mode ULTRAEDIT_ROOT = $(PROJECT_SUPPORTDIR)/ultraedit ULTRAEDIT_LIST += scala.txt ULTRAEDIT_FILES = $(ULTRAEDIT_LIST:%=$(ULTRAEDIT_ROOT)/%) # scala test TEST_ROOT = $(PROJECT_ROOT)/test TEST_LIST += $(call READLIST,$(PROJECT_LISTDIR)/test-pos.lst) TEST_LIST += $(call READLIST,$(PROJECT_LISTDIR)/test-neg.lst) TEST_LIST += $(call READLIST,$(PROJECT_LISTDIR)/test-run.lst) TEST_FILES = $(TEST_LIST:%=$(TEST_ROOT)/files/%) ############################################################################## # beta versions ############################################################################## INSTALL_ROOT = $(PROJECT_DISTRIBDIR) INSTALL_NAME = $(PROJECT_NAME) INSTALL_VERSION := $(shell $(DATE) -u "+%Y%m%d-%H%M%S") INSTALL_PACKAGE = $(PROJECT_NAME)-$(INSTALL_VERSION) INSTALL_PREFIX = $(INSTALL_ROOT)/$(INSTALL_PACKAGE) INSTALL_BINDIR = $(INSTALL_PREFIX)/bin INSTALL_DOCDIR = $(INSTALL_PREFIX)/doc INSTALL_APIDOCDIR = $(INSTALL_DOCDIR)/api INSTALL_LIBDIR = $(INSTALL_PREFIX)/lib INSTALL_SRCDIR = $(INSTALL_PREFIX)/src INSTALL_EXAMPLEDIR = $(INSTALL_PREFIX)/examples INSTALL_SUPPORTDIR = $(INSTALL_PREFIX)/support INSTALL_TESTDIR = $(INSTALL_PREFIX)/test INSTALL_RUNTIME_JARFILE = $(INSTALL_LIBDIR)/$(PROJECT_NAME).jar INSTALL_TOOLS_JARFILE = $(INSTALL_LIBDIR)/$(TOOLS_NAME).jar INSTALL_FJBG_JARFILE = $(INSTALL_LIBDIR)/fjbg.jar INSTALL_MSIL_JARFILE = $(INSTALL_LIBDIR)/msil.jar install : $(LIBRARY_JAR_ARCHIVE) install : $(TOOLS_JAR_ARCHIVE) $(MAKE) -C $(DOCUMENTS_ROOT)/reference $(MAKE) -C $(DOCUMENTS_ROOT)/tutorial $(INSTALL) -m 755 -d $(INSTALL_PREFIX) $(INSTALL) -m 644 -p $(PROJECT_ROOT)/README $(INSTALL_PREFIX) $(INSTALL) -m 644 -p $(PROJECT_ROOT)/LICENSE $(INSTALL_PREFIX) $(ECHO) $(INSTALL_VERSION) > $(INSTALL_PREFIX)/VERSION $(CHMOD) 644 $(INSTALL_PREFIX)/VERSION $(INSTALL) -m 755 -d $(INSTALL_BINDIR) $(INSTALL) -m 644 -p $(SCRIPTS_WRAPPER).tmpl $(INSTALL_BINDIR) @$(make) \ SCRIPTS_PREFIX=$(INSTALL_BINDIR) \ INSTALL_PREFIX=$(INSTALL_PREFIX) \ MACRO_VERSION=$(INSTALL_VERSION) \ MACRO_RUNTIME_SOURCES=$(INSTALL_SRCDIR) \ MACRO_RUNTIME_CLASSES=$(INSTALL_RUNTIME_JARFILE) \ MACRO_TOOLS_CLASSES=$(INSTALL_TOOLS_JARFILE) \ MACRO_FJBG_CLASSES=$(INSTALL_FJBG_JARFILE) \ MACRO_MSIL_CLASSES=$(INSTALL_MSIL_JARFILE) \ MACRO_JAVA_ARGS= \ scripts $(CHMOD) u+w $(INSTALL_BINDIR)/$(notdir $(SCRIPTS_WRAPPER)) $(RM) $(INSTALL_BINDIR)/$(notdir $(SCRIPTS_WRAPPER)).tmpl $(INSTALL) -m 755 -d $(INSTALL_LIBDIR) $(INSTALL) -m 644 -p $(LIBRARY_JAR_ARCHIVE) $(INSTALL_RUNTIME_JARFILE) $(INSTALL) -m 644 -p $(TOOLS_JAR_ARCHIVE) $(INSTALL_TOOLS_JARFILE) $(INSTALL) -m 644 -p $(FJBG_JARFILE) $(INSTALL_FJBG_JARFILE) $(INSTALL) -m 644 -p $(MSIL_JARFILE) $(INSTALL_MSIL_JARFILE) $(INSTALL) -m 755 -d $(INSTALL_SRCDIR) $(strip $(MIRROR) -m 644 -p -C $(LIBRARY_ROOT) $(LIBRARY_LIST:%='%') \ $(INSTALL_SRCDIR)/$(PROJECT_NAME)) $(INSTALL) -m 755 -d $(INSTALL_DOCDIR) $(INSTALL) -m 644 -p $(DOCUMENTS_FILES) $(INSTALL_DOCDIR) $(INSTALL) -m 755 -d $(INSTALL_APIDOCDIR) @$(make) \ target=LIBRARY \ SCALADOC=$(INSTALL_BINDIR)/scaladoc \ PROJECT_VERSION=$(INSTALL_VERSION) \ PROJECT_SOURCEDIR=$(INSTALL_SRCDIR) \ LIBRARY_SDC_OUTPUTDIR=$(INSTALL_APIDOCDIR) \ sdc $(INSTALL) -m 755 -d $(INSTALL_EXAMPLEDIR) $(strip $(MIRROR) -m 644 -p -C $(EXAMPLES_ROOT) $(EXAMPLES_LIST) \ $(INSTALL_EXAMPLEDIR)) $(INSTALL) -m 755 -d $(INSTALL_SUPPORTDIR) $(INSTALL) -m 755 -d $(INSTALL_SUPPORTDIR)/emacs $(strip $(MIRROR) -m 644 -p -C $(EMACS_ROOT) $(EMACS_LIST) \ $(INSTALL_SUPPORTDIR)/emacs) $(INSTALL) -m 755 -d $(INSTALL_SUPPORTDIR)/jedit $(strip $(MIRROR) -m 644 -p -C $(JEDIT_ROOT) $(JEDIT_LIST) \ $(INSTALL_SUPPORTDIR)/jedit) $(INSTALL) -m 755 -d $(INSTALL_SUPPORTDIR)/ultraedit $(strip $(MIRROR) -m 644 -p -C $(ULTRAEDIT_ROOT) $(ULTRAEDIT_LIST) \ $(INSTALL_SUPPORTDIR)/ultraedit) $(INSTALL) -m 755 -d $(INSTALL_TESTDIR) $(INSTALL) -m 755 -d $(INSTALL_TESTDIR)/bin $(INSTALL) -m 755 $(TEST_ROOT)/bin/scala-test $(INSTALL_TESTDIR)/bin $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files $(TEST_LIST) \ $(INSTALL_TESTDIR)/files) $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files \ $(shell cd $(TEST_ROOT)/files; ls $(TEST_LIST:%.scala=%.check) 2>/dev/null) \ $(INSTALL_TESTDIR)/files) $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files \ $(shell cd $(TEST_ROOT)/files; ls $(TEST_LIST:%.scala=%.flags) 2>/dev/null) \ $(INSTALL_TESTDIR)/files) $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files \ $(shell cd $(TEST_ROOT)/files; ls $(TEST_LIST:%.scala=%.args) 2>/dev/null) \ $(INSTALL_TESTDIR)/files) $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files \ $(shell cd $(TEST_ROOT)/files; ls $(TEST_LIST:%.scala=%.dtd) 2>/dev/null) \ $(INSTALL_TESTDIR)/files) $(strip $(MIRROR) -m 644 -p -C $(TEST_ROOT)/files \ $(shell cd $(TEST_ROOT)/files; ls $(TEST_LIST:%.scala=%.xml) 2>/dev/null) \ $(INSTALL_TESTDIR)/files) install-windows : install @if [ ! -d "$(INSTALL_PREFIX)" ]; then \ echo "Could not find UNIX install '$(INSTALL_PREFIX)'"; \ exit 1; \ fi $(UNIX2DOS) $(INSTALL_PREFIX)/README $(UNIX2DOS) $(INSTALL_PREFIX)/LICENSE $(UNIX2DOS) $(INSTALL_PREFIX)/VERSION $(TOUCH) $(INSTALL_PREFIX)/VERSION-$(INSTALL_VERSION) @root=`cd "$(INSTALL_PREFIX)"; pwd`; \ for file in "" $(SCRIPTS_WRAPPER_ALIASES); do \ if [ -z "$$file" ]; then continue; fi; \ echo -n "Generating $$file.bat ... "; \ srcfile="$(PROJECT_SUPPORTDIR)/windows/scala_wrapper"; \ nixfile="$(INSTALL_PREFIX)/bin/$$file"; \ winfile="$(INSTALL_PREFIX)/bin/$$file.bat"; \ nixexec=`SCALA_EXEC=echo SCALA_CLASSPATH=\"%CLASSPATH%\" $$nixfile`; \ winexec="$$nixexec"; \ winexec=`echo "$$winexec" | sed -es"#$$root#\"%SCALA_HOME%\"#g"`; \ winexec=`echo "$$winexec" | tr '/' '\\\\' | tr ':' ';'`; \ winexec=`echo "$$winexec" | sed -es"#Xbootclasspath.a;#Xbootclasspath/a:#g"`; \ $(RM) -f "$$winfile"; \ ( \ $(CAT) "$$srcfile-header.bat"; \ $(ECHO) "set VERSION=$(INSTALL_VERSION)"; \ $(ECHO) "set COMMAND=$$winexec"; \ $(CAT) "$$srcfile-footer.bat"; \ ) | $(UNIX2DOS) >> "$$winfile"; \ $(RM) "$$nixfile"; \ echo "done"; \ done $(RM) $(INSTALL_PREFIX)/bin/.scala_wrapper $(FIND) $(INSTALL_SRCDIR) -type f -exec $(UNIX2DOS) "{}" ";" $(FIND) $(INSTALL_APIDOCDIR) -type f -exec $(UNIX2DOS) "{}" ";" $(FIND) $(INSTALL_EXAMPLEDIR) -type f -exec $(UNIX2DOS) "{}" ";" $(FIND) $(INSTALL_SUPPORTDIR) -type f -exec $(UNIX2DOS) "{}" ";" $(RM) -r $(INSTALL_TESTDIR) install-addons : $(RM) -r $(DISTRIB_ARCHIVE).addons $(INSTALL) -d $(DISTRIB_ARCHIVE).addons $(INSTALL) -d $(DISTRIB_ARCHIVE).addons/doc $(INSTALL) $(DOCUMENTS_ROOT)/reference/ScalaRationale.pdf \ $(DISTRIB_ARCHIVE).addons/doc $(INSTALL) $(DOCUMENTS_ROOT)/reference/ProgrammingInScala.pdf \ $(DISTRIB_ARCHIVE).addons/doc .PHONY : install .PHONY : install-windows .PHONY : install-addons ############################################################################## IA_CONFIG_PREFIX = $(PROJECT_CONFIGDIR)/ia IA_CONFIG_IMAGESDIR = $(IA_CONFIG_PREFIX)/images IA_CONFIG_LOCALESDIR = $(IA_CONFIG_PREFIX)/locales IA_CONFIG_CUSTOMCODEDIR = $(IA_CONFIG_PREFIX)/CustomCode IA_XSLFILE = $(IA_CONFIG_PREFIX)/setversion.xsl IA_CUSTOMFILE = custom IA_LICENSEFILE = LICENSE IA_SPLASHFILE = $(IA_CONFIG_IMAGESDIR)/Splash.png IA_UNIX_PROJECTFILE = $(IA_CONFIG_PREFIX)/$(PROJECT_NAME)_unix.iap_xml IA_WIN32_PROJECTFILE = $(IA_CONFIG_PREFIX)/$(PROJECT_NAME)_win32.iap_xml IA_BUILD_PREFIX = /tmp/IA_Build_$(PROJECT_NAME) IA_BUILD_IMAGESDIR = $(IA_BUILD_PREFIX)/images IA_BUILD_CUSTOMCODEDIR = $(IA_BUILD_PREFIX)/CustomCode IA_BUILD_LOCALESDIR = $(IA_BUILD_PREFIX)/$(PROJECT_NAME)locales IA_BUILD_ARCHIVE_TGZ = $(IA_BUILD_PREFIX)/$(PROJECT_NAME).tar.gz IA_BUILD_ARCHIVE_ZIP = $(IA_BUILD_PREFIX)/$(PROJECT_NAME).zip IA_BUILD_PROJECTFILE = $(IA_BUILD_PREFIX)/$(PROJECT_NAME).iap_xml IA_BUILD_SPLASHFILE = $(IA_BUILD_IMAGESDIR)/`$(BASENAME) $(IA_SPLASHFILE)` IA_BUILD_OUTPUTDIR = $(IA_BUILD_PREFIX)/$(PROJECT_NAME)_Build_Output IA_INSTALL_PREFIX = $(INSTALL_PREFIX).ia CONVERT_FLAGS += -gravity southeast -pointsize 12 -fill red CONVERT_FLAGS += -draw "text 4,4 'v$(INSTALL_VERSION)'" XSLTPROC_FLAGS += --stringparam version "$(INSTALL_VERSION)" XSLTPROC_FLAGS += $(IA_XSLFILE) ia-build-common : $(RM) -r $(IA_BUILD_PREFIX) $(INSTALL) -m 755 -d $(IA_BUILD_PREFIX) $(INSTALL) -m 755 -d $(IA_BUILD_CUSTOMCODEDIR) @for file in "" `$(FIND) $(IA_CONFIG_CUSTOMCODEDIR)/*.jar -type f`; do \ if [ -z "$$file" ]; then continue; fi; \ $(INSTALL) -m 644 -p "$$file" $(IA_BUILD_CUSTOMCODEDIR); \ done $(INSTALL) -m 755 -d $(IA_BUILD_LOCALESDIR) @for locale in "" `ls -d $(IA_CONFIG_LOCALESDIR)/?? | $(XARGS) -n 1 $(BASENAME)`; do \ if [ -z "$$locale" ]; then continue; fi; \ $(INSTALL) -m 644 -p $(IA_CONFIG_LOCALESDIR)/"$$locale"/$(IA_CUSTOMFILE) \ $(IA_BUILD_LOCALESDIR)/$(IA_CUSTOMFILE)"_$$locale"; \ $(INSTALL) -m 644 -p $(IA_CONFIG_LOCALESDIR)/"$$locale"/$(IA_LICENSEFILE).html \ $(IA_BUILD_PREFIX)/$(IA_LICENSEFILE)"_$$locale".html; \ done $(INSTALL) -m 755 -d $(IA_BUILD_IMAGESDIR) @for file in "" `$(FIND) $(IA_CONFIG_IMAGESDIR)/* -type f`; do \ if [ -z "$$file" ]; then continue; fi; \ $(INSTALL) -m 644 -p "$$file" $(IA_BUILD_IMAGESDIR); \ done $(CONVERT) $(CONVERT_FLAGS) $(IA_SPLASHFILE) $(IA_BUILD_SPLASHFILE) ia-build-unix : $(XSLTPROC) $(XSLTPROC_FLAGS) $(IA_UNIX_PROJECTFILE) > $(IA_BUILD_PROJECTFILE) $(TAR) xzf $(INSTALL_PREFIX).tar.gz -C $(IA_BUILD_PREFIX) $(strip cd $(IA_BUILD_PREFIX)/$(PROJECT_NAME)-$(INSTALL_VERSION); \ $(TAR) czf ../$(PROJECT_NAME).tar.gz .) $(RM) -r $(IA_BUILD_PREFIX)/$(PROJECT_NAME)-$(INSTALL_VERSION) $(IA) $(IA_BUILD_PREFIX)/$(notdir $(IA_BUILD_PROJECTFILE)) $(INSTALL) -m 755 -d $(IA_INSTALL_PREFIX) $(strip $(TAR) cf - -C $(IA_BUILD_OUTPUTDIR) Web_Installers | \ $(TAR) xf - -C $(IA_INSTALL_PREFIX)) ia-build-windows : $(INSTALL) -m 644 -p $(IA_CONFIG_PREFIX)/tools.zip $(IA_BUILD_PREFIX) $(XSLTPROC) $(XSLTPROC_FLAGS) $(IA_WIN32_PROJECTFILE) > $(IA_BUILD_PROJECTFILE) $(UNZIP) -q $(INSTALL_PREFIX).zip -d $(IA_BUILD_PREFIX) $(strip cd $(IA_BUILD_PREFIX)/$(PROJECT_NAME)-$(INSTALL_VERSION); \ $(ZIP) -q -r ../$(PROJECT_NAME).zip .) $(RM) -r $(IA_BUILD_PREFIX)/$(PROJECT_NAME)-$(INSTALL_VERSION) $(IA) $(IA_BUILD_PREFIX)/$(notdir $(IA_BUILD_PROJECTFILE)) $(INSTALL) -m 755 -d $(IA_INSTALL_PREFIX) $(strip $(TAR) cf - -C $(IA_BUILD_OUTPUTDIR) Web_Installers | \ $(TAR) xf - -C $(IA_INSTALL_PREFIX)) ia-build-all : ia-build-common ia-build-all : ia-build-unix ia-build-all : ia-build-windows .PHONY : ia-build-all .PHONY : ia-build-common .PHONY : ia-build-unix .PHONY : ia-build-windows ############################################################################## DISTRIB_ROOT = $(PROJECT_DISTRIBDIR) DISTRIB_PACKAGE = $(INSTALL_PACKAGE) DISTRIB_ARCHIVE = $(DISTRIB_ROOT)/$(DISTRIB_PACKAGE) DISTRIB_GENMD5 = cd $(dir $(1)); $(MD5SUM) $(notdir $(1)) > $(notdir $(1)).md5 distrib : distrib-build-all $(RM) -rf $(INSTALL_PREFIX) distrib-build-all : distrib-build-unix distrib-build-all : distrib-build-windows distrib-build-all : distrib-build-ia distrib-build-all : distrib-build-addons distrib-build-unix : install $(RM) $(DISTRIB_ARCHIVE).tar $(RM) $(DISTRIB_ARCHIVE).tar.gz $(RM) $(DISTRIB_ARCHIVE).tar.bz2 $(strip $(TAR) cf $(DISTRIB_ARCHIVE).tar -C $(dir $(INSTALL_PREFIX)) \ $(notdir $(INSTALL_PREFIX))) $(BZIP2) --best -c $(DISTRIB_ARCHIVE).tar > $(DISTRIB_ARCHIVE).tar.bz2 $(GZIP) --best -c $(DISTRIB_ARCHIVE).tar > $(DISTRIB_ARCHIVE).tar.gz $(call DISTRIB_GENMD5,$(DISTRIB_ARCHIVE).tar.bz2) $(call DISTRIB_GENMD5,$(DISTRIB_ARCHIVE).tar.gz) $(RM) $(DISTRIB_ARCHIVE).tar distrib-build-windows : install-windows @$(call RUN,cd $(dir $(INSTALL_PREFIX))); \ $(call RUN,$(RM) $(DISTRIB_PACKAGE).zip); \ $(call RUN,$(ZIP) -q -r $(DISTRIB_PACKAGE).zip \ $(notdir $(INSTALL_PREFIX))) @archive=$(dir $(INSTALL_PREFIX))/$(DISTRIB_PACKAGE).zip; \ if [ ! $(DISTRIB_ARCHIVE).zip -ef $$archive ]; then \ $(call RUN,$(RM) $(DISTRIB_ARCHIVE).zip); \ $(call RUN,$(CP) $(dir $(INSTALL_PREFIX))/$(DISTRIB_PACKAGE).zip \ $(DISTRIB_ARCHIVE).zip); \ fi $(call DISTRIB_GENMD5,$(DISTRIB_ARCHIVE).zip) distrib-build-ia : ia-build-all distrib-build-addons : install-addons distrib-official : version-update @$(make) -C doc/tutorial distclean @$(make) -C doc/reference distclean @$(make) distclean @$(make) all @$(make) -C doc/reference all @$(make) -C doc/tutorial all @$(make) boottest @$(make) distrib INSTALL_VERSION='$$(PROJECT_VERSION)' # $(CVS) tag "release-$(subst .,_,$(PROJECT_VERSION))" $(PROJECT_ROOT) @$(make) version-increment .PHONY : distrib .PHONY : distrib-build-all .PHONY : distrib-build-unix .PHONY : distrib-build-windows .PHONY : distrib-build-ia .PHONY : distrib-build-website .PHONY : distrib-official ##############################################################################