X-Git-Url: http://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/09ec508a4c14d1bc09622d98f796548d79ab0552..54e70a70f2cb6336b02ed3ac4256f6b44da5c769:/tests/guix-package.sh diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 28c34dbc6a..1f955257be 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès +# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès # Copyright © 2013 Nikita Karetnikov # # This file is part of GNU Guix. @@ -33,12 +33,20 @@ profile="t-profile-$$" tmpfile="t-guix-package-file-$$" rm -f "$profile" "$tmpfile" -trap 'rm -f "$profile" "$profile-"[0-9]* "$tmpfile"; rm -rf "$module_dir" t-home-'"$$" EXIT +trap 'rm -f "$profile" "$profile.lock" "$profile-"[0-9]* "$tmpfile"; rm -rf "$module_dir" t-home-'"$$" EXIT # Use `-e' with a non-package expression. if guix package --bootstrap -e +; then false; else true; fi +# Install a store item and make sure the version and output in the manifest +# are correct. +guix package --bootstrap -p "$profile" -i `guix build guile-bootstrap` +test "`guix package -A guile-bootstrap | cut -f 1-2`" \ + = "`guix package -p "$profile" -I | cut -f 1-2`" +test "`guix package -p "$profile" -I | cut -f 3`" = "out" +rm "$profile" + guix package --bootstrap -p "$profile" -i guile-bootstrap test -L "$profile" && test -L "$profile-1-link" test -f "$profile/bin/guile" @@ -52,6 +60,14 @@ test -L "$profile" && test -L "$profile-1-link" ! test -f "$profile-2-link" test -f "$profile/bin/guile" +# Collisions are properly flagged (in this case, 'g-wrap' propagates +# guile@2.2, which conflicts with guile@2.0.) +if guix package --bootstrap -n -p "$profile" -i g-wrap guile@2.0 +then false; else true; fi + +guix package --bootstrap -n -p "$profile" -i g-wrap guile@2.0 \ + --allow-collisions + # No search path env. var. here. guix package -p "$profile" --search-paths guix package -p "$profile" --search-paths | grep '^export PATH=' @@ -69,7 +85,7 @@ then false; else true; fi guix package -p "$profile" --delete-generations=0 # Make sure multiple arguments to -i works. -guix package --bootstrap -i guile gcc -p "$profile" -n +guix package --bootstrap -i guile zile -p "$profile" -n # Make sure the `:' syntax works. guix package --bootstrap -i "glibc:debug" -p "$profile" -n @@ -81,6 +97,11 @@ then false; else true; fi if guix package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile"; then false; else true; fi +# Make sure we get an error when trying to remove something that's not +# installed. +if guix package --bootstrap -r something-not-installed -p "$profile"; +then false; else true; fi + # Check whether `--list-available' returns something sensible. guix package -p "$profile" -A 'gui.*e' | grep guile @@ -90,6 +111,10 @@ guix package --show=guile | grep "^name: guile" # Ensure `--show' doesn't fail for packages with non-package inputs. guix package --show=texlive +# Fail for non-existent packages or package/version pairs. +if guix package --show=does-not-exist; then false; else true; fi +if guix package --show=emacs@42; then false; else true; fi + # Search. LC_MESSAGES=C export LC_MESSAGES @@ -110,6 +135,22 @@ grep '^name: gnubg' "$tmpfile" rm -f "$tmpfile" +# Make sure deprecated packages don't show up: . +mkdir "$module_dir" +cat > "$module_dir/foo.scm"< /dev/null @@ -140,6 +181,29 @@ rm "$profile" "$profile"-[0-9]-link guix gc -d "$real_profile" [ ! -d "$real_profile" ] +# Package transformations. + +# Make sure we get the right version number when using '--with-source'. +mkdir "$module_dir" +emacs_tarball="$module_dir/emacs-42.5.9rc7.tar.gz" +touch "$emacs_tarball" +guix package -p "$profile" -i emacs --with-source="$emacs_tarball" -n \ + 2> "$tmpfile" +grep -E 'emacs[[:blank:]]+42\.5\.9rc7' "$tmpfile" +rm "$emacs_tarball" "$tmpfile" +rmdir "$module_dir" + +# Profiles with a relative file name. Make sure we don't create dangling +# symlinks--see bug report at +# . +mkdir -p "$module_dir/foo" +( cd "$module_dir" ; \ + guix package --bootstrap -i guile-bootstrap -p foo/prof ) +test -f "$module_dir/foo/prof/bin/guile" +rm "$module_dir/foo"/* +rmdir "$module_dir/foo" +rmdir "$module_dir" + # # Try with the default profile. # @@ -169,7 +233,7 @@ do guix package --bootstrap --roll-back ! test -f "$HOME/.guix-profile/bin" ! test -f "$HOME/.guix-profile/lib" - test "`readlink "$default_profile"`" = "$default_profile-0-link" + test "`readlink "$default_profile"`" = "`basename $default_profile-0-link`" done # Check whether '-p ~/.guix-profile' makes any difference. @@ -215,6 +279,20 @@ export GUIX_PACKAGE_PATH guix package -A emacs-foo-bar | grep 42 guix package -i emacs-foo-bar@42 -n +# Make sure GUIX_PACKAGE_PATH/'-L' takes precedence in case of duplicate packages. +cat > "$module_dir/bar.scm"<&1 | grep choosing.*bar.scm +( unset GUIX_PACKAGE_PATH; \ + guix package -i hello -n -L "$module_dir" 2>&1 | grep choosing.*bar.scm ) + # Make sure patches that live under $GUIX_PACKAGE_PATH are found. cat > "$module_dir/emacs.patch"< "$module_dir/package.scm"< "$module_dir/package.scm"<. +guix package --bootstrap -p "$profile" -i guile-bootstrap + +cat > "$module_dir/foo.scm"< "$module_dir/manifest2.scm"<manifest (list p)) +EOF +guix package --bootstrap \ + -m "$module_dir/manifest.scm" -m "$module_dir/manifest2.scm" +guix package -I | grep guile +guix package -I | grep eliug +test `guix package -I | wc -l` -eq 2 +guix package --rollback --bootstrap + +# Applying a manifest file with inferior packages. +cat > "$module_dir/manifest.scm"<manifest (list guile))) +EOF +guix package --bootstrap -m "$module_dir/manifest.scm" +guix package -I | grep guile +test `guix package -I | wc -l` -eq 1 # Error reporting. cat > "$module_dir/manifest.scm"< "$module_dir/foo.scm"< /tmp/out +test "`guix package -L "$module_dir" -s dummy-output | grep ^name:`" = "name: dummy-package" +rm -rf "$module_dir" + +# Make sure we can see user profiles. +guix package --list-profiles | grep "$profile" +guix package --list-profiles | grep '\.guix-profile' + +# Make sure we can properly lock a profile. +mkdir "$module_dir" +echo "(open-output-file \"$module_dir/ready\") (sleep 60)" \ + > "$module_dir/manifest.scm" +guix package -m "$module_dir/manifest.scm" -p "$module_dir/profile" & +pid=$! +while [ ! -f "$module_dir/ready" ] ; do sleep 0.5 ; done +if guix install emacs -p "$module_dir/profile"; then kill $pid; false; else true; fi +kill $pid