X-Git-Url: http://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/58ea4d407c2e4adbe51b2d7b71dc8bef095677c7..d17e085a59534a333cb8db028579fd0e6ec7f89b:/Makefile.am diff --git a/Makefile.am b/Makefile.am index ca5bb6a266..4dfcd06d0b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,9 +1,12 @@ # GNU Guix --- Functional package management for GNU # Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès # Copyright © 2013 Andreas Enge -# Copyright © 2015 Alex Kost +# Copyright © 2015, 2017 Alex Kost # Copyright © 2016 Mathieu Lirzin -# Copyright © 2016 Mark H Weaver +# Copyright © 2016, 2017 Mark H Weaver +# Copyright © 2017 Mathieu Othacehe +# Copyright © 2017 Leo Famulari +# Copyright © 2017 Ricardo Wurmus # # This file is part of GNU Guix. # @@ -27,9 +30,14 @@ nodist_noinst_SCRIPTS = \ pre-inst-env \ test-env +# Modules that are not compiled but are installed nonetheless, such as +# build-side modules with unusual dependencies. +MODULES_NOT_COMPILED = + include gnu/local.mk MODULES = \ + guix/base16.scm \ guix/base32.scm \ guix/base64.scm \ guix/cpio.scm \ @@ -39,10 +47,12 @@ MODULES = \ guix/pk-crypto.scm \ guix/pki.scm \ guix/combinators.scm \ + guix/memoization.scm \ guix/utils.scm \ guix/sets.scm \ guix/modules.scm \ guix/download.scm \ + guix/discovery.scm \ guix/git-download.scm \ guix/hg-download.scm \ guix/monads.scm \ @@ -57,13 +67,17 @@ MODULES = \ guix/upstream.scm \ guix/licenses.scm \ guix/graph.scm \ + guix/cache.scm \ guix/cve.scm \ + guix/workers.scm \ guix/zlib.scm \ guix/build-system.scm \ guix/build-system/ant.scm \ guix/build-system/cargo.scm \ guix/build-system/cmake.scm \ + guix/build-system/dub.scm \ guix/build-system/emacs.scm \ + guix/build-system/font.scm \ guix/build-system/asdf.scm \ guix/build-system/glib-or-gtk.scm \ guix/build-system/gnu.scm \ @@ -74,6 +88,7 @@ MODULES = \ guix/build-system/waf.scm \ guix/build-system/r.scm \ guix/build-system/ruby.scm \ + guix/build-system/texlive.scm \ guix/build-system/trivial.scm \ guix/ftp-client.scm \ guix/http-client.scm \ @@ -87,7 +102,9 @@ MODULES = \ guix/build/download.scm \ guix/build/cargo-build-system.scm \ guix/build/cmake-build-system.scm \ + guix/build/dub-build-system.scm \ guix/build/emacs-build-system.scm \ + guix/build/font-build-system.scm \ guix/build/asdf-build-system.scm \ guix/build/git.scm \ guix/build/hg.scm \ @@ -99,6 +116,7 @@ MODULES = \ guix/build/ocaml-build-system.scm \ guix/build/r-build-system.scm \ guix/build/ruby-build-system.scm \ + guix/build/texlive-build-system.scm \ guix/build/waf-build-system.scm \ guix/build/haskell-build-system.scm \ guix/build/store-copy.scm \ @@ -112,6 +130,7 @@ MODULES = \ guix/build/syscalls.scm \ guix/build/gremlin.scm \ guix/build/emacs-utils.scm \ + guix/build/java-utils.scm \ guix/build/lisp-utils.scm \ guix/build/graft.scm \ guix/build/bournish.scm \ @@ -126,6 +145,7 @@ MODULES = \ guix/import/cran.scm \ guix/import/hackage.scm \ guix/import/elpa.scm \ + guix/import/texlive.scm \ guix/scripts.scm \ guix/scripts/download.scm \ guix/scripts/perform-download.scm \ @@ -135,6 +155,7 @@ MODULES = \ guix/scripts/package.scm \ guix/scripts/gc.scm \ guix/scripts/hash.scm \ + guix/scripts/pack.scm \ guix/scripts/pull.scm \ guix/scripts/substitute.scm \ guix/scripts/authenticate.scm \ @@ -147,6 +168,7 @@ MODULES = \ guix/scripts/import/nix.scm \ guix/scripts/import/hackage.scm \ guix/scripts/import/elpa.scm \ + guix/scripts/import/texlive.scm \ guix/scripts/environment.scm \ guix/scripts/publish.scm \ guix/scripts/edit.scm \ @@ -161,15 +183,17 @@ if HAVE_GUILE_JSON MODULES += \ guix/docker.scm \ + guix/import/cpan.scm \ + guix/import/crate.scm \ + guix/import/gem.scm \ guix/import/github.scm \ guix/import/json.scm \ - guix/import/crate.scm \ - guix/scripts/import/crate.scm \ guix/import/pypi.scm \ - guix/scripts/import/pypi.scm \ - guix/import/cpan.scm \ + guix/import/stackage.scm \ + guix/scripts/import/crate.scm \ guix/scripts/import/gem.scm \ - guix/import/gem.scm + guix/scripts/import/pypi.scm \ + guix/scripts/import/stackage.scm endif @@ -177,10 +201,18 @@ if HAVE_GUILE_SSH MODULES += \ guix/ssh.scm \ - guix/scripts/copy.scm + guix/scripts/copy.scm \ + guix/store/ssh.scm endif HAVE_GUILE_SSH +if HAVE_GUILE_GIT + +MODULES += \ + guix/git.scm + +endif HAVE_GUILE_GIT + if BUILD_DAEMON_OFFLOAD MODULES += \ @@ -191,27 +223,32 @@ endif BUILD_DAEMON_OFFLOAD # Internal modules with test suite support. dist_noinst_DATA = guix/tests.scm guix/tests/http.scm -# Linux-Libre configurations. -KCONFIGS = \ - gnu/packages/linux-libre-4.9-i686.conf \ - gnu/packages/linux-libre-4.9-x86_64.conf \ - gnu/packages/linux-libre-4.4-i686.conf \ - gnu/packages/linux-libre-4.4-x86_64.conf \ - gnu/packages/linux-libre-4.1-i686.conf \ - gnu/packages/linux-libre-4.1-x86_64.conf +# Auxiliary files for packages. +AUX_FILES = \ + gnu/packages/aux-files/emacs/guix-emacs.el \ + gnu/packages/aux-files/linux-libre/4.11-i686.conf \ + gnu/packages/aux-files/linux-libre/4.11-x86_64.conf \ + gnu/packages/aux-files/linux-libre/4.9-i686.conf \ + gnu/packages/aux-files/linux-libre/4.9-x86_64.conf \ + gnu/packages/aux-files/linux-libre/4.4-i686.conf \ + gnu/packages/aux-files/linux-libre/4.4-x86_64.conf \ + gnu/packages/aux-files/linux-libre/4.1-i686.conf \ + gnu/packages/aux-files/linux-libre/4.1-x86_64.conf # Templates, examples. EXAMPLES = \ gnu/system/examples/bare-bones.tmpl \ gnu/system/examples/desktop.tmpl \ - gnu/system/examples/lightweight-desktop.tmpl + gnu/system/examples/lightweight-desktop.tmpl \ + gnu/system/examples/vm-image.tmpl GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go) -nobase_dist_guilemodule_DATA = \ - $(MODULES) $(KCONFIGS) $(EXAMPLES) \ +nobase_dist_guilemodule_DATA = \ + $(MODULES) $(MODULES_NOT_COMPILED) $(AUX_FILES) $(EXAMPLES) \ $(MISC_DISTRO_FILES) -nobase_nodist_guilemodule_DATA = $(GOBJECTS) guix/config.scm +nobase_nodist_guilemodule_DATA = guix/config.scm +nobase_nodist_guileobject_DATA = $(GOBJECTS) # Do we need to provide our own non-broken (srfi srfi-37) module? if INSTALL_SRFI_37 @@ -242,6 +279,7 @@ TEST_EXTENSIONS = .scm .sh if CAN_RUN_TESTS SCM_TESTS = \ + tests/base16.scm \ tests/base32.scm \ tests/base64.scm \ tests/cpio.scm \ @@ -259,6 +297,7 @@ SCM_TESTS = \ tests/records.scm \ tests/upstream.scm \ tests/combinators.scm \ + tests/discovery.scm \ tests/utils.scm \ tests/build-utils.scm \ tests/packages.scm \ @@ -266,6 +305,7 @@ SCM_TESTS = \ tests/hackage.scm \ tests/cran.scm \ tests/elpa.scm \ + tests/texlive.scm \ tests/store.scm \ tests/monads.scm \ tests/gexp.scm \ @@ -282,13 +322,16 @@ SCM_TESTS = \ tests/size.scm \ tests/graph.scm \ tests/challenge.scm \ + tests/cache.scm \ tests/cve.scm \ + tests/workers.scm \ tests/zlib.scm \ tests/file-systems.scm \ tests/system.scm \ tests/services.scm \ tests/scripts-build.scm \ tests/containers.scm \ + tests/pack.scm \ tests/import-utils.scm if HAVE_GUILE_JSON @@ -360,14 +403,16 @@ check-local: endif !CAN_RUN_TESTS -check-system: $(GOBJECTS) +check-system: $(GOBJECTS) $(BOOTSTRAP_GUILE_TARBALLS) $(AM_V_at)$(top_builddir)/pre-inst-env \ $(GUILE) --no-auto-compile \ -e '(@@ (run-system-tests) run-system-tests)' \ $(top_srcdir)/build-aux/run-system-tests.scm -# Public key used to sign substitutes from hydra.gnu.org. -dist_pkgdata_DATA = hydra.gnu.org.pub +# Public key used to sign substitutes from hydra.gnu.org & co. +dist_pkgdata_DATA = \ + hydra.gnu.org.pub \ + bayfront.guixsd.org.pub # Bash completion file. dist_bashcompletion_DATA = etc/completion/bash/guix @@ -385,14 +430,14 @@ EXTRA_DIST = \ build-aux/compile-all.scm \ build-aux/hydra/evaluate.scm \ build-aux/hydra/gnu-system.scm \ - build-aux/hydra/demo-os.scm \ build-aux/hydra/guix.scm \ build-aux/check-available-binaries.scm \ build-aux/check-final-inputs-self-contained.scm \ build-aux/download.scm \ - build-aux/make-binary-tarball.scm \ build-aux/generate-authors.scm \ build-aux/test-driver.scm \ + build-aux/update-guix-package.scm \ + build-aux/update-NEWS.scm \ build-aux/run-system-tests.scm \ d3.v3.js \ graph.js \ @@ -445,14 +490,14 @@ SUFFIXES = .go # files. See # # for details. -guix_install_go_files = install-nobase_nodist_guilemoduleDATA +guix_install_go_files = install-nobase_nodist_guileobjectDATA $(guix_install_go_files): install-nobase_dist_guilemoduleDATA # The above trick doesn't work for 'config.go' because both 'config.scm' and -# 'config.go' are listed in $(nobase_nodist_guilemodule_DATA). Thus, give it +# 'config.go' are listed in $(nobase_nodist_guileobject_DATA). Thus, give it # special treatment. install-data-hook: set-bootstrap-executable-permissions - touch "$(DESTDIR)$(guilemoduledir)/guix/config.go" + touch "$(DESTDIR)$(guileobjectdir)/guix/config.go" SUBDIRS = po/guix po/packages @@ -469,31 +514,42 @@ endif BUILD_DAEMON ACLOCAL_AMFLAGS = -I m4 # Pass an explicit '--localstatedir' so that configure does not error out if -# it finds an existing installation with a different localstatedir. +# it finds an existing installation with a different localstatedir. Inherit +# 'ac_cv_guix_test_root' so that "make check" in $(distdir) does not have to +# repopulate the whole store, and to make sure $(GUIX_TEST_ROOT) is short +# enough for shebangs. AM_DISTCHECK_CONFIGURE_FLAGS = \ --localstatedir="$$dc_install_base/var" \ --with-libgcrypt-prefix="$(LIBGCRYPT_PREFIX)" \ --with-libgcrypt-libdir="$(LIBGCRYPT_LIBDIR)" \ --with-nix-prefix="$(NIX_PREFIX)" \ - --enable-daemon + --enable-daemon \ + ac_cv_guix_test_root="$(GUIX_TEST_ROOT)" -# The self-contained tarball. +# The self-contained tarball. Add 'glibc-utf8-locales' along with glibc just +# so 'etc/profile' defines 'GUIX_LOCPATH' pointing to a valid set of locales. guix-binary.%.tar.xz: - $(AM_V_GEN)GUIX_PACKAGE_PATH= \ - $(top_builddir)/pre-inst-env "$(GUILE)" \ - "$(top_srcdir)/build-aux/make-binary-tarball.scm" "$*" "$@" + $(AM_V_GEN)GUIX_PACKAGE_PATH= \ + tarball=`$(top_builddir)/pre-inst-env guix pack -K -C xz \ + -s "$*" --localstatedir guix glibc-utf8-locales \ + -e '(@@ (gnu packages commencement) glibc-final)'` ; \ + cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@" -dist-hook: sync-descriptions gen-ChangeLog gen-AUTHORS +dist-hook: $(distdir)/ChangeLog gen-AUTHORS gen-tarball-version dist-hook: assert-no-store-file-names distcheck-hook: assert-binaries-available assert-final-inputs-self-contained -sync-descriptions: - $(AM_V_at)GUIX_PACKAGE_PATH= \ - $(top_builddir)/pre-inst-env guix lint --checkers=gnu-description +EXTRA_DIST += $(top_srcdir)/.version +BUILT_SOURCES += $(top_srcdir)/.version +$(top_srcdir)/.version: + echo $(VERSION) > "$@-t" && mv "$@-t" "$@" -gen-ChangeLog: +gen-tarball-version: + echo $(VERSION) > "$(distdir)/.tarball-version" + +gen-ChangeLog $(distdir)/ChangeLog: $(AM_V_GEN)if test -d .git; then \ $(top_srcdir)/build-aux/gitlog-to-changelog \ > $(distdir)/cl-t; \ @@ -509,8 +565,134 @@ gen-AUTHORS: "$(top_srcdir)" "$(distdir)/AUTHORS"; \ fi + +# +# Release management. +# + +releasedir = release-$(PACKAGE_VERSION) + +PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) + +# List of source tarballs produced. This must be kept in sync with the +# 'dist-' options of 'AM_INIT_AUTOMAKE' in 'configure.ac'. +SOURCE_TARBALLS = \ + $(foreach ext,tar.gz,$(PACKAGE_FULL_TARNAME).$(ext)) + +# Systems supported by Guix. +SUPPORTED_SYSTEMS ?= x86_64-linux i686-linux armhf-linux + +# Guix binary tarballs. +BINARY_TARBALLS = \ + $(foreach system,$(SUPPORTED_SYSTEMS),guix-binary.$(system).tar.xz) + +# Systems supported by GuixSD. +GUIXSD_SUPPORTED_SYSTEMS ?= x86_64-linux i686-linux + +# Systems for which we build GuixSD VMs. +GUIXSD_VM_SYSTEMS ?= x86_64-linux + +# Prefix of the GuixSD installation image file name. +GUIXSD_IMAGE_BASE = guixsd-usb-install-$(PACKAGE_VERSION) + +# Prefix of the GuixSD VM image file name. +GUIXSD_VM_IMAGE_BASE = guixsd-vm-image-$(PACKAGE_VERSION) + +# Size of the installation image (for x86_64 typically). +GUIXSD_INSTALLATION_IMAGE_SIZE ?= 950MiB + +# Size of the VM image (for x86_64 typically). +GUIXSD_VM_IMAGE_SIZE ?= 2GiB + +# The release process works in several phases: +# +# 0. We assume the developer created a 'vX.Y' tag. +# 1. Build the source tarball. +# 2. Update the 'guix' package so that it corresponds to the 'vX.Y' tag. +# 3. Build the binary tarballs for that 'guix' package. +# 4. Update the 'guix' package again. +# 5. Build the GuixSD installation images. The images will run 'guix' +# corresponding to 'vX.Y' + 1 commit, and they will install 'vX.Y'. +# +# This 'release' target takes care of everything and copies the resulting +# files to $(releasedir). +# +# XXX: Depend on 'dist' rather than 'distcheck' to work around the Gettext +# issue described at . +release: dist + cd po; git checkout . + @if ! git diff-index --quiet HEAD; then \ + echo "There are uncommitted changes; stopping." >&2 ; \ + exit 1 ; \ + fi + $(MKDIR_P) "$(releasedir)" + rm -f "$(releasedir)"/* + mv $(SOURCE_TARBALLS) "$(releasedir)" + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-guix-package.scm \ + "`git rev-parse HEAD`" "$(PACKAGE_VERSION)" + git add $(top_srcdir)/gnu/packages/package-management.scm + git commit -m "gnu: guix: Update to $(PACKAGE_VERSION)." + rm -f $(BINARY_TARBALLS) + $(MAKE) $(BINARY_TARBALLS) + for system in $(SUPPORTED_SYSTEMS) ; do \ + mv "guix-binary.$$system.tar.xz" \ + "$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ; \ + done + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-guix-package.scm \ + "`git rev-parse HEAD`" + git add $(top_srcdir)/gnu/packages/package-management.scm + git commit -m "gnu: guix: Update to `git rev-parse HEAD | cut -c1-7`." + for system in $(GUIXSD_SUPPORTED_SYSTEMS) ; do \ + image=`$(top_builddir)/pre-inst-env \ + guix system disk-image \ + --system=$$system \ + --image-size=$(GUIXSD_INSTALLATION_IMAGE_SIZE) \ + gnu/system/install.scm` ; \ + if [ ! -f "$$image" ] ; then \ + echo "failed to produced GuixSD installation image for $$system" >&2 ; \ + exit 1 ; \ + fi ; \ + xz < "$$image" > "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" ; \ + mv "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" \ + "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz" ; \ + done + for system in $(GUIXSD_VM_SYSTEMS) ; do \ + image=`$(top_builddir)/pre-inst-env \ + guix system vm-image \ + --system=$$system \ + --image-size=$(GUIXSD_VM_IMAGE_SIZE) \ + gnu/system/examples/vm-image.tmpl` ; \ + if [ ! -f "$$image" ] ; then \ + echo "failed to produced GuixSD VM image for $$system" >&2 ; \ + exit 1 ; \ + fi ; \ + xz < "$$image" > "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz.tmp" ; \ + mv "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz.tmp" \ + "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz" ; \ + done + @echo + @echo "Congratulations! All the release files are now in $(releasedir)." + @echo + +update-guix-package: + git rev-parse HEAD + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-guix-package.scm \ + "`git rev-parse HEAD`" + +# Location of a checkout of . +# Package data from this checkout is used by 'update-NEWS.scm'. +GUIX_MAINTENANCE_DIRECTORY ?= $(top_srcdir)/../guix-maintenance + +update-NEWS: $(GOBJECTS) + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-NEWS.scm \ + $(top_srcdir)/NEWS "$(GUIX_MAINTENANCE_DIRECTORY)/data" + # Make sure we're not shipping a file that embeds a local /gnu/store file name. -assert-no-store-file-names: +assert-no-store-file-names: $(distdir)/ChangeLog $(AM_V_at)if grep -r --exclude=*.texi --exclude=*.info \ --exclude=*.info-[0-9] --exclude=*.dot \ --exclude=*.eps --exclude-dir=bootstrap \ @@ -540,9 +722,11 @@ hydra-jobs.scm: $(GOBJECTS) "$(top_srcdir)/build-aux/hydra/gnu-system.scm" > "$@.tmp" $(AM_V_at)mv "$@.tmp" "$@" -.PHONY: sync-descriptions gen-ChangeLog gen-AUTHORS clean-go make-go +.PHONY: gen-ChangeLog gen-AUTHORS gen-tarball-version .PHONY: assert-no-store-file-names assert-binaries-available .PHONY: assert-final-inputs-self-contained +.PHONY: clean-go make-go +.PHONY: update-guix-package update-NEWS release ## -------------- ## ## Silent rules. ##