tests: Move 'guix package' tests that require networking to a separate file.
[jackhill/guix/guix.git] / Makefile.am
index 1d68e65..d54e281 100644 (file)
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2013 Andreas Enge <andreas@enge.fr>
 #
 # This file is part of GNU Guix.
@@ -27,59 +27,117 @@ nodist_noinst_SCRIPTS =                            \
 include gnu-system.am
 
 MODULES =                                      \
-  guix/scripts/build.scm                       \
-  guix/scripts/download.scm                    \
-  guix/scripts/import.scm                      \
-  guix/scripts/package.scm                     \
-  guix/scripts/gc.scm                          \
-  guix/scripts/hash.scm                                \
-  guix/scripts/pull.scm                                \
-  guix/scripts/substitute-binary.scm           \
-  guix/scripts/refresh.scm                     \
   guix/base32.scm                              \
+  guix/base64.scm                              \
   guix/records.scm                             \
+  guix/gcrypt.scm                              \
   guix/hash.scm                                        \
+  guix/pk-crypto.scm                           \
+  guix/pki.scm                                 \
   guix/utils.scm                               \
+  guix/sets.scm                                        \
+  guix/download.scm                            \
+  guix/git-download.scm                                \
+  guix/monads.scm                              \
+  guix/monad-repl.scm                          \
+  guix/gexp.scm                                        \
+  guix/profiles.scm                            \
   guix/serialization.scm                       \
   guix/nar.scm                                 \
   guix/derivations.scm                         \
-  guix/download.scm                            \
   guix/gnu-maintenance.scm                     \
   guix/licenses.scm                            \
   guix/build-system.scm                                \
   guix/build-system/cmake.scm                  \
+  guix/build-system/glib-or-gtk.scm            \
   guix/build-system/gnu.scm                    \
   guix/build-system/perl.scm                   \
   guix/build-system/python.scm                 \
+  guix/build-system/waf.scm                    \
+  guix/build-system/ruby.scm                   \
   guix/build-system/trivial.scm                        \
   guix/ftp-client.scm                          \
   guix/http-client.scm                         \
   guix/gnupg.scm                               \
+  guix/elf.scm                                 \
   guix/store.scm                               \
+  guix/cvs-download.scm                                \
+  guix/svn-download.scm                                \
   guix/ui.scm                                  \
   guix/build/download.scm                      \
   guix/build/cmake-build-system.scm            \
+  guix/build/git.scm                           \
+  guix/build/glib-or-gtk-build-system.scm      \
   guix/build/gnu-build-system.scm              \
   guix/build/gnu-dist.scm                      \
-  guix/build/linux-initrd.scm                  \
   guix/build/perl-build-system.scm             \
   guix/build/python-build-system.scm           \
+  guix/build/ruby-build-system.scm             \
+  guix/build/waf-build-system.scm              \
+  guix/build/store-copy.scm                    \
   guix/build/utils.scm                         \
   guix/build/union.scm                         \
+  guix/build/pull.scm                          \
   guix/build/rpath.scm                         \
+  guix/build/cvs.scm                           \
+  guix/build/svn.scm                           \
+  guix/build/syscalls.scm                      \
+  guix/build/gremlin.scm                       \
+  guix/build/emacs-utils.scm                   \
+  guix/build/graft.scm                         \
   guix/packages.scm                            \
-  guix/snix.scm                                        \
+  guix/import/utils.scm                                \
+  guix/import/gnu.scm                          \
+  guix/import/snix.scm                         \
+  guix/scripts/download.scm                    \
+  guix/scripts/build.scm                       \
+  guix/scripts/archive.scm                     \
+  guix/scripts/import.scm                      \
+  guix/scripts/package.scm                     \
+  guix/scripts/gc.scm                          \
+  guix/scripts/hash.scm                                \
+  guix/scripts/pull.scm                                \
+  guix/scripts/substitute.scm                  \
+  guix/scripts/authenticate.scm                        \
+  guix/scripts/refresh.scm                     \
+  guix/scripts/system.scm                      \
+  guix/scripts/lint.scm                                \
+  guix/scripts/import/gnu.scm                  \
+  guix/scripts/import/nix.scm                  \
+  guix/scripts/environment.scm                 \
+  guix/scripts/publish.scm                     \
   guix.scm                                     \
   $(GNU_SYSTEM_MODULES)
 
+if BUILD_DAEMON_OFFLOAD
+
+MODULES +=                                     \
+  guix/scripts/offload.scm
+
+endif BUILD_DAEMON_OFFLOAD
+
+# Internal module with test suite support.
+dist_noinst_DATA = guix/tests.scm
+
 # Because of the autoload hack in (guix build download), we must build it
 # first to avoid errors on systems where (gnutls) is unavailable.
 guix/scripts/download.go: guix/build/download.go
+guix/download.go: guix/build/download.go
+
+# Linux-Libre configurations.
+KCONFIGS =                                     \
+  gnu/packages/linux-libre-i686.conf           \
+  gnu/packages/linux-libre-x86_64.conf
 
+# Templates, examples.
+EXAMPLES =                                     \
+  gnu/system/os-config.tmpl
 
-GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go
+GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go guix/tests.go
 
-nobase_dist_guilemodule_DATA = $(MODULES)
+nobase_dist_guilemodule_DATA =                  \
+  $(MODULES) $(KCONFIGS) $(EXAMPLES)            \
+  $(MISC_DISTRO_FILES)
 nobase_nodist_guilemodule_DATA = $(GOBJECTS) guix/config.scm
 
 # Do we need to provide our own non-broken (srfi srfi-37) module?
@@ -94,10 +152,19 @@ srfi/srfi-37.scm: srfi/srfi-37.scm.in
 
 endif INSTALL_SRFI_37
 
+# Handy way to remove the .go files without removing all the rest.
+clean-go:
+       -$(RM) -f $(GOBJECTS)
+
 
 SCM_TESTS =                                    \
   tests/base32.scm                             \
+  tests/base64.scm                             \
   tests/hash.scm                               \
+  tests/pk-crypto.scm                          \
+  tests/pki.scm                                        \
+  tests/sets.scm                               \
+  tests/substitute.scm                         \
   tests/builders.scm                           \
   tests/derivations.scm                                \
   tests/ui.scm                                 \
@@ -107,15 +174,49 @@ SCM_TESTS =                                       \
   tests/packages.scm                           \
   tests/snix.scm                               \
   tests/store.scm                              \
+  tests/monads.scm                             \
+  tests/gexp.scm                               \
   tests/nar.scm                                        \
-  tests/union.scm
+  tests/union.scm                              \
+  tests/profiles.scm                           \
+  tests/syscalls.scm                           \
+  tests/gremlin.scm                            \
+  tests/lint.scm                               \
+  tests/publish.scm
+
+if HAVE_GUILE_JSON
+
+MODULES +=                                     \
+  guix/import/json.scm                         \
+  guix/import/pypi.scm                         \
+  guix/scripts/import/pypi.scm                 \
+  guix/import/cpan.scm                         \
+  guix/scripts/import/cpan.scm
+
+SCM_TESTS +=                                   \
+  tests/pypi.scm                               \
+  tests/cpan.scm
+
+endif
 
 SH_TESTS =                                     \
   tests/guix-build.sh                          \
   tests/guix-download.sh                       \
   tests/guix-gc.sh                             \
   tests/guix-hash.sh                           \
-  tests/guix-package.sh
+  tests/guix-package.sh                                \
+  tests/guix-package-net.sh                    \
+  tests/guix-system.sh                         \
+  tests/guix-archive.sh                                \
+  tests/guix-authenticate.sh                   \
+  tests/guix-lint.sh
+
+if BUILD_DAEMON
+
+SH_TESTS += tests/guix-register.sh
+
+endif BUILD_DAEMON
+
 
 TESTS = $(SCM_TESTS) $(SH_TESTS)
 
@@ -136,27 +237,41 @@ tests/guix-gc.log:                                                        \
   $(patsubst %.sh,%.log,$(filter-out tests/guix-gc.sh,$(SH_TESTS)))    \
   $(SCM_TESTS:%.scm=%.log)
 
-
-EXTRA_DIST =                                   \
-  HACKING                                      \
-  ROADMAP                                      \
-  TODO                                         \
-  .dir-locals.el                               \
-  build-aux/hydra/gnu-system.scm               \
-  build-aux/hydra/guix.scm                     \
-  build-aux/check-available-binaries.scm       \
-  build-aux/download.scm                       \
-  build-aux/list-packages.scm                  \
-  build-aux/sync-synopses.scm                  \
-  srfi/srfi-37.scm.in                          \
-  srfi/srfi-64.scm                             \
-  srfi/srfi-64.upstream.scm                    \
-  tests/test.drv                               \
-  build-aux/config.rpath                       \
-  bootstrap                                    \
-  release.nix                                  \
+# Public key used to sign substitutes from hydra.gnu.org.
+dist_pkgdata_DATA = hydra.gnu.org.pub
+
+EXTRA_DIST =                                           \
+  HACKING                                              \
+  ROADMAP                                              \
+  TODO                                                 \
+  .dir-locals.el                                       \
+  build-aux/build-self.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/list-packages.scm                          \
+  srfi/srfi-37.scm.in                                  \
+  srfi/srfi-64.scm                                     \
+  srfi/srfi-64.upstream.scm                            \
+  tests/test.drv                                       \
+  tests/signing-key.pub                                        \
+  tests/signing-key.sec                                        \
+  build-aux/config.rpath                               \
+  bootstrap                                            \
+  release.nix                                          \
   $(TESTS)
 
+if !BUILD_DAEMON_OFFLOAD
+
+EXTRA_DIST +=                                  \
+  guix/scripts/offload.scm
+
+endif !BUILD_DAEMON_OFFLOAD
+
+
 CLEANFILES =                                   \
   $(GOBJECTS)                                  \
   $(SCM_TESTS:tests/%.scm=%.log)
@@ -165,10 +280,18 @@ AM_V_GUILEC = $(AM_V_GUILEC_$(V))
 AM_V_GUILEC_ = $(AM_V_GUILEC_$(AM_DEFAULT_VERBOSITY))
 AM_V_GUILEC_0 = @echo "  GUILEC" $@;
 
+# Unset 'GUILE_LOAD_COMPILED_PATH' altogether while compiling.  Otherwise, if
+# $GUILE_LOAD_COMPILED_PATH contains $(moduledir), we may find .go files in
+# there that are newer than the local .scm files (for instance because the
+# user ran 'make install' recently).  When that happens, we end up loading
+# those previously-installed .go files, which may be stale, thereby breaking
+# the whole thing.
+#
 # XXX: Use the C locale for when Guile lacks
 # <http://git.sv.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=e2c6bf3866d1186c60bacfbd4fe5037087ee5e3f>.
 .scm.go:
        $(AM_V_GUILEC)$(MKDIR_P) `dirname "$@"` ;                       \
+       unset GUILE_LOAD_COMPILED_PATH ;                                \
        LC_ALL=C                                                        \
        $(top_builddir)/pre-inst-env                                    \
        $(GUILD) compile -L "$(top_builddir)" -L "$(top_srcdir)"        \
@@ -186,7 +309,17 @@ SUFFIXES = .go
 guix_install_go_files = install-nobase_nodist_guilemoduleDATA
 $(guix_install_go_files): install-nobase_dist_guilemoduleDATA
 
-SUBDIRS = doc po
+# 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
+# special treatment.
+install-data-hook: set-bootstrap-executable-permissions
+       touch "$(DESTDIR)$(guilemoduledir)/guix/config.go"
+
+
+SUBDIRS = po/guix po/packages
+BUILT_SOURCES =
+
+include doc.am
 
 if BUILD_DAEMON
 
@@ -197,15 +330,20 @@ endif BUILD_DAEMON
 ACLOCAL_AMFLAGS = -I m4
 AM_DISTCHECK_CONFIGURE_FLAGS =                 \
   --with-libgcrypt-prefix="$(LIBGCRYPT_PREFIX)"        \
+  --with-libgcrypt-libdir="$(LIBGCRYPT_LIBDIR)"        \
   --with-nix-prefix="$(NIX_PREFIX)"            \
   --enable-daemon
 
-dist-hook: sync-synopses gen-ChangeLog assert-no-store-file-names
-distcheck-hook: assert-binaries-available
+dist_emacsui_DATA = emacs/guix-main.scm
+nodist_emacsui_DATA = emacs/guix-helper.scm
+include emacs.am
+
+dist-hook: sync-descriptions gen-ChangeLog assert-no-store-file-names
+distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
 
-sync-synopses:
-       -$(top_builddir)/pre-inst-env $(GUILE)          \
-          $(top_srcdir)/build-aux/sync-synopses.scm
+sync-descriptions:
+       -GUIX_PACKAGE_PATH= \
+        $(top_builddir)/pre-inst-env guix lint --checkers=gnu-description
 
 gen-ChangeLog:
        if test -d .git; then                           \
@@ -215,7 +353,7 @@ gen-ChangeLog:
          mv $(distdir)/cl-t $(distdir)/ChangeLog;      \
        fi
 
-# Make sure we're not shipping a file that embeds a local /nix/store file name.
+# Make sure we're not shipping a file that embeds a local /gnu/store file name.
 assert-no-store-file-names:
        if grep -r --exclude=*.texi --exclude=*.info                            \
             "$(storedir)/[a-z0-9]{32}-" $(distdir) ;                           \
@@ -229,5 +367,11 @@ assert-binaries-available:
        $(top_builddir)/pre-inst-env "$(GUILE)"                         \
          "$(top_srcdir)/build-aux/check-available-binaries.scm"
 
-.PHONY: sync-synopses gen-ChangeLog
+# Make sure the final inputs don't refer to bootstrap tools.
+assert-final-inputs-self-contained:
+       $(top_builddir)/pre-inst-env "$(GUILE)"                         \
+         "$(top_srcdir)/build-aux/check-final-inputs-self-contained.scm"
+
+.PHONY: sync-descriptions gen-ChangeLog clean-go
 .PHONY: assert-no-store-file-names assert-binaries-available
+.PHONY: assert-final-inputs-self-contained