Commit | Line | Data |
---|---|---|
233e7676 | 1 | # GNU Guix --- Functional package management for GNU |
47c0f92c | 2 | # Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org> |
97298ffa | 3 | # |
233e7676 | 4 | # This file is part of GNU Guix. |
97298ffa | 5 | # |
233e7676 | 6 | # GNU Guix is free software; you can redistribute it and/or modify it |
97298ffa LC |
7 | # under the terms of the GNU General Public License as published by |
8 | # the Free Software Foundation; either version 3 of the License, or (at | |
9 | # your option) any later version. | |
10 | # | |
233e7676 | 11 | # GNU Guix is distributed in the hope that it will be useful, but |
97298ffa LC |
12 | # WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | # GNU General Public License for more details. | |
15 | # | |
16 | # You should have received a copy of the GNU General Public License | |
233e7676 | 17 | # along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
97298ffa LC |
18 | |
19 | # | |
e49951eb | 20 | # Test the `guix build' command-line utility. |
97298ffa LC |
21 | # |
22 | ||
e49951eb | 23 | guix build --version |
97298ffa LC |
24 | |
25 | # Should fail. | |
e49951eb | 26 | if guix build -e +; |
912209ee LC |
27 | then false; else true; fi |
28 | ||
29 | # Should fail because this is a source-less package. | |
e49951eb | 30 | if guix build -e '(@ (gnu packages bootstrap) %bootstrap-glibc)' -S |
912209ee | 31 | then false; else true; fi |
97298ffa LC |
32 | |
33 | # Should pass. | |
af9142dc | 34 | guix build -e '(@@ (gnu packages bootstrap) %bootstrap-guile)' | \ |
97298ffa | 35 | grep -e '-guile-' |
e49951eb | 36 | guix build hello -d | \ |
97298ffa LC |
37 | grep -e '-hello-[0-9\.]\+\.drv$' |
38 | ||
2cdfe13d EB |
39 | # Check --sources option with its arguments |
40 | module_dir="t-guix-build-$$" | |
41 | mkdir "$module_dir" | |
42 | trap "rm -rf $module_dir" EXIT | |
43 | ||
44 | cat > "$module_dir/foo.scm"<<EOF | |
45 | (define-module (foo) | |
46 | #:use-module (guix packages) | |
47 | #:use-module (guix download) | |
48 | #:use-module (guix build-system trivial)) | |
49 | ||
50 | (define-public foo | |
51 | (package | |
52 | (name "foo") | |
53 | (version "42") | |
54 | (source (origin | |
55 | (method url-fetch) | |
56 | (uri "http://www.example.com/foo.tar.gz") | |
57 | (sha256 | |
58 | (base32 | |
59 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")))) | |
60 | (build-system trivial-build-system) | |
61 | (inputs | |
62 | (quasiquote (("bar" ,bar)))) | |
63 | (home-page "www.example.com") | |
64 | (synopsis "Dummy package") | |
65 | (description "foo is a dummy package for testing.") | |
66 | (license #f))) | |
67 | ||
68 | (define-public bar | |
69 | (package | |
70 | (name "bar") | |
71 | (version "9001") | |
72 | (source (origin | |
73 | (method url-fetch) | |
74 | (uri "http://www.example.com/bar.tar.gz") | |
75 | (sha256 | |
76 | (base32 | |
77 | "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy")))) | |
78 | (build-system trivial-build-system) | |
79 | (inputs | |
80 | (quasiquote | |
81 | (("data" ,(origin | |
82 | (method url-fetch) | |
83 | (uri "http://www.example.com/bar.dat") | |
84 | (sha256 | |
85 | (base32 | |
86 | "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"))))))) | |
87 | (home-page "www.example.com") | |
88 | (synopsis "Dummy package") | |
89 | (description "bar is a dummy package for testing.") | |
90 | (license #f))) | |
91 | EOF | |
92 | ||
93 | GUIX_PACKAGE_PATH="$module_dir" | |
94 | export GUIX_PACKAGE_PATH | |
95 | ||
96 | # foo.tar.gz | |
97 | guix build -d -S foo | |
98 | guix build -d -S foo | grep -e 'foo\.tar\.gz' | |
99 | ||
100 | guix build -d --sources=package foo | |
101 | guix build -d --sources=package foo | grep -e 'foo\.tar\.gz' | |
102 | ||
103 | # bar.tar.gz and bar.dat | |
104 | guix build -d --sources bar | |
105 | test `guix build -d --sources bar \ | |
106 | | grep -e 'bar\.tar\.gz' -e 'bar\.dat' \ | |
107 | | wc -l` -eq 2 | |
108 | ||
109 | # bar.tar.gz and bar.dat | |
110 | guix build -d --sources=all bar | |
111 | test `guix build -d --sources bar \ | |
112 | | grep -e 'bar\.tar\.gz' -e 'bar\.dat' \ | |
113 | | wc -l` -eq 2 | |
114 | ||
115 | # Should include foo.tar.gz, bar.tar.gz, and bar.dat | |
116 | guix build -d --sources=transitive foo | |
117 | test `guix build -d --sources=transitive foo \ | |
118 | | grep -e 'foo\.tar\.gz' -e 'bar\.tar\.gz' -e 'bar\.dat' \ | |
119 | | wc -l` -eq 3 | |
120 | ||
bf421152 | 121 | # Should all return valid log files. |
af9142dc LC |
122 | drv="`guix build -d -e '(@@ (gnu packages bootstrap) %bootstrap-guile)'`" |
123 | out="`guix build -e '(@@ (gnu packages bootstrap) %bootstrap-guile)'`" | |
bf421152 LC |
124 | log="`guix build --log-file $drv`" |
125 | echo "$log" | grep log/.*guile.*drv | |
126 | test -f "$log" | |
af9142dc | 127 | test "`guix build -e '(@@ (gnu packages bootstrap) %bootstrap-guile)' --log-file`" \ |
bf421152 LC |
128 | = "$log" |
129 | test "`guix build --log-file guile-bootstrap`" = "$log" | |
130 | test "`guix build --log-file $out`" = "$log" | |
131 | ||
97298ffa | 132 | # Should fail because the name/version combination could not be found. |
e49951eb | 133 | if guix build hello-0.0.1 -n; then false; else true; fi |
97298ffa LC |
134 | |
135 | # Keep a symlink to the result, registered as a root. | |
136 | result="t-result-$$" | |
e49951eb | 137 | guix build -r "$result" \ |
af9142dc | 138 | -e '(@@ (gnu packages bootstrap) %bootstrap-guile)' |
97298ffa LC |
139 | test -x "$result/bin/guile" |
140 | ||
141 | # Should fail, because $result already exists. | |
af9142dc | 142 | if guix build -r "$result" -e '(@@ (gnu packages bootstrap) %bootstrap-guile)' |
97298ffa LC |
143 | then false; else true; fi |
144 | ||
145 | rm -f "$result" | |
5401dd75 | 146 | |
e55ec43d LC |
147 | # Cross building. |
148 | guix build coreutils --target=mips64el-linux-gnu --dry-run --no-substitutes | |
149 | ||
47c0f92c LC |
150 | # Replacements. |
151 | drv1=`guix build guix --with-input=guile=guile-next -d` | |
152 | drv2=`guix build guix -d` | |
153 | test "$drv1" != "$drv2" | |
154 | ||
155 | drv1=`guix build guile -d` | |
156 | drv2=`guix build guile --with-input=gimp=ruby -d` | |
157 | test "$drv1" = "$drv2" | |
158 | ||
159 | if guix build guile --with-input=libunistring=something-really-silly | |
160 | then false; else true; fi | |
161 | ||
5401dd75 | 162 | # Parsing package names and versions. |
e49951eb MW |
163 | guix build -n time # PASS |
164 | guix build -n time-1.7 # PASS, version found | |
165 | if guix build -n time-3.2; # FAIL, version not found | |
5401dd75 | 166 | then false; else true; fi |
e49951eb | 167 | if guix build -n something-that-will-never-exist; # FAIL |
5401dd75 | 168 | then false; else true; fi |
ac5de156 LC |
169 | |
170 | # Invoking a monadic procedure. | |
171 | guix build -e "(begin | |
ada3df03 | 172 | (use-modules (guix gexp)) |
ac5de156 | 173 | (lambda () |
ada3df03 LC |
174 | (gexp->derivation \"test\" |
175 | (gexp (mkdir (ungexp output))))))" \ | |
ac5de156 | 176 | --dry-run |
56b82106 LC |
177 | |
178 | # Running a gexp. | |
179 | guix build -e '#~(mkdir #$output)' -d | |
180 | guix build -e '#~(mkdir #$output)' -d | grep 'gexp\.drv' | |
16eb115e | 181 | |
34a1783f DT |
182 | # Building from a package file. |
183 | cat > "$module_dir/package.scm"<<EOF | |
184 | (use-modules (gnu)) | |
185 | (use-package-modules bootstrap) | |
186 | ||
187 | %bootstrap-guile | |
188 | EOF | |
189 | guix build --file="$module_dir/package.scm" | |
190 | ||
191 | # Building from a monadic procedure file. | |
192 | cat > "$module_dir/proc.scm"<<EOF | |
193 | (use-modules (guix gexp)) | |
194 | (lambda () | |
195 | (gexp->derivation "test" | |
196 | (gexp (mkdir (ungexp output))))) | |
197 | EOF | |
198 | guix build --file="$module_dir/proc.scm" --dry-run | |
199 | ||
200 | # Building from a gexp file. | |
201 | cat > "$module_dir/gexp.scm"<<EOF | |
202 | (use-modules (guix gexp)) | |
203 | ||
204 | (gexp (mkdir (ungexp output))) | |
205 | EOF | |
206 | guix build --file="$module_dir/gexp.scm" -d | |
207 | guix build --file="$module_dir/gexp.scm" -d | grep 'gexp\.drv' | |
208 | ||
16eb115e | 209 | # Using 'GUIX_BUILD_OPTIONS'. |
442a6ff5 | 210 | GUIX_BUILD_OPTIONS="--dry-run --no-grafts" |
16eb115e DP |
211 | export GUIX_BUILD_OPTIONS |
212 | ||
213 | guix build emacs | |
214 | ||
215 | GUIX_BUILD_OPTIONS="--something-completely-crazy" | |
216 | if guix build emacs; | |
217 | then false; else true; fi |