diff --git a/Make.inc b/Make.inc index 4b4a4cf4b365a..eee1e27f79b56 100644 --- a/Make.inc +++ b/Make.inc @@ -2,7 +2,8 @@ ## Note: ## It is generally preferable to change these options, for -## your local machine, in a file named `Make.user` in this directory +## your local machine, in a file named `Make.user` in the toplevel +## and build directories # OPENBLAS build options OPENBLAS_TARGET_ARCH= @@ -71,10 +72,26 @@ WITH_GC_DEBUG_ENV = 0 # Prevent picking up $ARCH from the environment variables ARCH= +# pick up BUILDROOT from O= if it isn't already set (from recursive make) +ifeq ($(BUILDROOT),) +ifeq ("$(origin O)", "command line") + BUILDROOT := $(abspath $O) + BUILDDIR := $(abspath $(BUILDROOT)/$(shell $(JULIAHOME)/contrib/relative_path.sh $(JULIAHOME) $(SRCDIR))) + $(info $(shell printf '\033[32;1mBuilding into $(BUILDROOT)\033[0m')) # use printf to expand the escape sequences +else + BUILDROOT:=$(JULIAHOME) +endif +endif +export BUILDROOT + # we include twice to pickup user definitions better +# include from JULIAHOME first so that BUILDROOT can override ifeq (exists, $(shell [ -e $(JULIAHOME)/Make.user ] && echo exists )) include $(JULIAHOME)/Make.user endif +ifeq (exists, $(shell [ -e $(BUILDROOT)/Make.user ] && echo exists )) +include $(BUILDROOT)/Make.user +endif # disable automatic Makefile rules .SUFFIXES: @@ -110,7 +127,7 @@ includedir = $(prefix)/include sysconfdir = $(prefix)/etc # Directories where things get built into -build_prefix = $(JULIAHOME)/usr +build_prefix = $(BUILDROOT)/usr build_staging = $(build_prefix)-staging build_bindir = $(build_prefix)/bin build_libdir = $(build_prefix)/lib @@ -399,6 +416,9 @@ endif ifeq (exists, $(shell [ -e $(JULIAHOME)/Make.user ] && echo exists )) include $(JULIAHOME)/Make.user endif +ifeq (exists, $(shell [ -e $(BUILDROOT)/Make.user ] && echo exists )) +include $(BUILDROOT)/Make.user +endif ifeq ($(SANITIZE),1) ifeq ($(SANITIZE_MEMORY),1) diff --git a/Makefile b/Makefile index 1904d62cc009e..1121a62647e9e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -JULIAHOME := $(abspath .) +JULIAHOME := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) include $(JULIAHOME)/Make.inc # TODO: Code bundled with Julia should be installed into a versioned directory, @@ -8,7 +8,7 @@ include $(JULIAHOME)/Make.inc # prefix/share/julia/site/VERSDIR (not prefix/share/julia/VERSDIR/site ... # so that prefix/share/julia/VERSDIR can be overwritten without touching # third-party code). -VERSDIR = v`cut -d. -f1-2 < VERSION` +VERSDIR = v`cut -d. -f1-2 < $(JULIAHOME)/VERSION` #file name of make binary-dist result ifeq ($(JULIA_BINARYDIST_TARNAME),) @@ -19,57 +19,66 @@ default: $(JULIA_BUILD_MODE) # contains either "debug" or "release" all: debug release # sort is used to remove potential duplicates -DIRS = $(sort $(build_bindir) $(build_libdir) $(build_private_libdir) $(build_libexecdir) $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_man1dir)) +DIRS := $(sort $(build_bindir) $(build_libdir) $(build_private_libdir) $(build_libexecdir) $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_man1dir)) +ifneq ($(BUILDROOT),$(JULIAHOME)) +BUILDDIRS := $(addprefix $(BUILDROOT)/,. base src ui doc deps test test/perf) +BUILDDIRMAKE := $(addsuffix /Makefile,$(BUILDDIRS)) +DIRS := $(DIRS) $(BUILDDIRS) +$(BUILDDIRMAKE): | $(BUILDDIRS) + @# add Makefiles to the build directories for convenience (pointing back to the source location of each) + @echo '# -- This file is automatically generated in julia/Makefile -- #' > $@ + @echo 'BUILDROOT=$(BUILDROOT)' >> $@ + @echo 'include $(JULIAHOME)/$(patsubst $(BUILDROOT)/%,%,$(@:/Makefile=))/Makefile' >> $@ +julia-deps: | $(BUILDDIRMAKE) +endif $(foreach dir,$(DIRS),$(eval $(call dir_target,$(dir)))) $(foreach link,base test,$(eval $(call symlink_target,$(link),$(build_datarootdir)/julia))) # Build the HTML docs (skipped if already exists, notably in tarballs) -doc/_build/html: - @$(MAKE) -C doc html +$(BUILDROOT)/doc/_build/html: + @$(MAKE) -C $(BUILDROOT)/doc html # doc needs to live under $(build_docdir), not under $(build_datarootdir)/julia/ CLEAN_TARGETS += clean-docdir clean-docdir: @-rm -fr $(abspath $(build_docdir)) -$(build_prefix)/.examples: $(wildcard $(JULIAHOME)/examples/*.jl) $(shell find $(JULIAHOME)/examples/clustermanager) - @echo Copying in usr/share/doc/julia/examples - @-rm -fr $(build_docdir)/examples - @mkdir -p $(build_docdir)/examples - @cp -R $(JULIAHOME)/examples/*.jl $(build_docdir)/examples/ - @cp -R $(JULIAHOME)/examples/clustermanager $(build_docdir)/examples/ - @echo 1 > $@ +$(subst $(abspath $(BUILDROOT))/,,$(abspath $(build_docdir))): $(build_docdir) +$(build_docdir): + @mkdir -p $@/examples + @cp -R examples/*.jl $@/examples/ + @cp -R examples/clustermanager $@/examples/ julia-symlink: julia-ui-$(JULIA_BUILD_MODE) ifneq ($(OS),WINNT) ifndef JULIA_VAGRANT_BUILD - @ln -sf "$(shell contrib/relative_path.sh "$(JULIAHOME)" "$(JULIA_EXECUTABLE)")" julia + @ln -sf "$(shell $(JULIAHOME)/contrib/relative_path.sh "$(BUILDROOT)" "$(JULIA_EXECUTABLE)")" $(BUILDROOT)/julia endif endif -julia-deps: | $(DIRS) $(build_datarootdir)/julia/base $(build_datarootdir)/julia/test - @$(MAKE) $(QUIET_MAKE) -C deps +julia-deps: | $(DIRS) $(build_datarootdir)/julia/base $(build_datarootdir)/julia/test $(build_docdir) $(build_sysconfdir)/julia/juliarc.jl $(build_man1dir)/julia.1 + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/deps -julia-base: julia-deps $(build_sysconfdir)/julia/juliarc.jl $(build_man1dir)/julia.1 - @$(MAKE) $(QUIET_MAKE) -C base +julia-base: julia-deps + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/base julia-libccalltest: - @$(MAKE) $(QUIET_MAKE) -C test libccalltest + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test libccalltest julia-src-release julia-src-debug : julia-src-% : julia-deps - @$(MAKE) $(QUIET_MAKE) -C src libjulia-$* + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/src libjulia-$* julia-ui-release julia-ui-debug : julia-ui-% : julia-src-% - @$(MAKE) $(QUIET_MAKE) -C ui julia-$* + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/ui julia-$* -julia-inference : julia-base julia-ui-$(JULIA_BUILD_MODE) $(build_prefix)/.examples - @$(MAKE) $(QUIET_MAKE) $(build_private_libdir)/inference.ji JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) +julia-inference : julia-base julia-ui-$(JULIA_BUILD_MODE) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT) $(build_private_libdir)/inference.ji JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) julia-sysimg-release : julia-inference julia-ui-release - @$(MAKE) $(QUIET_MAKE) $(build_private_libdir)/sys.$(SHLIB_EXT) JULIA_BUILD_MODE=release + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT) $(build_private_libdir)/sys.$(SHLIB_EXT) JULIA_BUILD_MODE=release julia-sysimg-debug : julia-inference julia-ui-debug - @$(MAKE) $(QUIET_MAKE) $(build_private_libdir)/sys-debug.$(SHLIB_EXT) JULIA_BUILD_MODE=debug + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT) $(build_private_libdir)/sys-debug.$(SHLIB_EXT) JULIA_BUILD_MODE=debug julia-debug julia-release : julia-% : julia-ui-% julia-sysimg-% julia-symlink julia-libccalltest @@ -77,28 +86,28 @@ debug release : % : julia-% check-whitespace: ifneq ($(NO_GIT), 1) - @contrib/check-whitespace.sh + @$(JULIAHOME)/contrib/check-whitespace.sh else $(warn "Skipping whitespace check because git is unavailable") endif release-candidate: release testall - @$(JULIA_EXECUTABLE) contrib/add_license_to_files.jl #add license headers - @$(JULIA_EXECUTABLE) doc/genstdlib.jl + @$(JULIA_EXECUTABLE) $(JULIAHOME)/contrib/add_license_to_files.jl #add license headers + @$(JULIA_EXECUTABLE) $(JULIAHOME)/doc/genstdlib.jl @#Check documentation - @$(JULIA_EXECUTABLE) doc/NEWS-update.jl #Add missing cross-references to NEWS.md - @$(MAKE) -C doc unicode #Rebuild Unicode table if necessary - @$(JULIA_EXECUTABLE) doc/DocCheck.jl > doc/UNDOCUMENTED.rst 2>&1 #Check for undocumented items - @if [ -z "$(cat doc/UNDOCUMENTED.rst)" ]; then \ - rm doc/UNDOCUMENTED.rst; \ + @$(JULIA_EXECUTABLE) $(JULIAHOME)/doc/NEWS-update.jl #Add missing cross-references to NEWS.md + @$(MAKE) -C $(BUILDROOT)/doc unicode #Rebuild Unicode table if necessary + @$(JULIA_EXECUTABLE) $(JULIAHOME)/doc/DocCheck.jl > $(BUILDROOT)/doc/UNDOCUMENTED.rst 2>&1 #Check for undocumented items + @if [ -z "$(cat $(BUILDROOT)/doc/UNDOCUMENTED.rst)" ]; then \ + rm $(BUILDROOT)/doc/UNDOCUMENTED.rst; \ else \ echo "Undocumented functions found in doc/UNDOCUMENTED.rst; document them, then retry"; \ exit 1; \ fi - @$(MAKE) -C doc html SPHINXOPTS="-n" #Rebuild Julia HTML docs pedantically - @$(MAKE) -C doc latex SPHINXOPTS="-n" #Rebuild Julia PDF docs pedantically - @$(MAKE) -C doc doctest #Run Julia doctests - @$(MAKE) -C doc linkcheck #Check all links + @$(MAKE) -C $(BUILDROOT)/doc html SPHINXOPTS="-n" #Rebuild Julia HTML docs pedantically + @$(MAKE) -C $(BUILDROOT)/doc latex SPHINXOPTS="-n" #Rebuild Julia PDF docs pedantically + @$(MAKE) -C $(BUILDROOT)/doc doctest #Run Julia doctests + @$(MAKE) -C $(BUILDROOT)/doc linkcheck #Check all links @# Check to see if the above make invocations changed anything important @if [ -n "$$(git status --porcelain)" ]; then \ @@ -107,7 +116,7 @@ release-candidate: release testall fi @#Check that benchmarks work - @$(MAKE) -C test/perf + @$(MAKE) -C $(BUILDROOT)/test/perf @#Check that netload tests work @#for test in test/netload/*.jl; do julia $$test; if [ $$? -ne 0 ]; then exit 1; fi; done @echo @@ -127,16 +136,14 @@ release-candidate: release testall @echo $(build_man1dir)/julia.1: $(JULIAHOME)/doc/man/julia.1 | $(build_man1dir) - @echo Copying in usr/share/man/man1/julia.1 @mkdir -p $(build_man1dir) @cp $< $@ $(build_sysconfdir)/julia/juliarc.jl: $(JULIAHOME)/etc/juliarc.jl | $(build_sysconfdir)/julia - @echo Creating usr/etc/julia/juliarc.jl @cp $< $@ ifeq ($(OS), WINNT) - @cat ./contrib/windows/juliarc.jl >> $(build_sysconfdir)/julia/juliarc.jl -$(build_sysconfdir)/julia/juliarc.jl: contrib/windows/juliarc.jl + @cat $(JULIAHOME)/contrib/windows/juliarc.jl >> $(build_sysconfdir)/julia/juliarc.jl +$(build_sysconfdir)/julia/juliarc.jl: $(JULIAHOME)/contrib/windows/juliarc.jl endif $(build_private_libdir)/%.$(SHLIB_EXT): $(build_private_libdir)/%.o @@ -146,7 +153,8 @@ $(build_private_libdir)/%.$(SHLIB_EXT): $(build_private_libdir)/%.o @$(INSTALL_NAME_CMD)$(notdir $@) $@ @$(DSYMUTIL) $@ -CORE_SRCS := base/boot.jl base/coreimg.jl \ +CORE_SRCS := $(addprefix $(JULIAHOME)/, \ + base/boot.jl base/coreimg.jl \ base/abstractarray.jl \ base/array.jl \ base/bool.jl \ @@ -169,33 +177,34 @@ CORE_SRCS := base/boot.jl base/coreimg.jl \ base/range.jl \ base/reduce.jl \ base/reflection.jl \ - base/tuple.jl -BASE_SRCS := $(shell find base -name \*.jl) + base/tuple.jl) +BASE_SRCS := $(shell find $(JULIAHOME)/base -name \*.jl) $(build_private_libdir)/inference0.ji: $(CORE_SRCS) | $(build_private_libdir) - @$(call PRINT_JULIA, cd base && \ + @$(call PRINT_JULIA, cd $(JULIAHOME)/base && \ $(call spawn,$(JULIA_EXECUTABLE)) -C $(JULIA_CPU_TARGET) --output-ji $(call cygpath_w,$@) -f \ coreimg.jl) $(build_private_libdir)/inference.ji: $(build_private_libdir)/inference0.ji - @$(call PRINT_JULIA, cd base && \ + @$(call PRINT_JULIA, cd $(JULIAHOME)/base && \ $(call spawn,$(JULIA_EXECUTABLE)) -C $(JULIA_CPU_TARGET) --output-ji $(call cygpath_w,$@) -f \ -J $(call cygpath_w,$<) coreimg.jl) +RELBUILDROOT := $(shell $(JULIAHOME)/contrib/relative_path.sh "$(JULIAHOME)/base" "$(BUILDROOT)/base/") COMMA:=, define sysimg_builder -$$(build_private_libdir)/sys$1.o: $$(build_private_libdir)/inference.ji VERSION $$(BASE_SRCS) - @$$(call PRINT_JULIA, cd base && \ +$$(build_private_libdir)/sys$1.o: $$(build_private_libdir)/inference.ji $(JULIAHOME)/VERSION $$(BASE_SRCS) + @$$(call PRINT_JULIA, cd $(JULIAHOME)/base && \ $$(call spawn,$2) -C $$(JULIA_CPU_TARGET) --output-o $$(call cygpath_w,$$@) $$(JULIA_SYSIMG_BUILD_FLAGS) -f \ - -J $$(call cygpath_w,$$<) sysimg.jl \ + -J $$(call cygpath_w,$$<) sysimg.jl $(RELBUILDROOT) \ || { echo '*** This error is usually fixed by running `make clean`. If the error persists$$(COMMA) try `make cleanall`. ***' && false; } ) .SECONDARY: $(build_private_libdir)/sys$1.o endef $(eval $(call sysimg_builder,,$(JULIA_EXECUTABLE_release))) $(eval $(call sysimg_builder,-debug,$(JULIA_EXECUTABLE_debug))) -$(build_bindir)/stringreplace: contrib/stringreplace.c | $(build_bindir) - @$(call PRINT_CC, $(HOSTCC) -o $(build_bindir)/stringreplace contrib/stringreplace.c) +$(build_bindir)/stringreplace: $(JULIAHOME)/contrib/stringreplace.c | $(build_bindir) + @$(call PRINT_CC, $(HOSTCC) -o $(build_bindir)/stringreplace $(JULIAHOME)/contrib/stringreplace.c) # public libraries, that are installed in $(prefix)/lib @@ -278,7 +287,7 @@ define stringreplace $(build_bindir)/stringreplace $$(strings -t x - $1 | grep '$2' | awk '{print $$1;}') '$3' 255 "$(call cygpath_w,$1)" endef -install: $(build_bindir)/stringreplace doc/_build/html +install: $(build_bindir)/stringreplace $(BUILDROOT)/doc/_build/html @$(MAKE) $(QUIET_MAKE) all @for subdir in $(bindir) $(libexecdir) $(datarootdir)/julia/site/$(VERSDIR) $(docdir) $(man1dir) $(includedir)/julia $(libdir) $(private_libdir) $(sysconfdir); do \ mkdir -p $(DESTDIR)$$subdir; \ @@ -325,22 +334,22 @@ ifeq ($(OS),WINNT) endif $(INSTALL_F) $(build_includedir)/uv* $(DESTDIR)$(includedir)/julia endif - $(INSTALL_F) src/julia.h src/julia_version.h src/support/*.h $(DESTDIR)$(includedir)/julia + $(INSTALL_F) $(addprefix $(JULIAHOME)/,src/julia.h src/julia_version.h src/support/*.h) $(DESTDIR)$(includedir)/julia # Copy system image -$(INSTALL_F) $(build_private_libdir)/sys.ji $(DESTDIR)$(private_libdir) $(INSTALL_M) $(build_private_libdir)/sys.$(SHLIB_EXT) $(DESTDIR)$(private_libdir) $(INSTALL_M) $(build_private_libdir)/sys-debug.$(SHLIB_EXT) $(DESTDIR)$(private_libdir) # Copy in system image build script - $(INSTALL_M) contrib/build_sysimg.jl $(DESTDIR)$(datarootdir)/julia/ + $(INSTALL_M) $(JULIAHOME)/contrib/build_sysimg.jl $(DESTDIR)$(datarootdir)/julia/ # Copy in standalone executable build script - $(INSTALL_M) contrib/build_executable.jl $(DESTDIR)$(datarootdir)/julia/ + $(INSTALL_M) $(JULIAHOME)/contrib/build_executable.jl $(DESTDIR)$(datarootdir)/julia/ # Copy in standalone julia-config script - $(INSTALL_M) contrib/julia-config.jl $(DESTDIR)$(datarootdir)/julia/ + $(INSTALL_M) $(JULIAHOME)/contrib/julia-config.jl $(DESTDIR)$(datarootdir)/julia/ # Copy in all .jl sources as well cp -R -L $(build_datarootdir)/julia $(DESTDIR)$(datarootdir)/ # Copy documentation cp -R -L $(build_docdir)/* $(DESTDIR)$(docdir)/ - cp -R -L doc/_build/html $(DESTDIR)$(docdir)/ + cp -R -L $(BUILDROOT)/doc/_build/html $(DESTDIR)$(docdir)/ -rm $(DESTDIR)$(docdir)/html/.buildinfo # Remove perf suite -rm -rf $(DESTDIR)$(datarootdir)/julia/test/perf/ @@ -351,14 +360,14 @@ endif $(INSTALL_F) $(build_man1dir)/julia.1 $(DESTDIR)$(man1dir)/ # Copy icon and .desktop file mkdir -p $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/ - $(INSTALL_F) contrib/julia.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/ + $(INSTALL_F) $(JULIAHOME)/contrib/julia.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/ -touch -c $(DESTDIR)$(datarootdir)/icons/hicolor/ -gtk-update-icon-cache $(DESTDIR)$(datarootdir)/icons/hicolor/ mkdir -p $(DESTDIR)$(datarootdir)/applications/ - $(INSTALL_F) contrib/julia.desktop $(DESTDIR)$(datarootdir)/applications/ + $(INSTALL_F) $(JULIAHOME)/contrib/julia.desktop $(DESTDIR)$(datarootdir)/applications/ # Install appdata file mkdir -p $(DESTDIR)$(datarootdir)/appdata/ - $(INSTALL_F) contrib/julia.appdata.xml $(DESTDIR)$(datarootdir)/appdata/ + $(INSTALL_F) $(JULIAHOME)/contrib/julia.appdata.xml $(DESTDIR)$(datarootdir)/appdata/ # Update RPATH entries and JL_SYSTEM_IMAGE_PATH if $(private_libdir_rel) != $(build_private_libdir_rel) ifneq ($(private_libdir_rel),$(build_private_libdir_rel)) @@ -382,7 +391,7 @@ endif cp -R $(build_sysconfdir)/julia $(DESTDIR)$(sysconfdir)/ distclean dist-clean: - rm -fr julia-*.tar.gz julia*.exe julia-*.7z julia-$(JULIA_COMMIT) + rm -fr $(BUILDROOT)/julia-*.tar.gz $(BUILDROOT)/julia*.exe $(BUILDROOT)/julia-*.7z $(BUILDROOT)/julia-$(JULIA_COMMIT) dist: @echo \'dist\' target is deprecated: use \'binary-dist\' instead. @@ -402,23 +411,23 @@ endif ifneq ($(DESTDIR),) $(error DESTDIR must not be set for make binary-dist) endif - @$(MAKE) install - cp LICENSE.md $(prefix) + @$(MAKE) -C $(BUILDROOT) -f $(JULIAHOME)/Makefile install + cp $(JULIAHOME)/LICENSE.md $(prefix) ifneq ($(OS), WINNT) - -./contrib/fixup-libgfortran.sh $(DESTDIR)$(private_libdir) + -$(JULIAHOME)/contrib/fixup-libgfortran.sh $(DESTDIR)$(private_libdir) endif ifeq ($(OS), Linux) - -./contrib/fixup-libstdc++.sh $(DESTDIR)$(private_libdir) + -$(JULIAHOME)/contrib/fixup-libstdc++.sh $(DESTDIR)$(private_libdir) endif # Copy in juliarc.jl files per-platform for binary distributions as well # Note that we don't install to sysconfdir: we always install to $(DESTDIR)$(prefix)/etc. # If you want to make a distribution with a hardcoded path, you take care of installation ifeq ($(OS), Darwin) - -cat ./contrib/mac/juliarc.jl >> $(DESTDIR)$(prefix)/etc/julia/juliarc.jl + -cat $(JULIAHOME)/contrib/mac/juliarc.jl >> $(DESTDIR)$(prefix)/etc/julia/juliarc.jl endif ifeq ($(OS), WINNT) - [ ! -d dist-extras ] || ( cd dist-extras && \ + [ ! -d $(JULIAHOME)/dist-extras ] || ( cd $(JULIAHOME)/dist-extras && \ cp 7z.exe 7z.dll libexpat-1.dll zlib1.dll libgfortran-3.dll libquadmath-0.dll libstdc++-6.dll libgcc_s_s*-1.dll libssp-0.dll $(bindir) && \ mkdir $(DESTDIR)$(prefix)/Git && \ 7z x PortableGit.7z -o"$(DESTDIR)$(prefix)/Git" && \ @@ -432,20 +441,21 @@ ifeq ($(OS), WINNT) cd $(prefix) && find * | sed -e 's/\//\\/g' -e 's/$$/\r/g' > etc/uninstall.log # build nsis package - $(call spawn,./dist-extras/nsis/makensis.exe) -NOCD -DVersion=$(JULIA_VERSION) -DArch=$(ARCH) -DCommit=$(JULIA_COMMIT) ./contrib/windows/build-installer.nsi + $(call spawn,$(JULIAHOME)/dist-extras/nsis/makensis.exe) -NOCD -DVersion=$(JULIA_VERSION) -DArch=$(ARCH) -DCommit=$(JULIA_COMMIT) $(JULIAHOME)/contrib/windows/build-installer.nsi # compress nsis installer and combine with 7zip self-extracting header - ./dist-extras/7z a -mx9 "julia-install-$(JULIA_COMMIT)-$(ARCH).7z" julia-installer.exe - cat ./contrib/windows/7zS.sfx ./contrib/windows/7zSFX-config.txt "julia-install-$(JULIA_COMMIT)-$(ARCH).7z" > "julia-${JULIA_VERSION}-${ARCH}.exe" - -rm -f julia-installer.exe + cd $(BUILDROOT) && $(JULIAHOME)/dist-extras/7z a -mx9 "julia-install-$(JULIA_COMMIT)-$(ARCH).7z" julia-installer.exe + cd $(BUILDROOT) && cat $(JULIAHOME)/contrib/windows/7zS.sfx $(JULIAHOME)/contrib/windows/7zSFX-config.txt "julia-install-$(JULIA_COMMIT)-$(ARCH).7z" > "julia-${JULIA_VERSION}-${ARCH}.exe" + -rm -f $(BUILDROOT)/julia-installer.exe else - $(TAR) zcvf $(JULIA_BINARYDIST_TARNAME).tar.gz julia-$(JULIA_COMMIT) + cd $(BUILDROOT) && $(TAR) zcvf $(JULIA_BINARYDIST_TARNAME).tar.gz julia-$(JULIA_COMMIT) endif rm -fr $(prefix) -light-source-dist.tmp: doc/_build/html +# this target does not accept BUILDROOT +light-source-dist.tmp: $(JULIAHOME)/doc/_build/html # Save git information - -@$(MAKE) -C base version_git.jl.phony + -@$(MAKE) -C $(JULIAHOME)/base version_git.jl.phony # Create file light-source-dist.tmp to hold all the filenames that go into the tarball echo "base/version_git.jl" > light-source-dist.tmp @@ -453,6 +463,7 @@ light-source-dist.tmp: doc/_build/html find doc/_build/html >> light-source-dist.tmp # Make tarball with only Julia code +# this target does not accept BUILDROOT light-source-dist: light-source-dist.tmp # Prefix everything with the current directory name (usually "julia"), then create tarball DIRNAME=$$(basename $$(pwd)); \ @@ -463,13 +474,14 @@ source-dist: @echo \'source-dist\' target is deprecated: use \'full-source-dist\' instead. # Make tarball with Julia code plus all dependencies +# this target does not accept BUILDROOT full-source-dist: light-source-dist.tmp # Get all the dependencies downloaded @$(MAKE) -C deps getall NO_GIT=1 # Create file full-source-dist.tmp to hold all the filenames that go into the tarball cp light-source-dist.tmp full-source-dist.tmp - -ls deps/*.tar.gz deps/*.tar.bz2 deps/*.tar.xz deps/*.tgz deps/*.zip >> full-source-dist.tmp + -ls deps/srccache/*.tar.gz deps/srccache/*.tar.bz2 deps/srccache/*.tar.xz deps/srccache/*.tgz deps/srccache/*.zip >> full-source-dist.tmp # Prefix everything with the current directory name (usually "julia"), then create tarball DIRNAME=$$(basename $$(pwd)); \ @@ -477,30 +489,31 @@ full-source-dist: light-source-dist.tmp cd ../ && tar -cz -T $$DIRNAME/full-source-dist.tmp1 --no-recursion -f $$DIRNAME/julia-$(JULIA_VERSION)_$(JULIA_COMMIT)-full.tar.gz clean: | $(CLEAN_TARGETS) - @$(MAKE) -C base clean - @$(MAKE) -C doc clean - @$(MAKE) -C src clean - @$(MAKE) -C ui clean - @$(MAKE) -C test clean - @rm -f julia - @rm -f *~ *# *.tar.gz + @$(MAKE) -C $(BUILDROOT)/base clean + @$(MAKE) -C $(BUILDROOT)/doc clean + @$(MAKE) -C $(BUILDROOT)/src clean + @$(MAKE) -C $(BUILDROOT)/ui clean + @$(MAKE) -C $(BUILDROOT)/test clean + @rm -f $(BUILDROOT)/julia + @rm -f $(BUILDROOT)/*.tar.gz @rm -f $(build_bindir)/stringreplace \ - light-source-dist.tmp light-source-dist.tmp1 \ - full-source-dist.tmp full-source-dist.tmp1 + $(BUILDROOT)/light-source-dist.tmp $(BUILDROOT)/light-source-dist.tmp1 \ + $(BUILDROOT)/full-source-dist.tmp $(BUILDROOT)/full-source-dist.tmp1 @rm -fr $(build_private_libdir) - @rm -f $(build_prefix)/.examples +# Temporarily add this line to the Makefile to remove extras + @rm -fr $(build_datarootdir)/julia/extras cleanall: clean - @$(MAKE) -C src clean-flisp clean-support + @$(MAKE) -C $(BUILDROOT)/src clean-flisp clean-support @rm -fr $(build_shlibdir) ifeq ($(OS),WINNT) @rm -rf $(build_prefix)/lib endif - @$(MAKE) -C deps clean-libuv + @$(MAKE) -C $(BUILDROOT)/deps clean-libuv distcleanall: cleanall - @$(MAKE) -C deps distcleanall - @$(MAKE) -C doc cleanall + @$(MAKE) -C $(BUILDROOT)/deps distcleanall + @$(MAKE) -C $(BUILDROOT)/doc cleanall rm -fr $(build_prefix) $(build_staging) .PHONY: default debug release check-whitespace release-candidate \ @@ -513,53 +526,53 @@ distcleanall: cleanall dist full-source-dist source-dist test: check-whitespace $(JULIA_BUILD_MODE) - @$(MAKE) $(QUIET_MAKE) -C test default JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test default JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) testall: check-whitespace $(JULIA_BUILD_MODE) - cp $(build_prefix)/lib/julia/sys$(JULIA_LIBSUFFIX).$(SHLIB_EXT) local.$(SHLIB_EXT) && $(JULIA_EXECUTABLE) -J local.$(SHLIB_EXT) -e 'true' && rm local.$(SHLIB_EXT) - @$(MAKE) $(QUIET_MAKE) -C test all JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + cp $(build_prefix)/lib/julia/sys$(JULIA_LIBSUFFIX).$(SHLIB_EXT) $(BUILDROOT)/local.$(SHLIB_EXT) && $(JULIA_EXECUTABLE) -J $(BUILDROOT)/local.$(SHLIB_EXT) -e 'true' && rm $(BUILDROOT)/local.$(SHLIB_EXT) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test all JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) testall1: check-whitespace $(JULIA_BUILD_MODE) - @env JULIA_CPU_CORES=1 $(MAKE) $(QUIET_MAKE) -C test all JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + @env JULIA_CPU_CORES=1 $(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test all JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) test-%: check-whitespace $(JULIA_BUILD_MODE) - @$(MAKE) $(QUIET_MAKE) -C test $* JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test $* JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) perf: release - @$(MAKE) $(QUIET_MAKE) -C test/perf JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test/perf JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) perf-%: release - @$(MAKE) $(QUIET_MAKE) -C test/perf $* JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) + @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test/perf $* JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) # download target for some hardcoded windows dependencies .PHONY: win-extras wine_path win-extras: - [ -d dist-extras ] || mkdir dist-extras + [ -d $(JULIAHOME)/dist-extras ] || mkdir $(JULIAHOME)/dist-extras ifneq ($(BUILD_OS),WINNT) ifeq (,$(findstring CYGWIN,$(BUILD_OS))) - cp /usr/lib/p7zip/7z /usr/lib/p7zip/7z.so dist-extras + cp /usr/lib/p7zip/7z /usr/lib/p7zip/7z.so $(JULIAHOME)/dist-extras endif endif ifneq (,$(filter $(ARCH), i386 i486 i586 i686)) - cd dist-extras && \ + cd $(JULIAHOME)/dist-extras && \ $(JLDOWNLOAD) http://downloads.sourceforge.net/sevenzip/7z920.exe && \ 7z x -y 7z920.exe 7z.exe 7z.dll && \ ../contrib/windows/winrpm.sh http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1 \ - "mingw32-libgfortran3 mingw32-libquadmath0 mingw32-libstdc++6 mingw32-libgcc_s_sjlj1 mingw32-libssp0 mingw32-libexpat1 mingw32-zlib1" && \ + "mingw32-libgfortran3 mingw32-libquadmath0 mingw32-libstdc++6 mingw32-libgcc_s_sjlj1 mingw32-libssp0 mingw32-libexpat1 mingw32-zlib1" && \ cp usr/i686-w64-mingw32/sys-root/mingw/bin/*.dll . else ifeq ($(ARCH),x86_64) - cd dist-extras && \ + cd $(JULIAHOME)/dist-extras && \ $(JLDOWNLOAD) 7z920-x64.msi http://downloads.sourceforge.net/sevenzip/7z920-x64.msi && \ 7z x -y 7z920-x64.msi _7z.exe _7z.dll && \ mv _7z.dll 7z.dll && \ mv _7z.exe 7z.exe && \ ../contrib/windows/winrpm.sh http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1 \ - "mingw64-libgfortran3 mingw64-libquadmath0 mingw64-libstdc++6 mingw64-libgcc_s_seh1 mingw64-libssp0 mingw64-libexpat1 mingw64-zlib1" && \ + "mingw64-libgfortran3 mingw64-libquadmath0 mingw64-libstdc++6 mingw64-libgcc_s_seh1 mingw64-libssp0 mingw64-libexpat1 mingw64-zlib1" && \ cp usr/x86_64-w64-mingw32/sys-root/mingw/bin/*.dll . else $(error no win-extras target for ARCH=$(ARCH)) endif - cd dist-extras && \ + cd $(JULIAHOME)/dist-extras && \ $(JLDOWNLOAD) http://downloads.sourceforge.net/sevenzip/7z920_extra.7z && \ $(JLDOWNLOAD) https://unsis.googlecode.com/files/nsis-2.46.5-Unicode-setup.exe && \ $(JLDOWNLOAD) busybox.exe http://frippery.org/files/busybox/busybox-w32-FRP-1-g9eb16cb.exe && \ diff --git a/base/Makefile b/base/Makefile index 57846b05ef23a..1c673d7db2004 100644 --- a/base/Makefile +++ b/base/Makefile @@ -1,6 +1,6 @@ SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +BUILDDIR := . JULIAHOME := $(abspath $(SRCDIR)/..) -BUILDDIR ?= . include $(JULIAHOME)/deps/Versions.make include $(JULIAHOME)/Make.inc diff --git a/base/client.jl b/base/client.jl index 664c7b65323da..edc452845069c 100644 --- a/base/client.jl +++ b/base/client.jl @@ -406,6 +406,8 @@ function _atreplinit(repl) end function _start() + empty!(ARGS) + append!(ARGS, Core.ARGS) opts = JLOptions() try (quiet,repl,startup,color_set,history_file) = process_options(opts,copy(ARGS)) diff --git a/base/fs.jl b/base/fs.jl index db991a47a9206..b2cac54d5ad8c 100644 --- a/base/fs.jl +++ b/base/fs.jl @@ -47,7 +47,7 @@ export File, import Base: uvtype, uvhandle, eventloop, fd, position, stat, close, write, read, read!, readbytes, isopen, _sizeof_uv_fs, uv_error -include("file_constants.jl") +include(string(length(Core.ARGS)>=2?Core.ARGS[2]:"","file_constants.jl")) # include($BUILDROOT/base/file_constants.jl) abstract AbstractFile <: IO diff --git a/base/libc.jl b/base/libc.jl index 26e1dc161d90c..fe0a2fe3b0467 100644 --- a/base/libc.jl +++ b/base/libc.jl @@ -6,7 +6,7 @@ export FILE, TmStruct, strftime, strptime, getpid, gethostname, free, malloc, ca errno, strerror, flush_cstdio, systemsleep, time @windows_only export GetLastError, FormatMessage -include("errno.jl") +include(string(length(Core.ARGS)>=2?Core.ARGS[2]:"","errno_h.jl")) # include($BUILDROOT/base/errno_h.jl) ## RawFD ## diff --git a/base/pcre.jl b/base/pcre.jl index ec7a865aca94c..aa24f8690145f 100644 --- a/base/pcre.jl +++ b/base/pcre.jl @@ -4,7 +4,7 @@ module PCRE -include("pcre_h.jl") +include(string(length(Core.ARGS)>=2?Core.ARGS[2]:"","pcre_h.jl")) # include($BUILDROOT/base/pcre_h.jl) const PCRE_LIB = "libpcre2-8" diff --git a/base/rounding.jl b/base/rounding.jl index 96490407452c2..f82821ae3632f 100644 --- a/base/rounding.jl +++ b/base/rounding.jl @@ -1,7 +1,7 @@ # This file is a part of Julia. License is MIT: http://julialang.org/license module Rounding -include("fenv_constants.jl") +include(UTF8String(vcat(length(Core.ARGS)>=2?Core.ARGS[2].data:"".data, "fenv_constants.jl".data))) # include($BUILDROOT/base/fenv_constants.jl) export RoundingMode, RoundNearest, RoundToZero, RoundUp, RoundDown, RoundFromZero, @@ -41,8 +41,8 @@ function from_fenv(r::Integer) end end -set_rounding_raw{T<:Union{Float32,Float64}}(::Type{T},i::Integer) = ccall(:fesetround, Cint, (Cint,), i) -get_rounding_raw{T<:Union{Float32,Float64}}(::Type{T}) = ccall(:fegetround, Cint, ()) +set_rounding_raw{T<:Union{Float32,Float64}}(::Type{T},i::Integer) = ccall(:fesetround, Int32, (Int32,), i) +get_rounding_raw{T<:Union{Float32,Float64}}(::Type{T}) = ccall(:fegetround, Int32, ()) set_rounding{T<:Union{Float32,Float64}}(::Type{T},r::RoundingMode) = set_rounding_raw(T,to_fenv(r)) get_rounding{T<:Union{Float32,Float64}}(::Type{T}) = from_fenv(get_rounding_raw(T)) diff --git a/base/stream.jl b/base/stream.jl index b254a1f5e8e76..c6b84c2539015 100644 --- a/base/stream.jl +++ b/base/stream.jl @@ -1,7 +1,6 @@ # This file is a part of Julia. License is MIT: http://julialang.org/license -#TODO: Move stdio detection from C to Julia (might require some Clang magic) -include("uv_constants.jl") +include(string(length(Core.ARGS)>=2?Core.ARGS[2]:"","uv_constants.jl")) # include($BUILDROOT/base/uv_constants.jl) import .Libc: RawFD, dup @windows_only import .Libc: WindowsRawSocket diff --git a/base/sysimg.jl b/base/sysimg.jl index 8e6d20f1a3341..f352779f71bbb 100644 --- a/base/sysimg.jl +++ b/base/sysimg.jl @@ -31,9 +31,6 @@ include("essentials.jl") include("docs/bootstrap.jl") include("base.jl") include("reflection.jl") -include("build_h.jl") -include("version_git.jl") -include("c.jl") include("options.jl") # core operations & types @@ -81,7 +78,10 @@ include("dict.jl") include("set.jl") include("iterator.jl") -# For OS specific stuff in I/O +# For OS specific stuff +include(UTF8String(vcat(length(Core.ARGS)>=2?Core.ARGS[2].data:"".data, "build_h.jl".data))) # include($BUILDROOT/base/build_h.jl) +include(UTF8String(vcat(length(Core.ARGS)>=2?Core.ARGS[2].data:"".data, "version_git.jl".data))) # include($BUILDROOT/base/version_git.jl) +include("c.jl") include("osutils.jl") # strings & printing diff --git a/contrib/windows/msys_build.sh b/contrib/windows/msys_build.sh index bb4b88c84cc2a..27caae65a75a7 100755 --- a/contrib/windows/msys_build.sh +++ b/contrib/windows/msys_build.sh @@ -110,6 +110,7 @@ done for i in share/julia/base/pcre_h.jl; do $SEVENZIP e -y julia-installer.exe "\$_OUTDIR/$i" -obase >> get-deps.log done +echo "override PCRE_INCL_PATH =" >> Make.user # suppress "bash.exe: warning: could not find /tmp, please create!" mkdir -p usr/Git/tmp # Remove libjulia.dll if it was copied from downloaded binary diff --git a/deps/Makefile b/deps/Makefile index ddfaf79259708..1cf751a5ceb95 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -1,7 +1,7 @@ ## high-level setup ## SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) JULIAHOME := $(abspath $(SRCDIR)/..) -BUILDDIR ?= . +BUILDDIR := . include $(SRCDIR)/Versions.make include $(JULIAHOME)/Make.inc @@ -67,7 +67,7 @@ endif # If the top-level Makefile is called with environment variables, # they will override the values passed above to ./configure -MAKE_COMMON = DESTDIR="" prefix=$(build_prefix) bindir=$(build_bindir) libdir=$(build_libdir) libexecdir=$(build_libexecdir) datarootdir=$(build_datarootdir) includedir=$(build_includedir) sysconfdir=$(build_sysconfdir) +MAKE_COMMON = DESTDIR="" prefix=$(build_prefix) bindir=$(build_bindir) libdir=$(build_libdir) libexecdir=$(build_libexecdir) datarootdir=$(build_datarootdir) includedir=$(build_includedir) sysconfdir=$(build_sysconfdir) O= ## Overall configuration of which rules exist and should be run by default ## @@ -248,6 +248,7 @@ endef # # this defines rules for: # VARNAME_SRC_DIR = source directory for the output, relative to $(SRCDIR)/srccache or $(BUILDDIR) +# VARNAME_SRC_FILE = target file for make get-VARNAME target # dirname: # dirname/file_from_download: # distclean-dirname: @@ -257,9 +258,10 @@ include $(SRCDIR)/$1.version ifneq ($(NO_GIT),1) $2_SRC_DIR = $1 -$$(SRCDIR)/srccache/$1.git: | $$(SRCDIR)/srccache +$2_SRC_FILE = $$(SRCDIR)/srccache/$1.git +$$($2_SRC_FILE): | $$(SRCDIR)/srccache git clone -q --mirror --depth=10 --branch $$($2_BRANCH) $$($2_GIT_URL) $$@ -$5/$1: | $$(SRCDIR)/srccache/$1.git +$5/$1: | $$($2_SRC_FILE) # try to update the cache, if that fails, attempt to continue anyways (the ref might already be local) -cd $$(SRCDIR)/srccache/$1.git && git fetch -q $$($2_GIT_URL) $$($2_BRANCH):remotes/origin/$$($2_BRANCH) git clone -q --branch $$($2_BRANCH) $$(SRCDIR)/srccache/$1.git $$@ @@ -287,22 +289,24 @@ $5/$1/$4: $$(JULIAHOME)/.git/modules/deps/$1/HEAD endif else #unconditionally add dependency on expected location $5/$1/$4: $5/$1/.git/HEAD +$5/$1/.git/HEAD: | $5/$1 endif else # NO_GIT $2_SRC_DIR = $1-$$($2_SHA1) -$$(SRCDIR)/$$($2_SRC_DIR).tar.gz: +$2_SRC_FILE = $$(SRCDIR)/srccache/$$($2_SRC_DIR).tar.gz +$$($2_SRC_FILE): | $$(SRCDIR)/srccache $$(JLDOWNLOAD) $$@ $$(call $2_TAR_URL,$$($2_SHA1)) -$5/$$($2_SRC_DIR)/$3: $$(SRCDIR)/$$($2_SRC_DIR).tar.gz - $$(JLCHECKSUM) $< +$5/$$($2_SRC_DIR)/$3: $$($2_SRC_FILE) + $$(JLCHECKSUM) $$< mkdir -p $$(dir $$@) && \ $(TAR) -C $$(dir $$@) --strip-components 1 -xf $$< touch -c $$@ -endif +endif # NO_GIT distclean-$1: - -rm -rf $5/$$($2_SRC_DIR) $$(SRCDIR)/srccache/$$($2_SRC_DIR).tar.gz + -rm -rf $5/$$($2_SRC_DIR) $$($2_SRC_FILE) endef @@ -495,25 +499,25 @@ LLVM_MFLAGS += OPTIONAL_DIRS= endif ifneq ($(LLVM_CLANG_TAR),) -$(LLVM_CLANG_TAR): +$(LLVM_CLANG_TAR): | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://llvm.org/releases/$(LLVM_VER)/$(notdir $@) endif ifneq ($(LLVM_COMPILER_RT_TAR),) -$(LLVM_COMPILER_RT_TAR): +$(LLVM_COMPILER_RT_TAR): | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://llvm.org/releases/$(LLVM_VER)/$(notdir $@) endif ifneq ($(LLVM_LIBCXX_TAR),) -$(LLVM_LIBCXX_TAR): +$(LLVM_LIBCXX_TAR): | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://llvm.org/releases/$(LLVM_VER)/$(notdir $@) endif ifneq ($(LLVM_VER),svn) -$(LLVM_TAR): +$(LLVM_TAR): | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://llvm.org/releases/$(LLVM_VER)/$(notdir $@) endif ifneq ($(LLVM_LLDB_TAR),) -$(LLVM_LLDB_TAR): +$(LLVM_LLDB_TAR): | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://llvm.org/releases/$(LLVM_VER)/$(notdir $@) endif ifeq ($(BUILD_LLDB),1) @@ -656,7 +660,7 @@ endif # LLVM_VER # Apply version-specific LLVM patches LLVM_PATCH_LIST= define LLVM_PATCH -$$(LLVM_SRC_DIR)/$1.patch-applied: $$(SRCDIR)/$1.patch +$$(LLVM_SRC_DIR)/$1.patch-applied: | $$(SRCDIR)/$1.patch cd $$(LLVM_SRC_DIR) && patch -p1 < $$< echo 1 > $$@ LLVM_PATCH_LIST += $$(LLVM_SRC_DIR)/$1.patch-applied @@ -789,6 +793,7 @@ $(BUILDDIR)/$(LIBUV_SRC_DIR)/config.status: $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/ touch -c $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/aclocal.m4 # touch a few files to prevent autogen from getting called touch -c $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/Makefile.in touch -c $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/configure + mkdir -p $(dir $@) cd $(dir $@) && \ $< --with-pic $(CONFIGURE_COMMON) $(UV_FLAGS) touch -c $@ @@ -808,7 +813,7 @@ clean-libuv: -$(MAKE) -C $(BUILDDIR)/$(LIBUV_SRC_DIR) clean -rm -rf $(build_libdir)/libuv.a $(build_libdir)/libuv.la $(build_includedir)/libuv.h $(build_includedir)/libuv-private -get-libuv: $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/configure +get-libuv: $(LIBUV_SRC_FILE) configure-libuv: $(BUILDDIR)/$(LIBUV_SRC_DIR)/config.status compile-libuv: $(UV_SRC_TARGET) check-libuv: $(BUILDDIR)/$(LIBUV_SRC_DIR)/checked @@ -890,7 +895,7 @@ clean-openlibm: -rm $(OPENLIBM_OBJ_TARGET) -rm $(build_libdir)/libopenlibm.a -get-openlibm: $(SRCDIR)/srccache/$(OPENLIBM_SRC_DIR).git +get-openlibm: $(OPENLIBM_SRC_FILE) configure-openlibm: $(BUILDDIR)/$(OPENLIBM_SRC_DIR)/Makefile compile-openlibm: $(OPENLIBM_OBJ_SOURCE) check-openlibm: compile-openlibm @@ -930,7 +935,7 @@ clean-openspecfun: -rm $(OPENSPECFUN_OBJ_TARGET) -rm $(build_libdir)/libopenspecfun.a -get-openspecfun: $(SRCDIR)/srccache/$(OPENSPECFUN_SRC_DIR).git +get-openspecfun: $(OPENSPECFUN_SRC_FILE) configure-openspecfun: $(BUILDDIR)/$(OPENSPECFUN_SRC_DIR)/Makefile compile-openspecfun: $(OPENSPECFUN_OBJ_SOURCE) check-openspecfun: compile-openspecfun @@ -953,7 +958,7 @@ ifeq ($(ARCH), x86_64) DSFMT_CFLAGS += -msse2 -DHAVE_SSE2 endif -$(SRCDIR)/srccache/dsfmt-$(DSFMT_VER).tar.gz: +$(SRCDIR)/srccache/dsfmt-$(DSFMT_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-$(DSFMT_VER).tar.gz touch -c $@ $(BUILDDIR)/dsfmt-$(DSFMT_VER)/config.status: $(SRCDIR)/srccache/dsfmt-$(DSFMT_VER).tar.gz @@ -997,9 +1002,9 @@ RMATH_JULIA_FLAGS += CC="$(CC)" USECLANG=$(USECLANG) USEGCC=$(USEGCC) \ USE_DSFMT=1 DSFMT_libdir="$(build_shlibdir)" \ DSFMT_includedir="$(build_includedir)" -$(SRCDIR)/srccache/Rmath-julia-$(RMATH_JULIA_VER).tar.gz: +$(SRCDIR)/srccache/Rmath-julia-$(RMATH_JULIA_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://api.github.com/repos/JuliaLang/Rmath-julia/tarball/v$(RMATH_JULIA_VER) -$(BUILDDIR)/Rmath-julia-$(RMATH_JULIA_VER)/Makefile: $(SRCDIR)/srccache/Rmath-julia-$(RMATH_JULIA_VER).tar.gz +$(BUILDDIR)/Rmath-julia-$(RMATH_JULIA_VER)/Makefile: $(SRCDIR)/srccache/Rmath-julia-$(RMATH_JULIA_VER).tar.gz | $(SRCDIR)/srccache $(JLCHECKSUM) $< mkdir -p $(BUILDDIR)/Rmath-julia-$(RMATH_JULIA_VER) $(TAR) -C $(BUILDDIR)/Rmath-julia-$(RMATH_JULIA_VER) --strip-components 1 -xf $< @@ -1028,7 +1033,7 @@ install-Rmath-julia: $(RMATH_JULIA_OBJ_TARGET) OBJCONV_SOURCE = $(BUILDDIR)/objconv/objconv OBJCONV_TARGET = $(build_bindir)/objconv -$(SRCDIR)/srccache/objconv.zip: +$(SRCDIR)/srccache/objconv.zip: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://www.agner.org/optimize/objconv.zip $(BUILDDIR)/objconv/config.status: $(SRCDIR)/srccache/objconv.zip -rm -r $(dir $@) @@ -1143,7 +1148,7 @@ endif clean-openblas: -$(MAKE) -C $(BUILDDIR)/$(OPENBLAS_SRC_DIR) clean -get-openblas: $(SRCDIR)/srccache/$(OPENBLAS_SRC_DIR).git +get-openblas: $(OPENBLAS_SRC_FILE) configure-openblas: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/config.status compile-openblas: $(OPENBLAS_OBJ_SOURCE) check-openblas: compile-openblas @@ -1246,7 +1251,7 @@ ifneq ($(OS),WINNT) LAPACK_MFLAGS += BLASLIB="-Wl,-rpath,'$(build_libdir)' $(LIBBLAS)" endif -$(SRCDIR)/srccache/lapack-$(LAPACK_VER).tgz: +$(SRCDIR)/srccache/lapack-$(LAPACK_VER).tgz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://www.netlib.org/lapack/$(notdir $@) $(BUILDDIR)/lapack-$(LAPACK_VER)/make.inc: $(SRCDIR)/srccache/lapack-$(LAPACK_VER).tgz $(JLCHECKSUM) $< @@ -1325,10 +1330,10 @@ ARPACK_FLAGS += LDFLAGS="$(LDFLAGS) -Wl,-rpath,'$(build_libdir)'" endif # ARPACK-NG upstream keeps changing their download filenames -$(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER).tar.gz: +$(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://github.com/opencollab/arpack-ng/archive/$(ARPACK_VER).tar.gz touch -c $@ -$(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)-testA.mtx: +$(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)-testA.mtx: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://raw.githubusercontent.com/opencollab/arpack-ng/$(ARPACK_VER)/TESTS/testA.mtx touch -c $@ $(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)/configure: $(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER).tar.gz @@ -1354,8 +1359,9 @@ $(BUILDDIR)/arpack-ng-$(ARPACK_VER)/config.status: $(SRCDIR)/srccache/arpack-ng- $(ARPACK_OBJ_SOURCE): $(BUILDDIR)/arpack-ng-$(ARPACK_VER)/config.status $(MAKE) -C $(dir $<) $(ARPACK_MFLAGS) touch -c $@ -$(BUILDDIR)/arpack-ng-$(ARPACK_VER)/checked: $(ARPACK_OBJ_SOURCE) $(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)-testA.mtx - cp $(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)-testA.mtx $(BUILDDIR)/arpack-ng-$(ARPACK_VER)/TESTS +$(BUILDDIR)/arpack-ng-$(ARPACK_VER)/checked: $(SRCDIR)/srccache/arpack-ng-$(ARPACK_VER)-testA.mtx $(ARPACK_OBJ_SOURCE) + $(JLCHECKSUM) $< + cp $< $(dir $@)/TESTS/testA.mtx $(MAKE) -C $(dir $@) check $(ARPACK_MFLAGS) echo 1 > $@ $(ARPACK_OBJ_TARGET): $(ARPACK_OBJ_SOURCE) $(BUILDDIR)/arpack-ng-$(ARPACK_VER)/checked | $(build_shlibdir) @@ -1416,7 +1422,7 @@ FFTW_ENABLE_single = --enable-single FFTW_ENABLE_double = FFTW_CONFIG += $(FFTW_ENABLE_$*) -$(SRCDIR)/srccache/fftw-$(FFTW_VER).tar.gz: +$(SRCDIR)/srccache/fftw-$(FFTW_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://www.fftw.org/$(notdir $@) $(SRCDIR)/srccache/fftw-$(FFTW_VER)/configure: $(SRCDIR)/srccache/fftw-$(FFTW_VER).tar.gz $(JLCHECKSUM) $< @@ -1425,7 +1431,7 @@ $(SRCDIR)/srccache/fftw-$(FFTW_VER)/configure: $(SRCDIR)/srccache/fftw-$(FFTW_VE touch -c $@ $(BUILDDIR)/fftw-$(FFTW_VER)-%/config.status: $(SRCDIR)/srccache/fftw-$(FFTW_VER)/configure mkdir -p $(dir $@) - # try to configure with avx support. if that fails, try again without it + @# try to configure with avx support. if that fails, try again without it cd $(dir $@) && \ ($< $(CONFIGURE_COMMON) $(FFTW_CONFIG) --enable-avx || \ $< $(CONFIGURE_COMMON) $(FFTW_CONFIG)) @@ -1498,8 +1504,8 @@ configure-fftw: configure-fftw-single configure-fftw-double compile-fftw: compile-fftw-single compile-fftw-double check-fftw: check-fftw-single check-fftw-double install-fftw: check-fftw-single check-fftw-double # do these serially, to prevent write conflicts - @$(MAKE) -s install-fftw-single - @$(MAKE) -s install-fftw-double + @$(MAKE) -s -f $(JULIAHOME)/deps/Makefile install-fftw-single + @$(MAKE) -s -f $(JULIAHOME)/deps/Makefile install-fftw-double get-fftw-single: $(SRCDIR)/srccache/fftw-$(FFTW_VER).tar.gz configure-fftw-single: $(BUILDDIR)/fftw-$(FFTW_VER)-single/config.status @@ -1523,16 +1529,18 @@ UTF8PROC_OBJ_LIB = $(build_libdir)/libutf8proc.a UTF8PROC_OBJ_HEADER = $(build_includedir)/utf8proc.h UTF8PROC_OBJ_TARGET = $(UTF8PROC_OBJ_LIB) $(UTF8PROC_OBJ_HEADER) UTF8PROC_CFLAGS = -O2 +UTF8PROC_MFLAGS = CC="$(CC) $(DEPS_CFLAGS)" CFLAGS="$(CFLAGS) $(UTF8PROC_CFLAGS)" PICFLAG="$(fPIC)" AR="$(AR)" $(UTF8PROC_SRC_TARGET): $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/Makefile - $(MAKE) -C $(dir $<) CC="$(CC) $(DEPS_CFLAGS)" CFLAGS="$(CFLAGS) $(UTF8PROC_CFLAGS)" PICFLAG="$(fPIC)" AR="$(AR)" libutf8proc.a + $(MAKE) -C $(dir $<) $(UTF8PROC_MFLAGS) libutf8proc.a touch -c $@ +# make check doesn't actually compile (missing prototype / implementation for getline) $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/checked: $(UTF8PROC_SRC_TARGET) ifeq ($(OS),$(BUILD_OS)) - $(MAKE) -C $(dir $@) check + $(MAKE) -C $(dir $@) $(UTF8PROC_MFLAGS) check endif echo 1 > $@ -$(UTF8PROC_OBJ_LIB): $(UTF8PROC_SRC_TARGET) $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/checked +$(UTF8PROC_OBJ_LIB): $(UTF8PROC_SRC_TARGET) cp -f $< $@ $(UTF8PROC_OBJ_HEADER): $(UTF8PROC_SRC_TARGET) cp -f $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/utf8proc.h $@ @@ -1541,7 +1549,7 @@ clean-utf8proc: -$(MAKE) -C $(BUILDDIR)/$(UTF8PROC_SRC_DIR) clean -rm -rf $(build_libdir)/libutf8proc.a $(build_includedir)/utf8proc.h -get-utf8proc: $(SRCDIR)/srccache/$(UTF8PROC_SRC_DIR).git +get-utf8proc: $(UTF8PROC_SRC_FILE) configure-utf8proc: $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/Makefile compile-utf8proc: $(UTF8PROC_SRC_TARGET) check-utf8proc: $(BUILDDIR)/$(UTF8PROC_SRC_DIR)/checked @@ -1579,7 +1587,7 @@ SUITESPARSE_MFLAGS = CC="$(CC)" CXX="$(CXX)" F77="$(FC)" AR="$(AR)" RANLIB="$(RA INSTALL_LIB="$(build_libdir)" INSTALL_INCLUDE="$(build_includedir)" LIB="$(SUITE_SPARSE_LIB)" \ UMFPACK_CONFIG="$(UMFPACK_CONFIG)" CHOLMOD_CONFIG="$(CHOLMOD_CONFIG)" SPQR_CONFIG="$(SPQR_CONFIG)" -$(SRCDIR)/srccache/SuiteSparse-$(SUITESPARSE_VER).tar.gz: +$(SRCDIR)/srccache/SuiteSparse-$(SUITESPARSE_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://faculty.cse.tamu.edu/davis/SuiteSparse/$(notdir $@) $(BUILDDIR)/SuiteSparse-$(SUITESPARSE_VER)/Makefile: $(SRCDIR)/srccache/SuiteSparse-$(SUITESPARSE_VER).tar.gz $(JLCHECKSUM) $< @@ -1670,7 +1678,7 @@ LIBUNWIND_TARGET_SOURCE = $(BUILDDIR)/libunwind-$(UNWIND_VER)/src/.libs/libunwin LIBUNWIND_CFLAGS = -U_FORTIFY_SOURCE $(fPIC) LIBUNWIND_CPPFLAGS = -$(SRCDIR)/srccache/libunwind-$(UNWIND_VER).tar.gz: +$(SRCDIR)/srccache/libunwind-$(UNWIND_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://download.savannah.gnu.org/releases/libunwind/$(notdir $@) $(SRCDIR)/srccache/libunwind-$(UNWIND_VER)/configure: $(SRCDIR)/srccache/libunwind-$(UNWIND_VER).tar.gz $(JLCHECKSUM) $< @@ -1694,7 +1702,7 @@ endif $(LIBUNWIND_TARGET_OBJ): $(LIBUNWIND_TARGET_SOURCE) $(call make-install,libunwind-$(UNWIND_VER),) ifeq ($(ARCH), ppc64) - # workaround for configure script bug + @# workaround for configure script bug mv $(build_prefix)/lib64/libunwind*.a $(build_libdir) endif touch $@ @@ -1718,7 +1726,7 @@ OSXUNWIND_FLAGS = ARCH="$(ARCH)" CC="$(CC)" FC="$(FC)" AR="$(AR)" OS="$(OS)" USE OSXUNWIND_OBJ_TARGET = $(build_shlibdir)/libosxunwind.$(SHLIB_EXT) OSXUNWIND_OBJ_SOURCE = $(BUILDDIR)/libosxunwind-$(OSXUNWIND_VER)/libosxunwind.$(SHLIB_EXT) -$(SRCDIR)/srccache/libosxunwind-$(OSXUNWIND_VER).tar.gz: +$(SRCDIR)/srccache/libosxunwind-$(OSXUNWIND_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://github.com/JuliaLang/libosxunwind/archive/v$(OSXUNWIND_VER).tar.gz $(BUILDDIR)/libosxunwind-$(OSXUNWIND_VER)/Makefile: $(SRCDIR)/srccache/libosxunwind-$(OSXUNWIND_VER).tar.gz @@ -1756,14 +1764,16 @@ ifeq ($(SANITIZE),1) GMP_CONFIGURE_OPTS += --disable-assembly endif -$(SRCDIR)/srccache/gmp-$(GMP_VER).tar.bz2: +$(SRCDIR)/srccache/gmp-$(GMP_VER).tar.bz2: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://gmplib.org/download/gmp/$(notdir $@) $(SRCDIR)/srccache/gmp-$(GMP_VER)/configure: $(SRCDIR)/srccache/gmp-$(GMP_VER).tar.bz2 $(JLCHECKSUM) $< cd $(dir $<) && $(TAR) jxf $< - cd $(dir $@) && patch -p1 < $(SRCDIR)/gmp_6.0.0_osx.patch touch -c $@ -$(BUILDDIR)/gmp-$(GMP_VER)/config.status: $(SRCDIR)/srccache/gmp-$(GMP_VER)/configure +$(SRCDIR)/srccache/gmp-$(GMP_VER)/patched: $(SRCDIR)/srccache/gmp-$(GMP_VER)/configure + cd $(dir $@) && patch -p1 < $(SRCDIR)/gmp_6.0.0_osx.patch + echo 1 > $@ +$(BUILDDIR)/gmp-$(GMP_VER)/config.status: $(SRCDIR)/srccache/gmp-$(GMP_VER)/configure $(SRCDIR)/srccache/gmp-$(GMP_VER)/patched mkdir -p $(dir $@) cd $(dir $@) && \ $< $(CONFIGURE_COMMON) F77= --enable-shared --disable-static $(GMP_CONFIGURE_OPTS) @@ -1822,7 +1832,7 @@ ifeq ($(SANITIZE),1) MPFR_OPTS += --host=none-unknown-linux endif -$(SRCDIR)/srccache/mpfr-$(MPFR_VER).tar.bz2: +$(SRCDIR)/srccache/mpfr-$(MPFR_VER).tar.bz2: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://www.mpfr.org/mpfr-$(MPFR_VER)/$(notdir $@) $(SRCDIR)/srccache/mpfr-$(MPFR_VER)/configure: $(SRCDIR)/srccache/mpfr-$(MPFR_VER).tar.bz2 $(JLCHECKSUM) $< @@ -1862,7 +1872,7 @@ install-mpfr: $(MPFR_OBJ_TARGET) PATCHELF_SOURCE = $(BUILDDIR)/patchelf-$(PATCHELF_VER)/src/patchelf PATCHELF_TARGET = $(build_bindir)/patchelf -$(SRCDIR)/srccache/patchelf-$(PATCHELF_VER).tar.gz: +$(SRCDIR)/srccache/patchelf-$(PATCHELF_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ http://nixos.org/releases/patchelf/patchelf-$(PATCHELF_VER)/patchelf-$(PATCHELF_VER).tar.gz $(SRCDIR)/srccache/patchelf-$(PATCHELF_VER)/configure: $(SRCDIR)/srccache/patchelf-$(PATCHELF_VER).tar.gz $(JLCHECKSUM) $< @@ -1904,7 +1914,7 @@ install-patchelf: $(PATCHELF_TARGET) GIT_SOURCE = $(BUILDDIR)/git-$(GIT_VER)/git GIT_TARGET = $(build_libexecdir)/git -$(SRCDIR)/srccache/git-$(GIT_VER).tar.gz: +$(SRCDIR)/srccache/git-$(GIT_VER).tar.gz: | $(SRCDIR)/srccache $(JLDOWNLOAD) $@ https://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.gz $(BUILDDIR)/git-$(GIT_VER)/configure: $(SRCDIR)/srccache/git-$(GIT_VER).tar.gz $(JLCHECKSUM) $< @@ -1940,8 +1950,8 @@ install-git: $(GIT_TARGET) VIRTUALENV_SOURCE = $(SRCDIR)/srccache/virtualenv-$(VIRTUALENV_VER)/virtualenv.py VIRTUALENV_TARGET = $(BUILDDIR)/julia-env -$(SRCDIR)/srccache/virtualenv-$(VIRTUALENV_VER).tar.gz: - $(JLDOWNLOAD) $@ https://pypi.python.org/packages/source/v/virtualenv/$(dir $@) +$(SRCDIR)/srccache/virtualenv-$(VIRTUALENV_VER).tar.gz: | $(SRCDIR)/srccache + $(JLDOWNLOAD) $@ https://pypi.python.org/packages/source/v/virtualenv/$(notdir $@) $(VIRTUALENV_SOURCE): $(SRCDIR)/srccache/virtualenv-$(VIRTUALENV_VER).tar.gz $(JLCHECKSUM) $< cd $(dir $<) && $(TAR) zxf $< @@ -1994,18 +2004,18 @@ $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/Makefile: $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/C $(CMAKE) $(dir $<) $(LIBGIT2_OPTS) touch -c $@ $(LIBGIT2_OBJ_SOURCE): $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/Makefile - $(MAKE) -C $(dir $<) + $(CMAKE) --build $(dir $<) touch -c $@ $(LIBGIT2_SRC_DIR)/checked: $(LIBGIT2_OBJ_SOURCE) ifeq ($(OS),$(BUILD_OS)) - $(MAKE) -C $(dir $@) test + $(CMAKE) --build $(dir $@) --target test endif echo 1 > $@ $(LIBGIT2_OBJ_TARGET): $(LIBGIT2_OBJ_SOURCE) | $(build_shlibdir) cp $< $@ - #$$(call make-install,$(LIBGIT2_SRC_DIR),) # currently don't need the full install + @#$$(call make-install,$(LIBGIT2_SRC_DIR),) # currently don't need the full install ifeq ($(OS),Linux) - # If we're on linux, copy over libssl and libcrypto for libgit2 + @# If we're on linux, copy over libssl and libcrypto for libgit2 -LIBGIT_LIBS=$$(ldd "$@" | tail -n +2 | awk '{print $$(NF-1)}'); \ for LIB in libssl libcrypto; do \ LIB_PATH=$$(echo "$$LIBGIT_LIBS" | grep "$$LIB"); \ @@ -2019,7 +2029,7 @@ clean-libgit2: -rm -rf $(BUILDDIR)/$(LIBGIT2_SRC_DIR) -rm -f $(LIBGIT2_OBJ_TARGET) -get-libgit2: $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/CMakeLists.txt +get-libgit2: $(LIBGIT2_SRC_FILE) configure-libgit2: $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/Makefile compile-libgit2: $(LIBGIT2_OBJ_SOURCE) check-libgit2: $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/checked diff --git a/deps/jlchecksum b/deps/jlchecksum index 3e64f693573c2..7def72031f865 100755 --- a/deps/jlchecksum +++ b/deps/jlchecksum @@ -12,6 +12,7 @@ fi DIR="$( cd "$( dirname "$0" )" && pwd )" # Get the basename of the file we're trying to checksum +ARG1=$1 BASENAME=$(basename $1) # Print out a hash, and wrap around if we're longer than 64 characters @@ -66,15 +67,15 @@ MD5_PROG="" find_checksum_progs() { if [ ! -z $(which sha512sum) ]; then - SHA512_PROG="sha512sum $DIR/srccache/$BASENAME | awk '{ print \$1; }'" + SHA512_PROG="sha512sum $ARG1 | awk '{ print \$1; }'" elif [ ! -z $(which shasum) ]; then - SHA512_PROG="shasum -a 512 $DIR/srccache/$BASENAME | awk '{ print \$1; }'" + SHA512_PROG="shasum -a 512 $ARG1 | awk '{ print \$1; }'" fi if [ ! -z $(which md5sum) ]; then - MD5_PROG="md5sum $DIR/srccache/$BASENAME | awk '{ print \$1; }'" + MD5_PROG="md5sum $ARG1 | awk '{ print \$1; }'" elif [ ! -z $(which md5) ]; then - MD5_PROG="md5 -q $DIR/srccache/$BASENAME" + MD5_PROG="md5 -q $ARG1" fi } diff --git a/doc/Makefile b/doc/Makefile index 08ba8dd25ff9a..e7e83b23f1bd4 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -3,29 +3,31 @@ default: html # You can set these variables from the command line. -SPHINXOPTS = -PAPER = -JULIAHOME = $(abspath ..) -JULIA_EXECUTABLE = $(JULIAHOME)/usr/bin/julia +SPHINXOPTS := +PAPER := +SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +BUILDDIR := . +JULIAHOME := $(abspath $(SRCDIR)/..) +JULIA_EXECUTABLE := $(JULIAHOME)/usr/bin/julia # Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +PAPEROPT_a4 := -D latex_paper_size=a4 +PAPEROPT_letter := -D latex_paper_size=letter +ALLSPHINXOPTS := -d $(BUILDDIR)/_build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SRCDIR) # the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +I18NSPHINXOPTS := $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -JULIA_ENV = $(JULIAHOME)/deps/julia-env -ACTIVATE = $(JULIA_ENV)/bin/activate -SPHINX_BUILD = $(JULIA_ENV)/bin/sphinx-build +JULIA_ENV := $(BUILDDIR)/../deps/julia-env +ACTIVATE := $(JULIA_ENV)/bin/activate +SPHINX_BUILD := $(JULIA_ENV)/bin/sphinx-build $(ACTIVATE): - $(MAKE) -C $(JULIAHOME)/deps install-virtualenv + $(MAKE) -C $(BUILDDIR)/../deps install-virtualenv touch -c $@ -$(SPHINX_BUILD): $(ACTIVATE) requirements.txt +$(SPHINX_BUILD): $(SRCDIR)/requirements.txt $(ACTIVATE) . $(ACTIVATE) && pip install sphinx==1.3.1 \ - && pip install -r requirements.txt + && pip install -r $< touch -c $@ SPHINXBUILD = . $(ACTIVATE) && sphinx-build @@ -61,38 +63,38 @@ clean: cleanall: clean html: $(SPHINX_BUILD) - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/_build/html @echo @echo "Build finished. The HTML pages are in _build/html." dirhtml: $(SPHINX_BUILD) - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) _build/dirhtml + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/_build/dirhtml @echo @echo "Build finished. The HTML pages are in _build/dirhtml." singlehtml: $(SPHINX_BUILD) - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) _build/singlehtml + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/_build/singlehtml @echo @echo "Build finished. The HTML page is in _build/singlehtml." pickle: $(SPHINX_BUILD) - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/_build/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINX_BUILD) - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/_build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINX_BUILD) - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/_build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in _build/htmlhelp." qthelp: $(SPHINX_BUILD) - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) _build/qthelp + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/_build/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in _build/qthelp, like this:" @@ -101,7 +103,7 @@ qthelp: $(SPHINX_BUILD) @echo "# assistant -collectionFile _build/qthelp/JuliaLanguage.qhc" devhelp: $(SPHINX_BUILD) - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) _build/devhelp + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/_build/devhelp @echo @echo "Build finished." @echo "To view the help file:" @@ -110,69 +112,72 @@ devhelp: $(SPHINX_BUILD) @echo "# devhelp" epub: $(SPHINX_BUILD) - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) _build/epub + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/_build/epub @echo @echo "Build finished. The epub file is in _build/epub." latex: $(SPHINX_BUILD) - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/_build/latex @echo @echo "Build finished; the LaTeX files are in _build/latex." @echo "Run 'make' in that directory to run these through (pdf)latex" \ "(use 'make latexpdf' here to do that automatically)." latexpdf: $(SPHINX_BUILD) - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/_build/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C _build/latex all-pdf @echo "pdflatex finished; the PDF files are in _build/latex." text: $(SPHINX_BUILD) - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) _build/text + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/_build/text @echo @echo "Build finished. The text files are in _build/text." man: $(SPHINX_BUILD) - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) _build/man + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/_build/man @echo @echo "Build finished. The manual pages are in _build/man." texinfo: $(SPHINX_BUILD) - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) _build/texinfo + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/_build/texinfo @echo @echo "Build finished. The Texinfo files are in _build/texinfo." @echo "Run 'make' in that directory to run these through makeinfo" \ "(use 'make info' here to do that automatically)." info: $(SPHINX_BUILD) - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) _build/texinfo + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/_build/texinfo @echo "Running Texinfo files through makeinfo..." make -C _build/texinfo info @echo "makeinfo finished; the Info files are in _build/texinfo." gettext: $(SPHINX_BUILD) - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) _build/locale + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/_build/locale @echo @echo "Build finished. The message catalogs are in _build/locale." changes: $(SPHINX_BUILD) - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/_build/changes @echo @echo "The overview file is in _build/changes." linkcheck: $(SPHINX_BUILD) - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/_build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in _build/linkcheck/output.txt." doctest: $(SPHINX_BUILD) - PATH="$(PATH):$(build_bindir)" $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest + PATH="$(build_bindir):$(PATH)" $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/_build/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in _build/doctest/output.txt." -manual/unicode-input-table.rst: $(JULIAHOME)/base/latex_symbols.jl - $(JULIA_EXECUTABLE) tabcomplete.jl > manual/unicode-input-table.rst +$(BUILDDIR)/manual: + mkdir -p $@ -unicode: manual/unicode-input-table.rst +$(BUILDDIR)/manual/unicode-input-table.rst: $(SRCDIR)/tabcomplete.jl $(JULIAHOME)/base/latex_symbols.jl | $(BUILDDIR)/manual + $(JULIA_EXECUTABLE) $< > $@ + +unicode: $(BUILDDIR)/manual/unicode-input-table.rst diff --git a/src/Makefile b/src/Makefile index a17d5d325f685..da8f8758b097a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) JULIAHOME := $(abspath $(SRCDIR)/..) -BUILDDIR ?= . +BUILDDIR := . include $(JULIAHOME)/deps/Versions.make include $(JULIAHOME)/Make.inc diff --git a/src/dump.c b/src/dump.c index ce2426576c8b0..2929477a555aa 100644 --- a/src/dump.c +++ b/src/dump.c @@ -1756,6 +1756,14 @@ void jl_save_system_image_to_stream(ios_t *f) // orphan old Base module if present jl_base_module = (jl_module_t*)jl_get_global(jl_main_module, jl_symbol("Base")); + // empty!(Core.ARGS) + if (jl_core_module != NULL) { + jl_array_t *args = (jl_array_t*)jl_get_global(jl_core_module, jl_symbol("ARGS")); + if (args != NULL) { + jl_array_del_end(args, jl_array_len(args)); + } + } + jl_idtable_type = jl_base_module ? jl_get_global(jl_base_module, jl_symbol("ObjectIdDict")) : NULL; jl_serialize_value(f, jl_main_module); diff --git a/src/flisp/Makefile b/src/flisp/Makefile index bec862493544c..1dfc7a52ed318 100644 --- a/src/flisp/Makefile +++ b/src/flisp/Makefile @@ -1,12 +1,11 @@ -JULIAHOME = $(abspath ../..) +JULIAHOME := $(abspath ../..) +BUILDDIR := . include $(JULIAHOME)/Make.inc override CFLAGS += $(JCFLAGS) override CXXFLAGS += $(JCXXFLAGS) override CPPFLAGS += $(JCPPFLAGS) -BUILDDIR ?= . - NAME = flisp EXENAME = $(NAME) LIBTARGET = lib$(NAME) diff --git a/src/support/Makefile b/src/support/Makefile index 382377e62aa5e..c03767c2dbafe 100644 --- a/src/support/Makefile +++ b/src/support/Makefile @@ -1,12 +1,11 @@ -JULIAHOME = $(abspath ../..) +JULIAHOME := $(abspath ../..) +BUILDDIR := . include $(JULIAHOME)/Make.inc override CFLAGS += $(JCFLAGS) override CXXFLAGS += $(JCXXFLAGS) override CPPFLAGS += $(JCPPFLAGS) -BUILDDIR ?= . - SRCS = hashing timefuncs ptrhash operators \ utf8 ios htable bitvector \ int2str libsupportinit arraylist strtod diff --git a/test/Makefile b/test/Makefile index c7848e0644c45..1da9f0242edfb 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,25 +1,28 @@ -JULIAHOME = $(abspath ..) -include ../Make.inc +SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +JULIAHOME := $(abspath $(SRCDIR)/..) +BUILDDIR := . +include $(JULIAHOME)/Make.inc +# TODO: this Makefile ignores BUILDDIR, except for computing JULIA_EXECUTABLE TESTS = all linalg $(filter-out TestHelpers runtests testdefs,$(subst .jl,,$(wildcard *.jl linalg/*.jl))) default: all $(TESTS): - @$(call PRINT_JULIA, $(call spawn,$(JULIA_EXECUTABLE)) --check-bounds=yes --startup-file=no ./runtests.jl $@) + @cd $(SRCDIR) && $(call PRINT_JULIA, $(call spawn,$(JULIA_EXECUTABLE)) --check-bounds=yes --startup-file=no ./runtests.jl $@) perf: - @$(MAKE) -C perf all + @$(MAKE) -C $(SRCDIR)/perf all clean: - @$(MAKE) -C perf $@ - -rm -f libccalltest.$(SHLIB_EXT) ccalltest + @$(MAKE) -C $(SRCDIR)/perf clean + -rm -f $(SRCDIR)/libccalltest.$(SHLIB_EXT) $(SRCDIR)/ccalltest .PHONY: $(TESTS) perf clean libccalltest -all ccall libccalltest: libccalltest.$(SHLIB_EXT) -libccalltest.$(SHLIB_EXT): ccalltest.c +all ccall libccalltest: $(SRCDIR)/libccalltest.$(SHLIB_EXT) +$(SRCDIR)/libccalltest.$(SHLIB_EXT): $(SRCDIR)/ccalltest.c @$(call PRINT_CC, $(CC) $(CFLAGS) $(DEBUGFLAGS) -O3 $< $(fPIC) -shared -o $@ $(LDFLAGS) -DCC="$(CC)") -ccalltest: ccalltest.c libccalltest.$(SHLIB_EXT) +$(SRCDIR)/ccalltest: $(SRCDIR)/ccalltest.c $(SRCDIR)/libccalltest.$(SHLIB_EXT) @$(call PRINT_CC, $(CC) $(CFLAGS) $(DEBUGFLAGS) -O3 $< -o $@ $(LDFLAGS) -DCC="$(CC)") diff --git a/test/perf/Makefile b/test/perf/Makefile index 848dfbcbe3f28..0ff723aa70f7b 100644 --- a/test/perf/Makefile +++ b/test/perf/Makefile @@ -1,34 +1,37 @@ -JULIAHOME = $(abspath ../..) -include ../../Make.inc +SRCDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +JULIAHOME := $(abspath $(SRCDIR)/../..) +BUILDDIR := . +include $(JULIAHOME)/Make.inc +# TODO: this Makefile ignores BUILDDIR, except for computing JULIA_EXECUTABLE + all: micro kernel cat shootout blas lapack simd sort spell sparse micro kernel cat shootout blas lapack simd sort spell sparse: - @$(MAKE) $(QUIET_MAKE) -C shootout + @$(MAKE) $(QUIET_MAKE) -C $(SRCDIR)/shootout ifneq ($(OS),WINNT) - @$(call spawn,$(JULIA_EXECUTABLE)) $@/perf.jl | perl -nle '@_=split/,/; printf "%-18s %8.3f %8.3f %8.3f %8.3f\n", $$_[1], $$_[2], $$_[3], $$_[4], $$_[5]' + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/$@/perf.jl | perl -nle '@_=split/,/; printf "%-18s %8.3f %8.3f %8.3f %8.3f\n", $$_[1], $$_[2], $$_[3], $$_[4], $$_[5]' else - @$(call spawn,$(JULIA_EXECUTABLE)) $@/perf.jl 2> /dev/null + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/$@/perf.jl 2> /dev/null endif codespeed: - @$(MAKE) $(QUIET_MAKE) -C shootout - @$(call spawn,$(JULIA_EXECUTABLE)) micro/perf.jl codespeed - @$(call spawn,$(JULIA_EXECUTABLE)) kernel/perf.jl codespeed - @$(call spawn,$(JULIA_EXECUTABLE)) shootout/perf.jl codespeed -# @$(call spawn,$(JULIA_EXECUTABLE)) cat/perf.jl codespeed -# @$(call spawn,$(JULIA_EXECUTABLE)) blas/perf.jl codespeed -# @$(call spawn,$(JULIA_EXECUTABLE)) lapack/perf.jl codespeed -# @$(call spawn,$(JULIA_EXECUTABLE)) simd/perf.jl codespeed -# @$(call spawn,$(JULIA_EXECUTABLE)) sort/perf.jl codespeed - @$(call spawn,$(JULIA_EXECUTABLE)) spell/perf.jl codespeed - @$(call spawn,$(JULIA_EXECUTABLE)) sparse/perf.jl codespeed - @$(call spawn,$(JULIA_EXECUTABLE)) report.jl + @$(MAKE) $(QUIET_MAKE) -C $(SRCDIR)/shootout + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/micro/perf.jl codespeed + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/kernel/perf.jl codespeed + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/shootout/perf.jl codespeed +# @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/cat/perf.jl codespeed +# @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/blas/perf.jl codespeed +# @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/lapack/perf.jl codespeed +# @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/simd/perf.jl codespeed +# @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/sort/perf.jl codespeed + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/spell/perf.jl codespeed + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/sparse/perf.jl codespeed + @$(call spawn,$(JULIA_EXECUTABLE)) $(SRCDIR)/report.jl clean: - rm -f *~ - $(MAKE) -C micro $@ - $(MAKE) -C shootout $@ + $(MAKE) -C $(SRCDIR)/micro clean + $(MAKE) -C $(SRCDIR)/shootout clean .PHONY: micro kernel cat shootout blas lapack simd sort spell sparse clean diff --git a/ui/repl.c b/ui/repl.c index a4c11ea2dc41b..5ef39003f7f6c 100644 --- a/ui/repl.c +++ b/ui/repl.c @@ -456,11 +456,11 @@ static void print_profile(void) static int true_main(int argc, char *argv[]) { - if (jl_base_module != NULL) { - jl_array_t *args = (jl_array_t*)jl_get_global(jl_base_module, jl_symbol("ARGS")); + if (jl_core_module != NULL) { + jl_array_t *args = (jl_array_t*)jl_get_global(jl_core_module, jl_symbol("ARGS")); if (args == NULL) { args = jl_alloc_cell_1d(0); - jl_set_const(jl_base_module, jl_symbol("ARGS"), (jl_value_t*)args); + jl_set_const(jl_core_module, jl_symbol("ARGS"), (jl_value_t*)args); } assert(jl_array_len(args) == 0); jl_array_grow_end(args, argc);