From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dylan Jeffers Subject: bug#24108: guix make tests failure Date: Sat, 30 Jul 2016 18:53:05 -0700 Message-ID: <20160730185305.0c8cfe59@openmailbox.org> References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> <20160730104312.2166ffa5@openmailbox.org> <87bn1ebynp.fsf@gnu.org> <20160730174027.0551e855@openmailbox.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/RfwZ3bl.=e6TtpTaWZdR65C" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45587) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTfyJ-000751-HE for bug-guix@gnu.org; Sat, 30 Jul 2016 21:55:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTfy2-00048W-P1 for bug-guix@gnu.org; Sat, 30 Jul 2016 21:55:18 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:54585) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTfy2-00048S-GV for bug-guix@gnu.org; Sat, 30 Jul 2016 21:55:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bTfy2-0006E5-3L for bug-guix@gnu.org; Sat, 30 Jul 2016 21:55:02 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <20160730174027.0551e855@openmailbox.org> List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 24108@debbugs.gnu.org --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Sat, 30 Jul 2016 17:40:27 -0700 Dylan Jeffers wrote: > On Sat, 30 Jul 2016 23:31:54 +0200 > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: >=20 > > Dylan Jeffers skribis: > > =20 > > > On Sat, 30 Jul 2016 15:07:25 +0200 > > > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: =20 > >=20 > > [...] > > =20 > > >> > test-name: clone > > >> > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > > >> > source: > > >> > + (test-assert > > >> > + "clone" > > >> > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > > >> > + (0 (primitive-exit 42)) > > >> > + (pid (and (not (equal? > > >> > + (readlink (user-namespace pid)) > > >> > + (readlink (user-namespace > > >> > (getpid))))) > > >> > + (match (waitpid pid) > > >> > + ((_ . status) (=3D 42 > > >> > (status:exit-val status)))))))) actual-value: #f > > >> > actual-error: > > >> > + (system-error > > >> > + "clone" > > >> > + "~d: ~A" > > >> > + (268435473 "Operation not permitted") > > >> > + (1)) > > >> > result: FAIL =20 > > >>=20 > > >> What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It s= eems this > > >> kernel does not support namespaces. > > >>=20 > > >> Thanks, > > >> Ludo=E2=80=99. =20 > > > > > > Hi Ludo, > > > > > > Thanks for getting back so quick. > > > Output of uname -srv: Linux 4.6.4-gnu-201607192040-1-grsec #1 SMP > > > PREEMPT Wed Jul 20 15:37:34 UYT 2016 =20 > >=20 > > These tests are skipped when user namespaces are not supported, as > > per this condition: > >=20 > > (define perform-container-tests? > > (and (user-namespace-supported?) > > (unprivileged-user-namespace-supported?))) > >=20 > > =E2=80=A6 which is true iff (1) /proc/self/ns/user exists, and (2) > > /proc/sys/kernel/unprivileged_userns_clone does not exist, or it > > exists and contains =E2=80=9C1=E2=80=9D. > >=20 > > Do these files exist on this system? =20 >=20 > (1) /proc/self/ns/user exists, and > (2) /proc/sys/kernel/unpriviledged_userns_clone D.N.E >=20 > Ideas on the best approach to allow the build to succeed? >=20 > I also have had issues with qemu, so it makes sense that vm/container > stuff both have issues. I have a feeling its due to the > grsec kernel. > https://wiki.archlinux.org/index.php/Grsecurity_Patchset talks a > bit about userspace/namespace hardening + issues with xen and > virtbox. Going to reboot with an lts kernel and try again. Will post > update... >=20 > Best, > Dylan >=20 > Best, > Dylan After changing kernel, and stopping paxd.service, build still failed :( It looks like the failed tests are different though (see attachment) Dylan --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/x-log Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=config.log This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Guix configure 0.10.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure ## --------- ## ## Platform. ## ## --------- ## hostname = freetop uname -m = x86_64 uname -r = 4.6.4-gnu-1 uname -s = Linux uname -v = #1 SMP PREEMPT Wed Jul 20 05:58:11 UYT 2016 /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin PATH: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/sbin PATH: /usr/local/sbin PATH: /usr/local/bin PATH: /usr/bin PATH: /usr/lib/jvm/default/bin PATH: /usr/bin/site_perl PATH: /usr/bin/vendor_perl PATH: /usr/bin/core_perl PATH: /home/sapientech/.guix-profile/bin PATH: /home/sapientech/.guix-profile/sbin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2574: checking for a BSD-compatible install configure:2642: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/install -c configure:2653: checking whether build environment is sane configure:2708: result: yes configure:2859: checking for a thread-safe mkdir -p configure:2898: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p configure:2905: checking for gawk configure:2921: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gawk configure:2932: result: gawk configure:2943: checking whether make sets $(MAKE) configure:2965: result: yes configure:2994: checking whether make supports nested variables configure:3011: result: yes configure:3150: checking whether make supports nested variables configure:3167: result: yes configure:3194: checking for style of include used by make configure:3222: result: GNU configure:3293: checking for gcc configure:3309: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gcc configure:3320: result: gcc configure:3549: checking for C compiler version configure:3558: gcc --version >&5 gcc (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3569: $? = 0 configure:3558: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/gnu/store/sjvcirri2bg7q5hlrkaywhmxllik0cfx-gcc-4.9.3/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 4.9.3 (GCC) configure:3569: $? = 0 configure:3558: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:3569: $? = 1 configure:3558: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:3569: $? = 1 configure:3589: checking whether the C compiler works configure:3611: gcc conftest.c >&5 configure:3615: $? = 0 configure:3663: result: yes configure:3666: checking for C compiler default output file name configure:3668: result: a.out configure:3674: checking for suffix of executables configure:3681: gcc -o conftest conftest.c >&5 configure:3685: $? = 0 configure:3707: result: configure:3729: checking whether we are cross compiling configure:3737: gcc -o conftest conftest.c >&5 configure:3741: $? = 0 configure:3748: ./conftest configure:3752: $? = 0 configure:3767: result: no configure:3772: checking for suffix of object files configure:3794: gcc -c conftest.c >&5 configure:3798: $? = 0 configure:3819: result: o configure:3823: checking whether we are using the GNU C compiler configure:3842: gcc -c conftest.c >&5 configure:3842: $? = 0 configure:3851: result: yes configure:3860: checking whether gcc accepts -g configure:3880: gcc -c -g conftest.c >&5 configure:3880: $? = 0 configure:3921: result: yes configure:3938: checking for gcc option to accept ISO C89 configure:4001: gcc -c -g -O2 conftest.c >&5 configure:4001: $? = 0 configure:4014: result: none needed configure:4039: checking whether gcc understands -c and -o together configure:4061: gcc -c conftest.c -o conftest2.o configure:4064: $? = 0 configure:4061: gcc -c conftest.c -o conftest2.o configure:4064: $? = 0 configure:4076: result: yes configure:4095: checking dependency style of gcc configure:4206: result: gcc3 configure:4227: checking how to run the C preprocessor configure:4258: gcc -E conftest.c configure:4258: $? = 0 configure:4272: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:4272: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | /* end confdefs.h. */ | #include configure:4297: result: gcc -E configure:4317: gcc -E conftest.c configure:4317: $? = 0 configure:4331: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:4331: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | /* end confdefs.h. */ | #include configure:4360: checking for grep that handles long lines and -e configure:4418: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep configure:4423: checking for egrep configure:4485: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E configure:4490: checking for ANSI C header files configure:4510: gcc -c -g -O2 conftest.c >&5 configure:4510: $? = 0 configure:4583: gcc -o conftest -g -O2 conftest.c >&5 configure:4583: $? = 0 configure:4583: ./conftest configure:4583: $? = 0 configure:4594: result: yes configure:4607: checking for sys/types.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for sys/stat.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for stdlib.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for string.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for memory.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for strings.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for inttypes.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for stdint.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for unistd.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4620: checking minix/config.h usability configure:4620: gcc -c -g -O2 conftest.c >&5 conftest.c:54:26: fatal error: minix/config.h: No such file or directory #include ^ compilation terminated. configure:4620: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include | #ifdef HAVE_SYS_TYPES_H | # include | #endif | #ifdef HAVE_SYS_STAT_H | # include | #endif | #ifdef STDC_HEADERS | # include | # include | #else | # ifdef HAVE_STDLIB_H | # include | # endif | #endif | #ifdef HAVE_STRING_H | # if !defined STDC_HEADERS && defined HAVE_MEMORY_H | # include | # endif | # include | #endif | #ifdef HAVE_STRINGS_H | # include | #endif | #ifdef HAVE_INTTYPES_H | # include | #endif | #ifdef HAVE_STDINT_H | # include | #endif | #ifdef HAVE_UNISTD_H | # include | #endif | #include configure:4620: result: no configure:4620: checking minix/config.h presence configure:4620: gcc -E conftest.c conftest.c:21:26: fatal error: minix/config.h: No such file or directory #include ^ compilation terminated. configure:4620: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include configure:4620: result: no configure:4620: checking for minix/config.h configure:4620: result: no configure:4641: checking whether it is safe to define __EXTENSIONS__ configure:4659: gcc -c -g -O2 conftest.c >&5 configure:4659: $? = 0 configure:4666: result: yes configure:4689: checking whether NLS is requested configure:4698: result: yes configure:4739: checking for msgfmt configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt... 0 translated messages. configure:4771: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt configure:4780: checking for gmsgfmt configure:4811: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt configure:4862: checking for xgettext configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext... /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C configure:4894: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext configure:4940: checking for msgmerge configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge... configure:4971: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge configure:5008: checking build system type configure:5022: result: x86_64-unknown-linux-gnu configure:5042: checking host system type configure:5055: result: x86_64-unknown-linux-gnu configure:5099: checking for ld used by GCC configure:5163: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld configure:5170: checking if the linker (/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld) is GNU ld configure:5183: result: yes configure:5190: checking for shared library run path origin configure:5203: result: done configure:5775: checking for CFPreferencesCopyAppValue configure:5793: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 conftest.c:26:42: fatal error: CoreFoundation/CFPreferences.h: No such file or directory #include ^ compilation terminated. configure:5793: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | /* end confdefs.h. */ | #include | int | main () | { | CFPreferencesCopyAppValue(NULL, NULL) | ; | return 0; | } configure:5802: result: no configure:5809: checking for CFLocaleCopyCurrent configure:5827: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 conftest.c:26:37: fatal error: CoreFoundation/CFLocale.h: No such file or directory #include ^ compilation terminated. configure:5827: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | /* end confdefs.h. */ | #include | int | main () | { | CFLocaleCopyCurrent(); | ; | return 0; | } configure:5836: result: no configure:5885: checking for GNU gettext in libc configure:5905: gcc -o conftest -g -O2 conftest.c >&5 configure:5905: $? = 0 configure:5914: result: yes configure:6705: checking whether to use NLS configure:6707: result: yes configure:6710: checking where the gettext function comes from configure:6721: result: libc configure:6787: checking for sed configure:6805: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed configure:6817: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed configure:6867: checking for the Guix system type configure:6869: result: x86_64-linux configure:6923: checking for the store directory configure:6925: result: /gnu/store configure:6947: checking the length of the installed socket file name configure:6954: result: 40 configure:6958: checking for unit test root directory configure:6965: result: /home/sapientech/Dev/guix/guix_wip/test-tmp configure:6970: checking the length of the socket file name used in tests configure:6977: result: 75 configure:6981: checking the length of a typical hash bang line configure:6988: result: 73 configure:6993: checking the length of a hash bang line used in tests configure:7000: result: 112 configure:7094: checking for pkg-config configure:7112: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config configure:7124: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config configure:7149: checking pkg-config is at least version 0.9.0 configure:7152: result: yes configure:7162: checking for GUILE configure:7169: $PKG_CONFIG --exists --print-errors "guile-2.0 >= 2.0.7" configure:7172: $? = 0 configure:7186: $PKG_CONFIG --exists --print-errors "guile-2.0 >= 2.0.7" configure:7189: $? = 0 configure:7247: result: yes configure:7253: checking for guile configure:7271: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7283: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7293: checking for guild configure:7311: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7323: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7337: checking for guile configure:7367: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7396: checking for Guile version >= 2.0 configure:7417: result: 2.0.11 configure:7422: checking for guild configure:7452: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7464: checking for guile-config configure:7482: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config configure:7494: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config configure:7549: checking if (json) is available configure:7556: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'regex' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'posix' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'socket' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'net-db' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'threads' configure:7576: result: yes configure:7587: checking whether (srfi srfi-37) is affected by http://bugs.gnu.org/13176 configure:7603: result: no configure:7616: checking whether libc provides 'mount' configure:7631: result: yes configure:7645: checking for gzip configure:7663: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip configure:7675: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip configure:7685: checking for bzip2 configure:7703: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 configure:7715: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 configure:7725: checking for xz configure:7743: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz configure:7755: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz configure:7783: checking for nix-instantiate configure:7816: result: no configure:7823: checking for nix-hash configure:7856: result: no configure:7881: checking for Nixpkgs source tree configure:7888: result: not found configure:7932: checking for libgcrypt-config configure:7950: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config configure:7962: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config configure:7970: checking libgcrypt's library directory configure:7981: result: /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib configure:7993: checking for libgcrypt shared library name configure:7995: result: /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt configure:8001: checking whether /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt can be dynamically loaded configure:8016: result: yes configure:8025: checking zlib's library directory configure:8032: result: /gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib configure:8041: checking for zlib's shared library name configure:8043: result: /gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib/libz configure:8134: checking whether to build daemon configure:8136: result: yes configure:8197: checking for g++ configure:8213: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/g++ configure:8224: result: g++ configure:8251: checking for C++ compiler version configure:8260: g++ --version >&5 g++ (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:8271: $? = 0 configure:8260: g++ -v >&5 Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/gnu/store/sjvcirri2bg7q5hlrkaywhmxllik0cfx-gcc-4.9.3/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 4.9.3 (GCC) configure:8271: $? = 0 configure:8260: g++ -V >&5 g++: error: unrecognized command line option '-V' g++: fatal error: no input files compilation terminated. configure:8271: $? = 1 configure:8260: g++ -qversion >&5 g++: error: unrecognized command line option '-qversion' g++: fatal error: no input files compilation terminated. configure:8271: $? = 1 configure:8275: checking whether we are using the GNU C++ compiler configure:8294: g++ -c conftest.cpp >&5 configure:8294: $? = 0 configure:8303: result: yes configure:8312: checking whether g++ accepts -g configure:8332: g++ -c -g conftest.cpp >&5 configure:8332: $? = 0 configure:8373: result: yes configure:8398: checking dependency style of g++ configure:8509: result: gcc3 configure:8537: checking whether g++ supports C++11 configure:8561: g++ -c -std=c++11 -g -O2 conftest.cpp >&5 configure:8561: $? = 0 configure:8570: result: yes configure:8621: checking for ranlib configure:8637: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ranlib configure:8648: result: ranlib configure:8680: checking for special C compiler options needed for large files configure:8725: result: no configure:8731: checking for _FILE_OFFSET_BITS value needed for large files configure:8756: g++ -c -g -O2 conftest.cpp >&5 configure:8756: $? = 0 configure:8788: result: no configure:8874: checking for BZ2_bzWriteOpen in -lbz2 configure:8899: g++ -o conftest -g -O2 conftest.cpp -lbz2 >&5 configure:8899: $? = 0 configure:8908: result: yes configure:8921: checking how to run the C++ preprocessor configure:8948: g++ -E conftest.cpp configure:8948: $? = 0 configure:8962: g++ -E conftest.cpp conftest.cpp:29:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:8962: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | #define ENABLE_NLS 1 | #define HAVE_GETTEXT 1 | #define HAVE_DCGETTEXT 1 | /* end confdefs.h. */ | #include configure:8987: result: g++ -E configure:9007: g++ -E conftest.cpp configure:9007: $? = 0 configure:9021: g++ -E conftest.cpp conftest.cpp:29:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:9021: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | #define ENABLE_NLS 1 | #define HAVE_GETTEXT 1 | #define HAVE_DCGETTEXT 1 | /* end confdefs.h. */ | #include configure:9052: checking bzlib.h usability configure:9052: g++ -c -g -O2 conftest.cpp >&5 configure:9052: $? = 0 configure:9052: result: yes configure:9052: checking bzlib.h presence configure:9052: g++ -E conftest.cpp configure:9052: $? = 0 configure:9052: result: yes configure:9052: checking for bzlib.h configure:9052: result: yes configure:9067: checking for SQLITE3 configure:9074: $PKG_CONFIG --exists --print-errors "sqlite3 >= 3.6.19" configure:9077: $? = 0 configure:9091: $PKG_CONFIG --exists --print-errors "sqlite3 >= 3.6.19" configure:9094: $? = 0 configure:9152: result: yes configure:9193: checking for gcry_md_open in -lgcrypt configure:9218: g++ -o conftest -g -O2 conftest.cpp -lgcrypt >&5 configure:9218: $? = 0 configure:9227: result: yes configure:9235: checking gcrypt.h usability configure:9235: g++ -c -g -O2 conftest.cpp >&5 configure:9235: $? = 0 configure:9235: result: yes configure:9235: checking gcrypt.h presence configure:9235: g++ -E conftest.cpp configure:9235: $? = 0 configure:9235: result: yes configure:9235: checking for gcrypt.h configure:9235: result: yes configure:9253: checking for chroot configure:9253: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9253: $? = 0 configure:9253: result: yes configure:9253: checking for unshare configure:9253: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9253: $? = 0 configure:9253: result: yes configure:9265: checking sched.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sched.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sched.h configure:9265: result: yes configure:9265: checking sys/param.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/param.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/param.h configure:9265: result: yes configure:9265: checking sys/mount.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/mount.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/mount.h configure:9265: result: yes configure:9265: checking sys/syscall.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/syscall.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/syscall.h configure:9265: result: yes configure:9284: checking for lutimes configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for lchown configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for posix_fallocate configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for sched_setaffinity configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for statvfs configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for nanosleep configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for strsignal configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9294: checking whether it is possible to create a link to a symlink configure:9298: result: yes configure:9317: checking locale usability configure:9317: g++ -c -g -O2 conftest.cpp >&5 configure:9317: $? = 0 configure:9317: result: yes configure:9317: checking locale presence configure:9317: g++ -E conftest.cpp configure:9317: $? = 0 configure:9317: result: yes configure:9317: checking for locale configure:9317: result: yes configure:9337: checking sys/personality.h usability configure:9337: g++ -c -g -O2 conftest.cpp >&5 configure:9337: $? = 0 configure:9337: result: yes configure:9337: checking sys/personality.h presence configure:9337: g++ -E conftest.cpp configure:9337: $? = 0 configure:9337: result: yes configure:9337: checking for sys/personality.h configure:9337: result: yes configure:9350: checking linux/fs.h usability configure:9350: g++ -c -g -O2 conftest.cpp >&5 configure:9350: $? = 0 configure:9350: result: yes configure:9350: checking linux/fs.h presence configure:9350: g++ -E conftest.cpp configure:9350: $? = 0 configure:9350: result: yes configure:9350: checking for linux/fs.h configure:9350: result: yes configure:9361: checking if (gnutls) is available configure:9368: result: yes configure:9379: checking for default substitute URLs configure:9381: result: https://mirror.hydra.gnu.org configure:9391: checking whether Guile's custom binary input ports support 'setvbuf' configure:9405: result: yes configure:9417: checking for unit test root directory configure:9424: result: /home/sapientech/Dev/guix/guix_wip/test-tmp configure:9433: checking for guile configure:9463: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:9471: checking the current installation's localstatedir configure:9485: result: /usr/local/var configure:9563: checking for dot configure:9581: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot configure:9594: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot configure:9609: checking for emacs configure:9625: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/emacs configure:9636: result: emacs configure:9660: checking where .elc files should go configure:9673: $EMACS -batch -Q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out configure:9676: $? = 0 configure:9689: result: ${datadir}/emacs/site-lisp configure:9820: checking that generated files are newer than configure configure:9826: result: done configure:9881: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by GNU Guix config.status 0.10.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on freetop config.status:992: creating nix/scripts/list-runtime-roots config.status:992: creating nix/scripts/substitute config.status:992: creating nix/scripts/guix-authenticate config.status:992: creating nix/scripts/offload config.status:992: creating Makefile config.status:992: creating po/guix/Makefile.in config.status:992: creating po/packages/Makefile.in config.status:992: creating guix/config.scm config.status:992: creating scripts/guix config.status:992: creating test-env config.status:992: creating pre-inst-env config.status:992: creating emacs/guix-config.el config.status:992: creating emacs/guix-helper.scm config.status:992: creating nix/config.h config.status:1173: nix/config.h is unchanged config.status:1221: executing depfiles commands config.status:1221: executing po-directories commands ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-unknown-linux-gnu ac_cv_c_compiler_gnu=yes ac_cv_cxx_compiler_gnu=yes ac_cv_env_CCC_set= ac_cv_env_CCC_value= ac_cv_env_CC_set= ac_cv_env_CC_value= ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_CXXCPP_set= ac_cv_env_CXXCPP_value= ac_cv_env_CXXFLAGS_set= ac_cv_env_CXXFLAGS_value= ac_cv_env_CXX_set= ac_cv_env_CXX_value= ac_cv_env_EMACSLOADPATH_set= ac_cv_env_EMACSLOADPATH_value= ac_cv_env_EMACS_set= ac_cv_env_EMACS_value= ac_cv_env_GUILE_CFLAGS_set= ac_cv_env_GUILE_CFLAGS_value= ac_cv_env_GUILE_LIBS_set= ac_cv_env_GUILE_LIBS_value= ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_PKG_CONFIG_LIBDIR_set= ac_cv_env_PKG_CONFIG_LIBDIR_value= ac_cv_env_PKG_CONFIG_PATH_set=set ac_cv_env_PKG_CONFIG_PATH_value=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/lib/pkgconfig::/home/sapientech/.guix-profile/lib/pkgconfig ac_cv_env_PKG_CONFIG_set= ac_cv_env_PKG_CONFIG_value= ac_cv_env_SQLITE3_CFLAGS_set= ac_cv_env_SQLITE3_CFLAGS_value= ac_cv_env_SQLITE3_LIBS_set= ac_cv_env_SQLITE3_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_func_chroot=yes ac_cv_func_lchown=yes ac_cv_func_lutimes=yes ac_cv_func_nanosleep=yes ac_cv_func_posix_fallocate=yes ac_cv_func_sched_setaffinity=yes ac_cv_func_statvfs=yes ac_cv_func_strsignal=yes ac_cv_func_unshare=yes ac_cv_guix_cbips_support_setvbuf=yes ac_cv_guix_cxx11_support=yes ac_cv_guix_hash_bang_length=73 ac_cv_guix_socket_file_name_length=40 ac_cv_guix_srfi_37_broken=no ac_cv_guix_test_hash_bang_length=112 ac_cv_guix_test_root=/home/sapientech/Dev/guix/guix_wip/test-tmp ac_cv_guix_test_socket_file_name_length=75 ac_cv_header_bzlib_h=yes ac_cv_header_gcrypt_h=yes ac_cv_header_inttypes_h=yes ac_cv_header_linux_fs_h=yes ac_cv_header_locale=yes ac_cv_header_memory_h=yes ac_cv_header_minix_config_h=no ac_cv_header_sched_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_mount_h=yes ac_cv_header_sys_param_h=yes ac_cv_header_sys_personality_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_syscall_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=x86_64-unknown-linux-gnu ac_cv_lib_bz2_BZ2_bzWriteOpen=yes ac_cv_lib_gcrypt_gcry_md_open=yes ac_cv_objext=o ac_cv_path_BZIP2=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 ac_cv_path_DOT_USER_PROGRAM=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot ac_cv_path_EGREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E' ac_cv_path_GMSGFMT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt ac_cv_path_GREP=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep ac_cv_path_GUILD=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild ac_cv_path_GUILE=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile ac_cv_path_GUILE_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config ac_cv_path_GZIP=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip ac_cv_path_LIBGCRYPT_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config ac_cv_path_MSGFMT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt ac_cv_path_MSGMERGE=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge ac_cv_path_SED=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed ac_cv_path_XGETTEXT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext ac_cv_path_XZ=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz ac_cv_path_ac_pt_PKG_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config ac_cv_path_install='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/install -c' ac_cv_path_mkdir=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CPP='gcc -E' ac_cv_prog_CXXCPP='g++ -E' ac_cv_prog_EMACS=emacs ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_ac_ct_CXX=g++ ac_cv_prog_ac_ct_RANLIB=ranlib ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_prog_cxx_g=yes ac_cv_prog_make_make_set=yes ac_cv_safe_to_define___extensions__=yes ac_cv_sys_file_offset_bits=no ac_cv_sys_largefile_CC=no acl_cv_hardcode_direct=no acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' acl_cv_hardcode_libdir_separator= acl_cv_hardcode_minus_L=no acl_cv_libext=a acl_cv_libname_spec='lib$name' acl_cv_library_names_spec='$libname$shrext' acl_cv_path_LD=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld acl_cv_prog_gnu_ld=yes acl_cv_rpath=done acl_cv_shlibext=so acl_cv_wl=-Wl, am_cv_CC_dependencies_compiler_type=gcc3 am_cv_CXX_dependencies_compiler_type=gcc3 am_cv_lispdir='${datadir}/emacs/site-lisp' am_cv_make_support_nested_variables=yes am_cv_prog_cc_c_o=yes gt_cv_func_CFLocaleCopyCurrent=no gt_cv_func_CFPreferencesCopyAppValue=no gt_cv_func_gnugettext1_libc=yes guix_cv_current_localstatedir=/usr/local/var guix_cv_libc_has_mount=yes guix_cv_libgcrypt_libdir=/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib guix_cv_libgcrypt_usable_p=yes guix_cv_libz_libdir=/gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib pkg_cv_GUILE_CFLAGS='-pthread -I/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/include/guile/2.0' pkg_cv_GUILE_LIBS='-L/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/lib -L/gnu/store/my4az71gz8iqd4w8kb34kq7vlk3fcvhm-libgc-7.4.2/lib -lguile-2.0 -lgc' pkg_cv_SQLITE3_CFLAGS=-I/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/include pkg_cv_SQLITE3_LIBS='-L/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/lib -lsqlite3' ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing aclocal-1.15' AMDEPBACKSLASH='\' AMDEP_FALSE='#' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AM_BACKSLASH='\' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' AM_DEFAULT_VERBOSITY='0' AM_V='$(V)' AUTOCONF='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing autoconf' AUTOHEADER='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing autoheader' AUTOMAKE='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing automake-1.15' AWK='gawk' BUILD_DAEMON_FALSE='#' BUILD_DAEMON_OFFLOAD_FALSE='#' BUILD_DAEMON_OFFLOAD_TRUE='' BUILD_DAEMON_TRUE='' BUILD_SYSCALLS_MODULE_FALSE='#' BUILD_SYSCALLS_MODULE_TRUE='' BZIP2='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2' CAN_RUN_TESTS_FALSE='#' CAN_RUN_TESTS_TRUE='' CC='gcc' CCDEPMODE='depmode=gcc3' CFLAGS='-g -O2' CPP='gcc -E' CPPFLAGS='' CXX='g++' CXXCPP='g++ -E' CXXDEPMODE='depmode=gcc3' CXXFLAGS='-g -O2' CYGPATH_W='echo' DEFS='-DHAVE_CONFIG_H' DEPDIR='.deps' DOT='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing dot' DOT_USER_PROGRAM='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E' EMACS='emacs' EMACSLOADPATH='' EXEEXT='' GETTEXT_MACRO_VERSION='0.18' GMSGFMT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' GMSGFMT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' GREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep' GUILD='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild' GUILE='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile' GUILE_CFLAGS='-pthread -I/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/include/guile/2.0' GUILE_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config' GUILE_LIBS='-L/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/lib -L/gnu/store/my4az71gz8iqd4w8kb34kq7vlk3fcvhm-libgc-7.4.2/lib -lguile-2.0 -lgc' GUILE_TOOLS='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild' GUIX_TEST_ROOT='/home/sapientech/Dev/guix/guix_wip/test-tmp' GZIP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip' HAVE_EMACS_FALSE='#' HAVE_EMACS_TRUE='' HAVE_GUILE_JSON_FALSE='#' HAVE_GUILE_JSON_TRUE='' HELP2MAN='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing help2man' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_SRFI_37_FALSE='' INSTALL_SRFI_37_TRUE='#' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' INTLLIBS='' INTL_MACOSX_LIBS='' LDFLAGS='' LIBGCRYPT='/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt' LIBGCRYPT_CFLAGS='' LIBGCRYPT_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config' LIBGCRYPT_LIBDIR='/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib' LIBGCRYPT_LIBS='-L/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib -lgcrypt' LIBGCRYPT_PREFIX='no' LIBICONV='-liconv' LIBINTL='' LIBOBJS='' LIBS='' LIBZ='/gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib/libz' LTLIBICONV='-liconv' LTLIBINTL='' LTLIBOBJS='' MAKEINFO='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing makeinfo' MKDIR_P='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p' MSGFMT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' MSGFMT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' MSGMERGE='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge' NIXPKGS='' NIX_HASH='' NIX_INSTANTIATE='nix-instantiate' NIX_PREFIX='' OBJEXT='o' PACKAGE='guix' PACKAGE_BUGREPORT='bug-guix@gnu.org' PACKAGE_NAME='GNU Guix' PACKAGE_STRING='GNU Guix 0.10.0' PACKAGE_TARNAME='guix' PACKAGE_URL='http://www.gnu.org/software/guix/' PACKAGE_VERSION='0.10.0' PATH_SEPARATOR=':' PKG_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config' PKG_CONFIG_LIBDIR='' PKG_CONFIG_PATH='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/lib/pkgconfig::/home/sapientech/.guix-profile/lib/pkgconfig' POSUB='po' RANLIB='ranlib' SED='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed' SET_MAKE='' SHELL='/bin/sh' SQLITE3_CFLAGS='-I/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/include' SQLITE3_LIBS='-L/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/lib -lsqlite3' STRIP='' USE_NLS='yes' VERSION='0.10.0' XGETTEXT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext' XGETTEXT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext' XGETTEXT_EXTRA_OPTIONS='' XZ='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz' ac_ct_CC='gcc' ac_ct_CXX='g++' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='#' am__fastdepCC_FALSE='#' am__fastdepCC_TRUE='' am__fastdepCXX_FALSE='#' am__fastdepCXX_TRUE='' am__include='include' am__isrc='' am__leading_dot='.' am__nodep='_no' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bashcompletiondir='${sysconfdir}/bash_completion.d' bindir='${exec_prefix}/bin' build='x86_64-unknown-linux-gnu' build_alias='' build_cpu='x86_64' build_os='linux-gnu' build_vendor='unknown' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' dvidir='${docdir}' emacsuidir='${prefix}/share/guile/site/2.0/guix/emacs' exec_prefix='${prefix}' guilemoduledir='${prefix}/share/guile/site/2.0' guix_localstatedir='/usr/local/var' guix_sbindir='/usr/local/sbin' guix_sysconfdir='/usr/local/etc' guix_system='x86_64-linux' host='x86_64-unknown-linux-gnu' host_alias='' host_cpu='x86_64' host_os='linux-gnu' host_vendor='unknown' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' install_sh='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/install-sh' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' lispdir='${datadir}/emacs/site-lisp' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' mkdir_p='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' storedir='/gnu/store' sysconfdir='${prefix}/etc' target_alias='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "GNU Guix" #define PACKAGE_TARNAME "guix" #define PACKAGE_VERSION "0.10.0" #define PACKAGE_STRING "GNU Guix 0.10.0" #define PACKAGE_BUGREPORT "bug-guix@gnu.org" #define PACKAGE_URL "http://www.gnu.org/software/guix/" #define PACKAGE "guix" #define VERSION "0.10.0" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define __EXTENSIONS__ 1 #define _ALL_SOURCE 1 #define _GNU_SOURCE 1 #define _POSIX_PTHREAD_SEMANTICS 1 #define _TANDEM_SOURCE 1 #define ENABLE_NLS 1 #define HAVE_GETTEXT 1 #define HAVE_DCGETTEXT 1 #define HAVE_BZLIB_H 1 #define NIX_VERSION "0.0.0" #define SYSTEM "x86_64-linux" #define HAVE_CHROOT 1 #define HAVE_UNSHARE 1 #define HAVE_SCHED_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_MOUNT_H 1 #define HAVE_SYS_SYSCALL_H 1 #define HAVE_LUTIMES 1 #define HAVE_LCHOWN 1 #define HAVE_POSIX_FALLOCATE 1 #define HAVE_SCHED_SETAFFINITY 1 #define HAVE_STATVFS 1 #define HAVE_NANOSLEEP 1 #define HAVE_STRSIGNAL 1 #define CAN_LINK_SYMLINK 1 #define HAVE_LOCALE 1 #define HAVE_SYS_PERSONALITY_H 1 #define HAVE_LINUX_FS_H 1 #define GUIX_SUBSTITUTE_URLS "https://mirror.hydra.gnu.org" #define HAVE_DAEMON_OFFLOAD_HOOK 1 configure: exit 0 --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: application/octet-stream; name=config.status Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=config.status IyEgL2Jpbi9zaAojIEdlbmVyYXRlZCBieSBjb25maWd1cmUuCiMgUnVuIHRoaXMgZmlsZSB0byBy ZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgojIENvbXBpbGVyIG91dHB1dCBwcm9k dWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCiMgY29uZmlndXJlLCBpcyBp biBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KCmRlYnVnPWZhbHNlCmFjX2NzX3JlY2hlY2s9ZmFs c2UKYWNfY3Nfc2lsZW50PWZhbHNlCgpTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQpleHBv cnQgU0hFTEwKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgTTRzaCBJbml0aWFsaXphdGlv bi4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMgQmUgbW9yZSBCb3VybmUgY29tcGF0 aWJsZQpEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCmlmIHRlc3QgLW4g IiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhl biA6CiAgZW11bGF0ZSBzaAogIE5VTExDTUQ9OgogICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2gg ZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICMgaXMgY29udHJhcnkgdG8g b3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgYWxpYXMgLWcgJyR7MSsiJEAifSc9 JyIkQCInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKZWxzZQogIGNhc2UgYChzZXQgLW8pIDI+L2Rl di9udWxsYCBpbiAjKAogICpwb3NpeCopIDoKICAgIHNldCAtbyBwb3NpeCA7OyAjKAogICopIDoK ICAgICA7Owplc2FjCmZpCgoKYXNfbmw9JwonCmV4cG9ydCBhc19ubAojIFByaW50aW5nIGEgbG9u ZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgphc19lY2hvPSdcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwphc19lY2hvPSRhc19l Y2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KYXNfZWNobz0kYXNfZWNobyRhc19l Y2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KIyBQcmVmZXIgYSBrc2ggc2hlbGwg YnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCiMgYnV0 IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCmlmIHRlc3QgLXogIiRCQVNI X1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19l Y2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KICBhc19lY2hvPSdwcmludCAt ciAtLScKICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKZWxpZiAodGVzdCAiWGBwcmludGYgJXMg JGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgogIGFzX2VjaG89J3By aW50ZiAlc1xuJwogIGFzX2VjaG9fbj0ncHJpbnRmICVzJwplbHNlCiAgaWYgdGVzdCAiWGAoL3Vz ci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8i OyB0aGVuCiAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwi JwogICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJwogIGVsc2UKICAgIGFzX2VjaG9fYm9k eT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCiAgICBhc19lY2hvX25fYm9keT0nZXZh bAogICAgICBhcmc9JDE7CiAgICAgIGNhc2UgJGFyZyBpbiAjKAogICAgICAqIiRhc19ubCIqKQoJ ZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7Cglhcmc9YGV4cHIgIlgkYXJnIiA6ICIu KiRhc19ubFxcKC4qXFwpImA7OwogICAgICBlc2FjOwogICAgICBleHByICJYJGFyZyIgOiAiWFxc KC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCiAgICAnCiAgICBleHBvcnQgYXNfZWNob19uX2JvZHkK ICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCiAgZmkKICBleHBv cnQgYXNfZWNob19ib2R5CiAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJwpm aQoKIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCmlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Ir c2V0fSIgIT0gc2V0OyB0aGVuCiAgUEFUSF9TRVBBUkFUT1I9OgogIChQQVRIPScvYmluOy9iaW4n OyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKICAgIChQQVRIPScv YmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CiAgICAg IFBBVEhfU0VQQVJBVE9SPSc7JwogIH0KZmkKCgojIElGUwojIFdlIG5lZWQgc3BhY2UsIHRhYiBh bmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwojIHRoZXJl IHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KIyAo SWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlz YWJsZSB3b3JkCiMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKSUZT PSIgIiIJJGFzX25sIgoKIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdl IGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KYXNfbXlzZWxmPQpjYXNlICQwIGluICMo KAogICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCmZvciBhc19kaXIgaW4gJFBBVEgKZG8KICBJRlM9JGFzX3NhdmVfSUZT CiAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgIHRlc3QgLXIgIiRhc19kaXIvJDAi ICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCiAgZG9uZQpJRlM9JGFzX3NhdmVfSUZT CgogICAgIDs7CmVzYWMKIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5 IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwojIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0 byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgog IGFzX215c2VsZj0kMApmaQppZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCiAgJGFzX2Vj aG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4g YWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKICBleGl0IDEKZmkKCiMgVW5zZXQgdmFyaWFibGVzIHRo YXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KIyBwcmUtMy4w IFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwg ZXhpdCAxIgojIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhl cmUuICAnKCgnIGNvdWxkCiMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCmZvciBhc192 YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFy K3NldH0gPSB4c2V0IFwKICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251 bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKZG9uZQpQUzE9JyQgJwpQUzI9Jz4gJwpQUzQ9 JysgJwoKIyBOTFMgbnVpc2FuY2VzLgpMQ19BTEw9QwpleHBvcnQgTENfQUxMCkxBTkdVQUdFPUMK ZXhwb3J0IExBTkdVQUdFCgojIENEUEFUSC4KKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYx ICYmIHVuc2V0IENEUEFUSAoKCiMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9H X0ZEXQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPdXRwdXQg ImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExP R19GRCBhcmUKIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVm ZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCiMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2lu ZyAxIGlmIHRoYXQgd2FzIDAuCmFzX2ZuX2Vycm9yICgpCnsKICBhc19zdGF0dXM9JDE7IHRlc3Qg JGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQogIGlmIHRlc3QgIiQ0IjsgdGhlbgogICAg YXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3Rh Y2s9JGFzX2xpbmVub19zdGFjawogICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogZXJyb3I6ICQyIiA+JiQ0CiAgZmkKICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIi ID4mMgogIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cwp9ICMgYXNfZm5fZXJyb3IKCgojIGFzX2ZuX3Nl dF9zdGF0dXMgU1RBVFVTCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBTZXQgJD8gdG8gU1RB VFVTLCB3aXRob3V0IGZvcmtpbmcuCmFzX2ZuX3NldF9zdGF0dXMgKCkKewogIHJldHVybiAkMQp9 ICMgYXNfZm5fc2V0X3N0YXR1cwoKIyBhc19mbl9leGl0IFNUQVRVUwojIC0tLS0tLS0tLS0tLS0t LS0tCiMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAi c2V0IC1lIiBjb250ZXh0Lgphc19mbl9leGl0ICgpCnsKICBzZXQgK2UKICBhc19mbl9zZXRfc3Rh dHVzICQxCiAgZXhpdCAkMQp9ICMgYXNfZm5fZXhpdAoKIyBhc19mbl91bnNldCBWQVIKIyAtLS0t LS0tLS0tLS0tLS0KIyBQb3J0YWJseSB1bnNldCBWQVIuCmFzX2ZuX3Vuc2V0ICgpCnsKICB7IGV2 YWwgJDE9OyB1bnNldCAkMTt9Cn0KYXNfdW5zZXQ9YXNfZm5fdW5zZXQKIyBhc19mbl9hcHBlbmQg VkFSIFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFwcGVuZCB0aGUgdGV4dCBpbiBW QUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UK IyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6 ZWQgbGluZWFyIGdyb3d0aCBvdmVyCiMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUg dHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKIyBpbXBsZW1lbnRhdGlv bnMuCmlmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIp IDI+L2Rldi9udWxsOyB0aGVuIDoKICBldmFsICdhc19mbl9hcHBlbmQgKCkKICB7CiAgICBldmFs ICQxKz1cJDIKICB9JwplbHNlCiAgYXNfZm5fYXBwZW5kICgpCiAgewogICAgZXZhbCAkMT1cJCQx XCQyCiAgfQpmaSAjIGFzX2ZuX2FwcGVuZAoKIyBhc19mbl9hcml0aCBBUkcuLi4KIyAtLS0tLS0t LS0tLS0tLS0tLS0KIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywg YW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCiMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50 YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cwojIG11c3Qg YmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgppZiAoZXZhbCAidGVzdCBcJCgoIDEg KyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKICBldmFsICdhc19mbl9hcml0aCAoKQog IHsKICAgIGFzX3ZhbD0kKCggJCogKSkKICB9JwplbHNlCiAgYXNfZm5fYXJpdGggKCkKICB7CiAg ICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAogIH0KZmkgIyBhc19mbl9hcml0 aAoKCmlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCiAgIHRlc3QgIlhgZXhw ciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCiAgYXNfZXhwcj1leHByCmVsc2UK ICBhc19leHByPWZhbHNlCmZpCgppZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYm IHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCiAgYXNfYmFzZW5hbWU9 YmFzZW5hbWUKZWxzZQogIGFzX2Jhc2VuYW1lPWZhbHNlCmZpCgppZiAoYXNfZGlyPWBkaXJuYW1l IC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICBh c19kaXJuYW1lPWRpcm5hbWUKZWxzZQogIGFzX2Rpcm5hbWU9ZmFsc2UKZmkKCmFzX21lPWAkYXNf YmFzZW5hbWUgLS0gIiQwIiB8fAokYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8q JCcgXHwgXAoJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCgkgWCIkMCIgOiAnWFwoL1wpJyBcfCAu IDI+L2Rldi9udWxsIHx8CiRhc19lY2hvIFgvIiQwIiB8CiAgICBzZWQgJy9eLipcL1woW14vXVte L10qXClcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXC9cKFwvXC9cKSQvewoJ ICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcL1woXC9cKS4qL3sKCSAgICBzLy9cMS8KCSAg ICBxCgkgIH0KCSAgcy8uKi8uLzsgcSdgCgojIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3Rl ciBSYW5nZXMuCmFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jwphc19j cl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKYXNfY3JfTGV0dGVycz0kYXNf Y3JfbGV0dGVycyRhc19jcl9MRVRURVJTCmFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKYXNfY3Jf YWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCgpFQ0hPX0M9IEVDSE9fTj0gRUNIT19U PQpjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAotbiopCiAgY2FzZSBgZWNobyAneHlcYydgIGlu CiAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCiAg eHkpICBFQ0hPX0M9J1xjJzs7CiAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4x YCA+IC9kZXYvbnVsbAogICAgICAgRUNIT19UPScJJzs7CiAgZXNhYzs7CiopCiAgRUNIT19OPSct bic7Owplc2FjCgpybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQppZiB0ZXN0IC1k IGNvbmYkJC5kaXI7IHRoZW4KICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCmVsc2UKICBy bSAtZiBjb25mJCQuZGlyCiAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbApmaQppZiAoZWNo byA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCiAgaWYgbG4gLXMgY29uZiQkLmZpbGUg Y29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICBhc19sbl9zPSdsbiAtcycKICAgICMgLi4uIGJ1 dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CiAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZp bGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgogICAgIyAyKSBESkdQUCA8IDIuMDQgaGFz IG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCiAgICAj IEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KICAgIGxuIC1z IGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5l eGUgfHwKICAgICAgYXNfbG5fcz0nY3AgLXBSJwogIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQk IDI+L2Rldi9udWxsOyB0aGVuCiAgICBhc19sbl9zPWxuCiAgZWxzZQogICAgYXNfbG5fcz0nY3Ag LXBSJwogIGZpCmVsc2UKICBhc19sbl9zPSdjcCAtcFInCmZpCnJtIC1mIGNvbmYkJCBjb25mJCQu ZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKcm1kaXIgY29uZiQkLmRpciAy Pi9kZXYvbnVsbAoKCiMgYXNfZm5fbWtkaXJfcAojIC0tLS0tLS0tLS0tLS0KIyBDcmVhdGUgIiRh c19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCmFz X2ZuX21rZGlyX3AgKCkKewoKICBjYXNlICRhc19kaXIgaW4gIygKICAtKikgYXNfZGlyPS4vJGFz X2Rpcjs7CiAgZXNhYwogIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwg ewogICAgYXNfZGlycz0KICAgIHdoaWxlIDo7IGRvCiAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAog ICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxc XFwnJy9nImA7OyAjJygKICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKICAgICAgZXNhYwogICAg ICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgogICAgICBhc19kaXI9YCRhc19kaXJuYW1l IC0tICIkYXNfZGlyIiB8fAokYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14v XVteL10qLyokJyBcfCBcCgkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAoJIFgiJGFz X2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9k ZXYvbnVsbCB8fAokYXNfZWNobyBYIiRhc19kaXIiIHwKICAgIHNlZCAnL15YXCguKlteL11cKVwv XC8qW14vXVteL10qXC8qJC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wp W14vXS4qL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXCkkL3sKCSAgICBz Ly9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wpLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAg fQoJICBzLy4qLy4vOyBxJ2AKICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKICAgIGRv bmUKICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKICB9IHx8 IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVj dG9yeSAkYXNfZGlyIgoKCn0gIyBhc19mbl9ta2Rpcl9wCmlmIG1rZGlyIC1wIC4gMj4vZGV2L251 bGw7IHRoZW4KICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCmVsc2UKICB0ZXN0IC1k IC4vLXAgJiYgcm1kaXIgLi8tcAogIGFzX21rZGlyX3A9ZmFsc2UKZmkKCgojIGFzX2ZuX2V4ZWN1 dGFibGVfcCBGSUxFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUZXN0IGlmIEZJTEUgaXMg YW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCmFzX2ZuX2V4ZWN1dGFibGVfcCAoKQp7CiAgdGVz dCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgp9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCmFzX3Rlc3Rf eD0ndGVzdCAteCcKYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAoKIyBTZWQgZXhw cmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgphc190cl9jcHA9 ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2Ny X2FsbnVtXSVfJWcnIgoKIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZh bGlkIHZhcmlhYmxlIG5hbWUuCmFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNf Y3JfYWxudW1dJV8lZyciCgoKZXhlYyA2PiYxCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICMjCiMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCiMj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiMgU2F2ZSB0aGUgbG9nIG1l c3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwojIHJlcG9ydCBh Y3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIK IyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KYWNfbG9nPSIKVGhpcyBmaWxlIHdhcyBl eHRlbmRlZCBieSBHTlUgR3VpeCAkYXNfbWUgMC4xMC4wLCB3aGljaCB3YXMKZ2VuZXJhdGVkIGJ5 IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCgogIENPTkZJ R19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hF QURFUlMKICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCiAgQ09ORklHX0NPTU1BTkRT ID0gJENPTkZJR19DT01NQU5EUwogICQgJDAgJEAKCm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4p IDI+L2Rldi9udWxsIHwgc2VkIDFxYAoiCgojIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMg bWFkZSBmb3IuCmNvbmZpZ19maWxlcz0iIG5peC9zY3JpcHRzL2xpc3QtcnVudGltZS1yb290cyBu aXgvc2NyaXB0cy9zdWJzdGl0dXRlIG5peC9zY3JpcHRzL2d1aXgtYXV0aGVudGljYXRlIG5peC9z Y3JpcHRzL29mZmxvYWQgTWFrZWZpbGUgcG8vZ3VpeC9NYWtlZmlsZS5pbiBwby9wYWNrYWdlcy9N YWtlZmlsZS5pbiBndWl4L2NvbmZpZy5zY20gc2NyaXB0cy9ndWl4IHRlc3QtZW52OmJ1aWxkLWF1 eC90ZXN0LWVudi5pbiBwcmUtaW5zdC1lbnY6YnVpbGQtYXV4L3ByZS1pbnN0LWVudi5pbiBlbWFj cy9ndWl4LWNvbmZpZy5lbCBlbWFjcy9ndWl4LWhlbHBlci5zY20iCmNvbmZpZ19oZWFkZXJzPSIg bml4L2NvbmZpZy5oIgpjb25maWdfY29tbWFuZHM9IiBkZXBmaWxlcyBwby1kaXJlY3RvcmllcyIK CmFjX2NzX3VzYWdlPSJcClxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNv bmZpZ3VyYXRpb24gYWN0aW9ucwpmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJl bnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKYW5kIGFjdGlvbnMgYXJlIHNwZWNp ZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgoKVXNhZ2U6ICQw IFtPUFRJT05dLi4uIFtUQUddLi4uCgogIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxw LCB0aGVuIGV4aXQKICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBj b25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKICAgICAgLS1jb25maWcgICAgIHByaW50 IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAogIC1xLCAtLXF1aWV0LCAtLXNpbGVudAogICAgICAg ICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCiAgLWQsIC0tZGVidWcg ICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCiAgICAgIC0tcmVjaGVjayAgICB1cGRh dGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwogICAgICAt LWZpbGU9RklMRVs6VEVNUExBVEVdCiAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUg Y29uZmlndXJhdGlvbiBmaWxlIEZJTEUKICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCiAg ICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklM RQoKQ29uZmlndXJhdGlvbiBmaWxlczoKJGNvbmZpZ19maWxlcwoKQ29uZmlndXJhdGlvbiBoZWFk ZXJzOgokY29uZmlnX2hlYWRlcnMKCkNvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiRjb25maWdfY29t bWFuZHMKClJlcG9ydCBidWdzIHRvIDxidWctZ3VpeEBnbnUub3JnPi4KR05VIEd1aXggaG9tZSBw YWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d1aXgvPi4KR2VuZXJhbCBoZWxwIHVz aW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIgoKYWNfY3Nf Y29uZmlnPSInUEtHX0NPTkZJR19QQVRIPS9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndq enkxa2Zpd3FnZHAtcHJvZmlsZS9saWIvcGtnY29uZmlnOjovaG9tZS9zYXBpZW50ZWNoLy5ndWl4 LXByb2ZpbGUvbGliL3BrZ2NvbmZpZyciCmFjX2NzX3ZlcnNpb249IlwKR05VIEd1aXggY29uZmln LnN0YXR1cyAwLjEwLjAKY29uZmlndXJlZCBieSAuL2NvbmZpZ3VyZSwgZ2VuZXJhdGVkIGJ5IEdO VSBBdXRvY29uZiAyLjY5LAogIHdpdGggb3B0aW9ucyBcIiRhY19jc19jb25maWdcIgoKQ29weXJp Z2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpUaGlzIGNvbmZpZy5z dGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24KZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9k aWZ5IGl0LiIKCmFjX3B3ZD0nL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcCcKc3Jj ZGlyPScuJwpJTlNUQUxMPScvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdx Z2RwLXByb2ZpbGUvYmluL2luc3RhbGwgLWMnCk1LRElSX1A9Jy9nbnUvc3RvcmUvMjBxc2dpbDE4 aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbWtkaXIgLXAnCkFXSz0nZ2F3aycK dGVzdCAtbiAiJEFXSyIgfHwgQVdLPWF3awojIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRo ZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCmFjX25lZWRfZGVmYXVsdHM9Ogp3aGls ZSB0ZXN0ICQjICE9IDAKZG8KICBjYXNlICQxIGluCiAgLS0qPT8qKQogICAgYWNfb3B0aW9uPWBl eHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdY W149XSo9XCguKlwpJ2AKICAgIGFjX3NoaWZ0PToKICAgIDs7CiAgLS0qPSkKICAgIGFjX29wdGlv bj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCiAgICBhY19vcHRhcmc9CiAgICBhY19zaGlm dD06CiAgICA7OwogICopCiAgICBhY19vcHRpb249JDEKICAgIGFjX29wdGFyZz0kMgogICAgYWNf c2hpZnQ9c2hpZnQKICAgIDs7CiAgZXNhYwoKICBjYXNlICRhY19vcHRpb24gaW4KICAjIEhhbmRs aW5nIG9mIHRoZSBvcHRpb25zLgogIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAt LXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQogICAgYWNfY3NfcmVjaGVjaz06 IDs7CiAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAt LXZlIHwgLS12IHwgLVYgKQogICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7Owog IC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCiAgICAk YXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1k ZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQogICAgZGVidWc9OiA7OwogIC0tZmlsZSB8IC0tZmlsIHwg LS1maSB8IC0tZiApCiAgICAkYWNfc2hpZnQKICAgIGNhc2UgJGFjX29wdGFyZyBpbgogICAgKlwn KikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwn Jy9nImAgOzsKICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7 OwogICAgZXNhYwogICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIK ICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVh ZCB8IC0taGVhICkKICAgICRhY19zaGlmdAogICAgY2FzZSAkYWNfb3B0YXJnIGluCiAgICAqXCcq KSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcn L2ciYCA7OwogICAgZXNhYwogICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19v cHRhcmcnIgogICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgLS1oZSB8IC0taCkKICAgICMg Q29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCiAgICBhc19mbl9lcnJvciAkPyAi YW1iaWd1b3VzIG9wdGlvbjogXGAkMScKVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1h dGlvbi4iOzsKICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKICAgICRhc19lY2hvICIkYWNfY3NfdXNh Z2UiOyBleGl0IDs7CiAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAt LXF1IHwgLS1xIFwKICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAt LXNpbCB8IC0tc2kgfCAtLXMpCiAgICBhY19jc19zaWxlbnQ9OiA7OwoKICAjIFRoaXMgaXMgYW4g ZXJyb3IuCiAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJwpU cnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKCiAgKikgYXNfZm5fYXBw ZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7 OwoKICBlc2FjCiAgc2hpZnQKZG9uZQoKYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CgppZiAkYWNf Y3Nfc2lsZW50OyB0aGVuCiAgZXhlYyA2Pi9kZXYvbnVsbAogIGFjX2NvbmZpZ3VyZV9leHRyYV9h cmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCmZpCgppZiAkYWNfY3NfcmVj aGVjazsgdGhlbgogIHNldCBYIC9iaW4vc2ggJy4vY29uZmlndXJlJyAgJ1BLR19DT05GSUdfUEFU SD0vZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvbGli L3BrZ2NvbmZpZzo6L2hvbWUvc2FwaWVudGVjaC8uZ3VpeC1wcm9maWxlL2xpYi9wa2djb25maWcn ICRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgogIHNo aWZ0CiAgJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPS9iaW4vc2ggJCoiID4mNgogIENP TkZJR19TSEVMTD0nL2Jpbi9zaCcKICBleHBvcnQgQ09ORklHX1NIRUxMCiAgZXhlYyAiJEAiCmZp CgpleGVjIDU+PmNvbmZpZy5sb2cKewogIGVjaG8KICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMg LztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAojIyBSdW5uaW5nICRhc19tZS4gIyMKX0FT Qk9YCiAgJGFzX2VjaG8gIiRhY19sb2ciCn0gPiY1CgojCiMgSU5JVC1DT01NQU5EUwojCkFNREVQ X1RSVUU9IiIgYWNfYXV4X2Rpcj0iYnVpbGQtYXV4IgojIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9i c29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCiAgICAjIFBP RklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMsIENBVEFMT0dTLiBC dXQgaGlkZSBpdAogICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgogICAgZXZhbCAnT0JTT0xFVEVf QUxMX0xJTkdVQVMnJz0iIicKICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgTElOR1VBUyBiZWNh dXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZSBDQVRBTE9HUy4KICAgIExJTkdVQVM9IiVVTlNFVCUi CgoKCiMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgpmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNf Y29uZmlnX3RhcmdldHMKZG8KICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCiAgICAiZGVwZmls ZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CiAgICAi cG8tZGlyZWN0b3JpZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgcG8tZGly ZWN0b3JpZXMiIDs7CiAgICAibml4L2NvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdf SEVBREVSUyBuaXgvY29uZmlnLmgiIDs7CiAgICAibml4L3NjcmlwdHMvbGlzdC1ydW50aW1lLXJv b3RzIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG5peC9zY3JpcHRzL2xpc3QtcnVudGlt ZS1yb290cyIgOzsKICAgICJuaXgvc2NyaXB0cy9zdWJzdGl0dXRlIikgQ09ORklHX0ZJTEVTPSIk Q09ORklHX0ZJTEVTIG5peC9zY3JpcHRzL3N1YnN0aXR1dGUiIDs7CiAgICAibml4L3NjcmlwdHMv Z3VpeC1hdXRoZW50aWNhdGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbml4L3Njcmlw dHMvZ3VpeC1hdXRoZW50aWNhdGUiIDs7CiAgICAibml4L3NjcmlwdHMvb2ZmbG9hZCIpIENPTkZJ R19GSUxFUz0iJENPTkZJR19GSUxFUyBuaXgvc2NyaXB0cy9vZmZsb2FkIiA7OwogICAgIk1ha2Vm aWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OwogICAgInBvL2d1 aXgvTWFrZWZpbGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vZ3VpeC9NYWtl ZmlsZS5pbiIgOzsKICAgICJwby9wYWNrYWdlcy9NYWtlZmlsZS5pbiIpIENPTkZJR19GSUxFUz0i JENPTkZJR19GSUxFUyBwby9wYWNrYWdlcy9NYWtlZmlsZS5pbiIgOzsKICAgICJndWl4L2NvbmZp Zy5zY20iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3VpeC9jb25maWcuc2NtIiA7Owog ICAgInNjcmlwdHMvZ3VpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzY3JpcHRzL2d1 aXgiIDs7CiAgICAidGVzdC1lbnYiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC1l bnY6YnVpbGQtYXV4L3Rlc3QtZW52LmluIiA7OwogICAgInByZS1pbnN0LWVudiIpIENPTkZJR19G SUxFUz0iJENPTkZJR19GSUxFUyBwcmUtaW5zdC1lbnY6YnVpbGQtYXV4L3ByZS1pbnN0LWVudi5p biIgOzsKICAgICJlbWFjcy9ndWl4LWNvbmZpZy5lbCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19G SUxFUyBlbWFjcy9ndWl4LWNvbmZpZy5lbCIgOzsKICAgICJlbWFjcy9ndWl4LWhlbHBlci5zY20i KSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZW1hY3MvZ3VpeC1oZWxwZXIuc2NtIiA7OwoK ICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3Rhcmdl dCciICIkTElORU5PIiA1OzsKICBlc2FjCmRvbmUKCgojIElmIHRoZSB1c2VyIGRpZCBub3QgdXNl IHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCiMgdGhl biB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUg bm90LgojIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJl Y2F1c2Ugb2YgYW4gZXh0cmVtZWx5CiMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCmlmICRh Y19uZWVkX2RlZmF1bHRzOyB0aGVuCiAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQg fHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3Nl dH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycwogIHRlc3QgIiR7Q09O RklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1h bmRzCmZpCgojIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1h a2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFz b24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAojIGNyZWF0aW5nIGFu ZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCiMg SG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KIyBOb3RlIHRoYXQgdGhlcmUg aXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVh bmVkOgojIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFz c2lnbmVkIHRvIGAkdG1wJy4KJGRlYnVnIHx8CnsKICB0bXA9IGFjX3RtcD0KICB0cmFwICdleGl0 X3N0YXR1cz0kPwogIDogIiR7YWNfdG1wOj0kdG1wfSIKICB7IHRlc3QgISAtZCAiJGFjX3RtcCIg fHwgcm0gLWZyICIkYWNfdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cwonIDAKICB0cmFwICdh c19mbl9leGl0IDEnIDEgMiAxMyAxNQp9CiMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9y eSBmb3IgdG1wIGZpbGVzLgoKewogIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29u ZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgogIHRlc3QgLWQgIiR0bXAiCn0gIHx8CnsKICB0bXA9 Li9jb25mJCQtJFJBTkRPTQogICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQp9IHx8IGFzX2Zu X2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJ TkVOTyIgNQphY190bXA9JHRtcAoKIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxF UyBzZWN0aW9uLgojIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09O RklHX0ZJTEVTLgojIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3Rh dHVzIGNvbmZpZy5oJy4KaWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KCgphY19jcj1g ZWNobyBYIHwgdHIgWCAnXDAxNSdgCiMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRl IGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KIyBCdXQgd2Uga25vdyBvZiBubyBvdGhl ciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCiMgcG9pbnQsIHNvIHdl IGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCmlmIHRlc3QgIngkYWNfY3IiID0geDsg dGhlbgogIGV2YWwgYWNfY3I9XCRcJ1xcclwnCmZpCmFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4g eyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKaWYgdGVzdCAiJGFjX2Nz X2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KICBhY19jc19hd2tfY3I9J1xccicKZWxzZQog IGFjX2NzX2F3a19jcj0kYWNfY3IKZmkKCmVjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5h d2siICYmCmNhdCA+PiIkYWNfdG1wL3N1YnMxLmF3ayIgPDxcX0FDQVdLICYmClNbImFtX19FWEVF WFRfRkFMU0UiXT0iIgpTWyJhbV9fRVhFRVhUX1RSVUUiXT0iIyIKU1siTFRMSUJPQkpTIl09IiIK U1siTElCT0JKUyJdPSIiClNbImVtYWNzdWlkaXIiXT0iJHtwcmVmaXh9L3NoYXJlL2d1aWxlL3Np dGUvMi4wL2d1aXgvZW1hY3MiClNbIkhBVkVfRU1BQ1NfRkFMU0UiXT0iIyIKU1siSEFWRV9FTUFD U19UUlVFIl09IiIKU1sibGlzcGRpciJdPSIke2RhdGFkaXJ9L2VtYWNzL3NpdGUtbGlzcCIKU1si RU1BQ1NMT0FEUEFUSCJdPSIiClNbIkVNQUNTIl09ImVtYWNzIgpTWyJET1RfVVNFUl9QUk9HUkFN Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9i aW4vZG90IgpTWyJIRUxQMk1BTiJdPSIke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNzaW5nIGhlbHAybWFuIgpTWyJET1QiXT0iJHtTSEVMTH0g L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9idWlsZC1hdXgvbWlzc2luZyBkb3Qi ClNbIkJVSUxEX0RBRU1PTl9PRkZMT0FEX0ZBTFNFIl09IiMiClNbIkJVSUxEX0RBRU1PTl9PRkZM T0FEX1RSVUUiXT0iIgpTWyJCVUlMRF9EQUVNT05fRkFMU0UiXT0iIyIKU1siQlVJTERfREFFTU9O X1RSVUUiXT0iIgpTWyJHVUlYX1RFU1RfUk9PVCJdPSIvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3QtdG1wIgpTWyJMSUJHQ1JZUFRfTElCUyJdPSItTC9nbnUvc3RvcmUvN3dm YnBycDFiOWIyNWNybGlkZzZoN2I2aHBpYjJiOTktbGliZ2NyeXB0LTEuNi41L2xpYiAtbGdjcnlw dCIKU1siTElCR0NSWVBUX0NGTEFHUyJdPSIiClNbIlNRTElURTNfTElCUyJdPSItTC9nbnUvc3Rv cmUveTdoOGdmODkwcWFqNmYyM3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9saWIgLWxz cWxpdGUzIgpTWyJTUUxJVEUzX0NGTEFHUyJdPSItSS9nbnUvc3RvcmUveTdoOGdmODkwcWFqNmYy M3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9pbmNsdWRlIgpTWyJDWFhDUFAiXT0iZysr IC1FIgpTWyJSQU5MSUIiXT0icmFubGliIgpTWyJhbV9fZmFzdGRlcENYWF9GQUxTRSJdPSIjIgpT WyJhbV9fZmFzdGRlcENYWF9UUlVFIl09IiIKU1siQ1hYREVQTU9ERSJdPSJkZXBtb2RlPWdjYzMi ClNbImFjX2N0X0NYWCJdPSJnKysiClNbIkNYWEZMQUdTIl09Ii1nIC1PMiIKU1siQ1hYIl09Imcr KyIKU1siTElCWiJdPSIvZ251L3N0b3JlL2hzeGhmbWpnaDhtNGMwcGF2cTNnZDNnY3JuOHpyZ3hq LXpsaWItMS4yLjgvbGliL2xpYnoiClNbIkxJQkdDUllQVF9MSUJESVIiXT0iL2dudS9zdG9yZS83 d2ZicHJwMWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliIgpTWyJM SUJHQ1JZUFRfUFJFRklYIl09Im5vIgpTWyJMSUJHQ1JZUFQiXT0iL2dudS9zdG9yZS83d2ZicHJw MWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliL2xpYmdjcnlwdCIK U1siTElCR0NSWVBUX0NPTkZJRyJdPSIvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5 MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2xpYmdjcnlwdC1jb25maWciClNbIk5JWFBLR1MiXT0iIgpT WyJOSVhfSEFTSCJdPSIiClNbIk5JWF9JTlNUQU5USUFURSJdPSJuaXgtaW5zdGFudGlhdGUiClNb Ik5JWF9QUkVGSVgiXT0iIgpTWyJYWiJdPSIvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3 anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL3h6IgpTWyJCWklQMiJdPSIvZ251L3N0b3JlLzIwcXNn aWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2J6aXAyIgpTWyJHWklQIl09 Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4v Z3ppcCIKU1siQlVJTERfU1lTQ0FMTFNfTU9EVUxFX0ZBTFNFIl09IiMiClNbIkJVSUxEX1NZU0NB TExTX01PRFVMRV9UUlVFIl09IiIKU1siSU5TVEFMTF9TUkZJXzM3X0ZBTFNFIl09IiIKU1siSU5T VEFMTF9TUkZJXzM3X1RSVUUiXT0iIyIKU1siSEFWRV9HVUlMRV9KU09OX0ZBTFNFIl09IiMiClNb IkhBVkVfR1VJTEVfSlNPTl9UUlVFIl09IiIKU1siR1VJTEVfVE9PTFMiXT0iL2dudS9zdG9yZS8y MHFzZ2lsMThoMWszem5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9ndWlsZCIKU1siR1VJ TEVfQ09ORklHIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAt cHJvZmlsZS9iaW4vZ3VpbGUtY29uZmlnIgpTWyJHVUlMRCJdPSIvZ251L3N0b3JlLzIwcXNnaWwx OGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2d1aWxkIgpTWyJHVUlMRSJdPSIv Z251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2d1 aWxlIgpTWyJHVUlMRV9MSUJTIl09Ii1ML2dudS9zdG9yZS9oeWsyaTdiOG13YnJiaXlxazVzZ3Jm Z2RzOXp2Y3JuNS1ndWlsZS0yLjAuMTEvbGliIC1ML2dudS9zdG9yZS9teTRhejcxZ3o4aXFkNHc4 a2IzNGtxN3ZsazNmY3ZobS1saWJnYy03LjQuMi9saWIgLWxndWlsZS0yLjAgLWxnYyIKU1siR1VJ TEVfQ0ZMQUdTIl09Ii1wdGhyZWFkIC1JL2dudS9zdG9yZS9oeWsyaTdiOG13YnJiaXlxazVzZ3Jm Z2RzOXp2Y3JuNS1ndWlsZS0yLjAuMTEvaW5jbHVkZS9ndWlsZS8yLjAiClNbIlBLR19DT05GSUdf TElCRElSIl09IiIKU1siUEtHX0NPTkZJR19QQVRIIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFr M3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9saWIvcGtnY29uZmlnOjovaG9tZS9zYXBpZW50 ZWNoLy5ndWl4LXByb2ZpbGUvbGliL3BrZ2NvbmZpZyIKU1siUEtHX0NPTkZJRyJdPSIvZ251L3N0 b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL3BrZy1jb25m aWciClNbIkNBTl9SVU5fVEVTVFNfRkFMU0UiXT0iIyIKU1siQ0FOX1JVTl9URVNUU19UUlVFIl09 IiIKU1siZ3VpeF9zYmluZGlyIl09Ii91c3IvbG9jYWwvc2JpbiIKU1siZ3VpeF9zeXNjb25mZGly Il09Ii91c3IvbG9jYWwvZXRjIgpTWyJndWl4X2xvY2Fsc3RhdGVkaXIiXT0iL3Vzci9sb2NhbC92 YXIiClNbImJhc2hjb21wbGV0aW9uZGlyIl09IiR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9u LmQiClNbInN0b3JlZGlyIl09Ii9nbnUvc3RvcmUiClNbImd1aXhfc3lzdGVtIl09Ing4Nl82NC1s aW51eCIKU1siU0VEIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3Fn ZHAtcHJvZmlsZS9iaW4vc2VkIgpTWyJndWlsZW1vZHVsZWRpciJdPSIke3ByZWZpeH0vc2hhcmUv Z3VpbGUvc2l0ZS8yLjAiClNbIlBPU1VCIl09InBvIgpTWyJMVExJQklOVEwiXT0iIgpTWyJMSUJJ TlRMIl09IiIKU1siSU5UTExJQlMiXT0iIgpTWyJMVExJQklDT05WIl09Ii1saWNvbnYiClNbIkxJ QklDT05WIl09Ii1saWNvbnYiClNbIklOVExfTUFDT1NYX0xJQlMiXT0iIgpTWyJob3N0X29zIl09 ImxpbnV4LWdudSIKU1siaG9zdF92ZW5kb3IiXT0idW5rbm93biIKU1siaG9zdF9jcHUiXT0ieDg2 XzY0IgpTWyJob3N0Il09Ing4Nl82NC11bmtub3duLWxpbnV4LWdudSIKU1siYnVpbGRfb3MiXT0i bGludXgtZ251IgpTWyJidWlsZF92ZW5kb3IiXT0idW5rbm93biIKU1siYnVpbGRfY3B1Il09Ing4 Nl82NCIKU1siYnVpbGQiXT0ieDg2XzY0LXVua25vd24tbGludXgtZ251IgpTWyJYR0VUVEVYVF9F WFRSQV9PUFRJT05TIl09IiIKU1siTVNHTUVSR0UiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWsz em5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9tc2dtZXJnZSIKU1siWEdFVFRFWFRfMDE1 Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9i aW4veGdldHRleHQiClNbIlhHRVRURVhUIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1 Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4veGdldHRleHQiClNbIkdNU0dGTVRfMDE1Il09Ii9n bnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNn Zm10IgpTWyJNU0dGTVRfMDE1Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkx a2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNnZm10IgpTWyJHTVNHRk1UIl09Ii9nbnUvc3RvcmUvMjBx c2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNnZm10IgpTWyJNU0dG TVQiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxl L2Jpbi9tc2dmbXQiClNbIkdFVFRFWFRfTUFDUk9fVkVSU0lPTiJdPSIwLjE4IgpTWyJVU0VfTkxT Il09InllcyIKU1siRUdSRVAiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUyd2p6eTFr Zml3cWdkcC1wcm9maWxlL2Jpbi9ncmVwIC1FIgpTWyJHUkVQIl09Ii9nbnUvc3RvcmUvMjBxc2dp bDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vZ3JlcCIKU1siQ1BQIl09Imdj YyAtRSIKU1siYW1fX2Zhc3RkZXBDQ19GQUxTRSJdPSIjIgpTWyJhbV9fZmFzdGRlcENDX1RSVUUi XT0iIgpTWyJDQ0RFUE1PREUiXT0iZGVwbW9kZT1nY2MzIgpTWyJhbV9fbm9kZXAiXT0iX25vIgpT WyJBTURFUEJBQ0tTTEFTSCJdPSJcXCIKU1siQU1ERVBfRkFMU0UiXT0iIyIKU1siQU1ERVBfVFJV RSJdPSIiClNbImFtX19xdW90ZSJdPSIiClNbImFtX19pbmNsdWRlIl09ImluY2x1ZGUiClNbIkRF UERJUiJdPSIuZGVwcyIKU1siT0JKRVhUIl09Im8iClNbIkVYRUVYVCJdPSIiClNbImFjX2N0X0ND Il09ImdjYyIKU1siQ1BQRkxBR1MiXT0iIgpTWyJMREZMQUdTIl09IiIKU1siQ0ZMQUdTIl09Ii1n IC1PMiIKU1siQ0MiXT0iZ2NjIgpTWyJBTV9CQUNLU0xBU0giXT0iXFwiClNbIkFNX0RFRkFVTFRf VkVSQk9TSVRZIl09IjAiClNbIkFNX0RFRkFVTFRfViJdPSIkKEFNX0RFRkFVTFRfVkVSQk9TSVRZ KSIKU1siQU1fViJdPSIkKFYpIgpTWyJhbV9fdW50YXIiXT0iJCR7VEFSLXRhcn0geGYgLSIKU1si YW1fX3RhciJdPSIkJHtUQVItdGFyfSBjaG9mIC0gXCIkJHRhcmRpclwiIgpTWyJBTVRBUiJdPSIk JHtUQVItdGFyfSIKU1siYW1fX2xlYWRpbmdfZG90Il09Ii4iClNbIlNFVF9NQUtFIl09IiIKU1si QVdLIl09Imdhd2siClNbIm1rZGlyX3AiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUy d2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9ta2RpciAtcCIKU1siTUtESVJfUCJdPSIvZ251L3N0 b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL21rZGlyIC1w IgpTWyJJTlNUQUxMX1NUUklQX1BST0dSQU0iXT0iJChpbnN0YWxsX3NoKSAtYyAtcyIKU1siU1RS SVAiXT0iIgpTWyJpbnN0YWxsX3NoIl09IiR7U0hFTEx9IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1 aXgvZ3VpeF93aXAvYnVpbGQtYXV4L2luc3RhbGwtc2giClNbIk1BS0VJTkZPIl09IiR7U0hFTEx9 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgbWFr ZWluZm8iClNbIkFVVE9IRUFERVIiXT0iJHtTSEVMTH0gL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC9idWlsZC1hdXgvbWlzc2luZyBhdXRvaGVhZGVyIgpTWyJBVVRPTUFLRSJdPSIk e1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNz aW5nIGF1dG9tYWtlLTEuMTUiClNbIkFVVE9DT05GIl09IiR7U0hFTEx9IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgYXV0b2NvbmYiClNbIkFDTE9D QUwiXT0iJHtTSEVMTH0gL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9idWlsZC1h dXgvbWlzc2luZyBhY2xvY2FsLTEuMTUiClNbIlZFUlNJT04iXT0iMC4xMC4wIgpTWyJQQUNLQUdF Il09Imd1aXgiClNbIkNZR1BBVEhfVyJdPSJlY2hvIgpTWyJhbV9faXNyYyJdPSIiClNbIklOU1RB TExfREFUQSJdPSIke0lOU1RBTEx9IC1tIDY0NCIKU1siSU5TVEFMTF9TQ1JJUFQiXT0iJHtJTlNU QUxMfSIKU1siSU5TVEFMTF9QUk9HUkFNIl09IiR7SU5TVEFMTH0iClNbInRhcmdldF9hbGlhcyJd PSIiClNbImhvc3RfYWxpYXMiXT0iIgpTWyJidWlsZF9hbGlhcyJdPSIiClNbIkxJQlMiXT0iIgpT WyJFQ0hPX1QiXT0iIgpTWyJFQ0hPX04iXT0iLW4iClNbIkVDSE9fQyJdPSIiClNbIkRFRlMiXT0i LURIQVZFX0NPTkZJR19IIgpTWyJtYW5kaXIiXT0iJHtkYXRhcm9vdGRpcn0vbWFuIgpTWyJsb2Nh bGVkaXIiXT0iJHtkYXRhcm9vdGRpcn0vbG9jYWxlIgpTWyJsaWJkaXIiXT0iJHtleGVjX3ByZWZp eH0vbGliIgpTWyJwc2RpciJdPSIke2RvY2Rpcn0iClNbInBkZmRpciJdPSIke2RvY2Rpcn0iClNb ImR2aWRpciJdPSIke2RvY2Rpcn0iClNbImh0bWxkaXIiXT0iJHtkb2NkaXJ9IgpTWyJpbmZvZGly Il09IiR7ZGF0YXJvb3RkaXJ9L2luZm8iClNbImRvY2RpciJdPSIke2RhdGFyb290ZGlyfS9kb2Mv JHtQQUNLQUdFX1RBUk5BTUV9IgpTWyJvbGRpbmNsdWRlZGlyIl09Ii91c3IvaW5jbHVkZSIKU1si aW5jbHVkZWRpciJdPSIke3ByZWZpeH0vaW5jbHVkZSIKU1sibG9jYWxzdGF0ZWRpciJdPSIke3By ZWZpeH0vdmFyIgpTWyJzaGFyZWRzdGF0ZWRpciJdPSIke3ByZWZpeH0vY29tIgpTWyJzeXNjb25m ZGlyIl09IiR7cHJlZml4fS9ldGMiClNbImRhdGFkaXIiXT0iJHtkYXRhcm9vdGRpcn0iClNbImRh dGFyb290ZGlyIl09IiR7cHJlZml4fS9zaGFyZSIKU1sibGliZXhlY2RpciJdPSIke2V4ZWNfcHJl Zml4fS9saWJleGVjIgpTWyJzYmluZGlyIl09IiR7ZXhlY19wcmVmaXh9L3NiaW4iClNbImJpbmRp ciJdPSIke2V4ZWNfcHJlZml4fS9iaW4iClNbInByb2dyYW1fdHJhbnNmb3JtX25hbWUiXT0icyx4 LHgsIgpTWyJwcmVmaXgiXT0iL3Vzci9sb2NhbCIKU1siZXhlY19wcmVmaXgiXT0iJHtwcmVmaXh9 IgpTWyJQQUNLQUdFX1VSTCJdPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpeC8iClNb IlBBQ0tBR0VfQlVHUkVQT1JUIl09ImJ1Zy1ndWl4QGdudS5vcmciClNbIlBBQ0tBR0VfU1RSSU5H Il09IkdOVSBHdWl4IDAuMTAuMCIKU1siUEFDS0FHRV9WRVJTSU9OIl09IjAuMTAuMCIKU1siUEFD S0FHRV9UQVJOQU1FIl09Imd1aXgiClNbIlBBQ0tBR0VfTkFNRSJdPSJHTlUgR3VpeCIKU1siUEFU SF9TRVBBUkFUT1IiXT0iOiIKU1siU0hFTEwiXT0iL2Jpbi9zaCIKX0FDQVdLCmNhdCA+PiIkYWNf dG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXld ID0gMQogIEZTID0gIgciCgp9CnsKICBsaW5lID0gJCAwCiAgbmZpZWxkcyA9IHNwbGl0KGxpbmUs IGZpZWxkLCAiQCIpCiAgc3Vic3RlZCA9IDAKICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCiAgZm9y IChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgewogICAga2V5ID0gZmllbGRbaV0KICAgIGtleWxl biA9IGxlbmd0aChrZXkpCiAgICBpZiAoU19pc19zZXRba2V5XSkgewogICAgICB2YWx1ZSA9IFNb a2V5XQogICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3Ry KGxpbmUsIGxlbiArIGtleWxlbiArIDMpCiAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVu Z3RoKGZpZWxkWysraV0pCiAgICAgIHN1YnN0ZWQgPSAxCiAgICB9IGVsc2UKICAgICAgbGVuICs9 IDEgKyBrZXlsZW4KICB9CgogIHByaW50IGxpbmUKfQoKX0FDQVdLCmlmIHNlZCAicy8kYWNfY3Iv LyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogIHNlZCAicy8kYWNfY3JcJC8v OyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCmVsc2UKICBjYXQKZmkgPCAiJGFjX3RtcC9zdWJz MS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQg bm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CmZpICMgdGVzdCAt biAiJENPTkZJR19GSUxFUyIKCiMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVS UyBzZWN0aW9uLgojIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09O RklHX0hFQURFUlMuCiMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5z dGF0dXMgTWFrZWZpbGUnLgppZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCmNhdCA+ IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fApCRUdJTiB7CkRbIlBBQ0tBR0VfTkFN RSJdPSIgXCJHTlUgR3VpeFwiIgpEWyJQQUNLQUdFX1RBUk5BTUUiXT0iIFwiZ3VpeFwiIgpEWyJQ QUNLQUdFX1ZFUlNJT04iXT0iIFwiMC4xMC4wXCIiCkRbIlBBQ0tBR0VfU1RSSU5HIl09IiBcIkdO VSBHdWl4IDAuMTAuMFwiIgpEWyJQQUNLQUdFX0JVR1JFUE9SVCJdPSIgXCJidWctZ3VpeEBnbnUu b3JnXCIiCkRbIlBBQ0tBR0VfVVJMIl09IiBcImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9n dWl4L1wiIgpEWyJQQUNLQUdFIl09IiBcImd1aXhcIiIKRFsiVkVSU0lPTiJdPSIgXCIwLjEwLjBc IiIKRFsiU1REQ19IRUFERVJTIl09IiAxIgpEWyJIQVZFX1NZU19UWVBFU19IIl09IiAxIgpEWyJI QVZFX1NZU19TVEFUX0giXT0iIDEiCkRbIkhBVkVfU1RETElCX0giXT0iIDEiCkRbIkhBVkVfU1RS SU5HX0giXT0iIDEiCkRbIkhBVkVfTUVNT1JZX0giXT0iIDEiCkRbIkhBVkVfU1RSSU5HU19IIl09 IiAxIgpEWyJIQVZFX0lOVFRZUEVTX0giXT0iIDEiCkRbIkhBVkVfU1RESU5UX0giXT0iIDEiCkRb IkhBVkVfVU5JU1REX0giXT0iIDEiCkRbIl9fRVhURU5TSU9OU19fIl09IiAxIgpEWyJfQUxMX1NP VVJDRSJdPSIgMSIKRFsiX0dOVV9TT1VSQ0UiXT0iIDEiCkRbIl9QT1NJWF9QVEhSRUFEX1NFTUFO VElDUyJdPSIgMSIKRFsiX1RBTkRFTV9TT1VSQ0UiXT0iIDEiCkRbIkVOQUJMRV9OTFMiXT0iIDEi CkRbIkhBVkVfR0VUVEVYVCJdPSIgMSIKRFsiSEFWRV9EQ0dFVFRFWFQiXT0iIDEiCkRbIkhBVkVf QlpMSUJfSCJdPSIgMSIKRFsiTklYX1ZFUlNJT04iXT0iIFwiMC4wLjBcIiIKRFsiU1lTVEVNIl09 IiBcIng4Nl82NC1saW51eFwiIgpEWyJIQVZFX0NIUk9PVCJdPSIgMSIKRFsiSEFWRV9VTlNIQVJF Il09IiAxIgpEWyJIQVZFX1NDSEVEX0giXT0iIDEiCkRbIkhBVkVfU1lTX1BBUkFNX0giXT0iIDEi CkRbIkhBVkVfU1lTX01PVU5UX0giXT0iIDEiCkRbIkhBVkVfU1lTX1NZU0NBTExfSCJdPSIgMSIK RFsiSEFWRV9MVVRJTUVTIl09IiAxIgpEWyJIQVZFX0xDSE9XTiJdPSIgMSIKRFsiSEFWRV9QT1NJ WF9GQUxMT0NBVEUiXT0iIDEiCkRbIkhBVkVfU0NIRURfU0VUQUZGSU5JVFkiXT0iIDEiCkRbIkhB VkVfU1RBVFZGUyJdPSIgMSIKRFsiSEFWRV9OQU5PU0xFRVAiXT0iIDEiCkRbIkhBVkVfU1RSU0lH TkFMIl09IiAxIgpEWyJDQU5fTElOS19TWU1MSU5LIl09IiAxIgpEWyJIQVZFX0xPQ0FMRSJdPSIg MSIKRFsiSEFWRV9TWVNfUEVSU09OQUxJVFlfSCJdPSIgMSIKRFsiSEFWRV9MSU5VWF9GU19IIl09 IiAxIgpEWyJHVUlYX1NVQlNUSVRVVEVfVVJMUyJdPSIgXCJodHRwczovL21pcnJvci5oeWRyYS5n bnUub3JnXCIiCkRbIkhBVkVfREFFTU9OX09GRkxPQURfSE9PSyJdPSIgMSIKICBmb3IgKGtleSBp biBEKSBEX2lzX3NldFtrZXldID0gMQogIEZTID0gIgciCn0KL15bXHQgXSojW1x0IF0qKGRlZmlu ZXx1bmRlZilbXHQgXStbX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5P UFFSU1RVVldYWVpdW19hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR UlNUVVZXWFlaMDEyMzQ1Njc4OV0qKFtcdCAoXXwkKS8gewogIGxpbmUgPSAkIDAKICBzcGxpdChs aW5lLCBhcmcsICIgIikKICBpZiAoYXJnWzFdID09ICIjIikgewogICAgZGVmdW5kZWYgPSBhcmdb Ml0KICAgIG1hYzEgPSBhcmdbM10KICB9IGVsc2UgewogICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJn WzFdLCAyKQogICAgbWFjMSA9IGFyZ1syXQogIH0KICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMp CiAgbWFjcm8gPSBtYWMyWzFdCiAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUs IGRlZnVuZGVmKSAtIDEpCiAgaWYgKERfaXNfc2V0W21hY3JvXSkgewogICAgIyBQcmVzZXJ2ZSB0 aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KICAgIHByaW50IHByZWZpeCAiZGVm aW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KICAgIG5leHQKICB9IGVsc2UgewogICAgIyBS ZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFt cGxlLAogICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZp bmVkIGFuZCByZXF1aXJlZAogICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdp bGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCiAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikg ewogICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCiAgICAgIG5l eHQKICAgIH0KICB9Cn0KeyBwcmludCB9Cl9BQ0FXSwogIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBu b3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQpmaSAjIHRlc3Qg LW4gIiRDT05GSUdfSEVBREVSUyIKCgpldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpI ICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTIgpzaGlmdApmb3IgYWNfdGFn CmRvCiAgY2FzZSAkYWNfdGFnIGluCiAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51 ZTs7CiAgZXNhYwogIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCiAgOltGSExdKjoqKTs7CiAgOkwq IHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVO TyIgNTs7CiAgOltGSF0tKSBhY190YWc9LTotOzsKICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRh Y190YWcuaW47OwogIGVzYWMKICBhY19zYXZlX0lGUz0kSUZTCiAgSUZTPToKICBzZXQgeCAkYWNf dGFnCiAgSUZTPSRhY19zYXZlX0lGUwogIHNoaWZ0CiAgYWNfZmlsZT0kMQogIHNoaWZ0CgogIGNh c2UgJGFjX21vZGUgaW4KICA6TCkgYWNfc291cmNlPSQxOzsKICA6W0ZIXSkKICAgIGFjX2ZpbGVf aW5wdXRzPQogICAgZm9yIGFjX2YKICAgIGRvCiAgICAgIGNhc2UgJGFjX2YgaW4KICAgICAgLSkg YWNfZj0iJGFjX3RtcC9zdGRpbiI7OwogICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0 IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQoJICMgKGlmIHRoZSBw YXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0 eWxlLAoJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCgkgdGVzdCAtZiAiJGFj X2YiIHx8CgkgICBjYXNlICRhY19mIGluCgkgICBbXFwvJF0qKSBmYWxzZTs7CgkgICAqKSB0ZXN0 IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CgkgICBlc2FjIHx8 CgkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRM SU5FTk8iIDU7OwogICAgICBlc2FjCiAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFz X2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKICAgICAgYXNf Zm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKICAgIGRvbmUKCiAgICAjIExldCdz IHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUu LCBkb24ndAogICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byBy ZWFkOgogICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAg Ki8KICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKCSAgJGFzX2VjaG8gIiQq IiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCglgJyBieSBjb25maWd1cmUuJwog ICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgogICAgICBjb25maWd1cmVfaW5wdXQ9 IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CiRhc19lY2hvICIkYXNf bWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQogICAgZmkKICAgICMgTmV1dHJhbGl6ZSBzcGVj aWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3Mu CiAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKICAgICpcJiogfCAqXHwqIHwgKlxcKiAp CiAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwK ICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAogICAgKikgYWNfc2VkX2NvbmZf aW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CiAgICBlc2FjCgogICAgY2FzZSAkYWNfdGFnIGluCiAg ICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAogICAgICB8fCBhc19mbl9lcnJv ciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKICAgIGVzYWMK ICAgIDs7CiAgZXNhYwoKICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKJGFz X2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKCSBY IiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAoJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkk JyBcfCBcCgkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiRhc19l Y2hvIFgiJGFjX2ZpbGUiIHwKICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8q JC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wpW14vXS4qL3sKCSAgICBz Ly9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXCkkL3sKCSAgICBzLy9cMS8KCSAgICBxCgkg IH0KCSAgL15YXChcL1wpLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICBzLy4qLy4vOyBx J2AKICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCiAgYWNfYnVpbGRkaXI9LgoKY2Fz ZSAiJGFjX2RpciIgaW4KLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFj X3RvcF9idWlsZF9wcmVmaXg9IDs7CiopCiAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNf ZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3Rvcnkg aW4gJGFjX2Rpcl9zdWZmaXguCiAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19k aXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCiAgY2FzZSAkYWNfdG9w X2J1aWxkZGlyX3N1YiBpbgogICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxk X3ByZWZpeD0gOzsKICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1 Yi8gOzsKICBlc2FjIDs7CmVzYWMKYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCmFjX2Fic19i dWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0 eToKYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CgpjYXNlICRzcmNkaXIgaW4K ICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCiAgICBhY19zcmNkaXI9LgogICAgYWNf dG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgogICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFj X3B3ZCA7OwogIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KICAgIGFjX3Ny Y2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CiAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKICAg IGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKICAqKSAjIFJlbGF0aXZlIG5hbWUuCiAgICBh Y19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKICAgIGFj X3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCiAgICBhY19hYnNfdG9wX3Ny Y2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKZXNhYwphY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3Ny Y2RpciRhY19kaXJfc3VmZml4CgoKICBjYXNlICRhY19tb2RlIGluCiAgOkYpCiAgIwogICMgQ09O RklHX0ZJTEUKICAjCgogIGNhc2UgJElOU1RBTEwgaW4KICBbXFwvJF0qIHwgPzpbXFwvXSogKSBh Y19JTlNUQUxMPSRJTlNUQUxMIDs7CiAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZp eCRJTlNUQUxMIDs7CiAgZXNhYwogIGFjX01LRElSX1A9JE1LRElSX1AKICBjYXNlICRNS0RJUl9Q IGluCiAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKICAqLyopIGFjX01LRElSX1A9JGFjX3RvcF9i dWlsZF9wcmVmaXgkTUtESVJfUCA7OwogIGVzYWMKIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qg a25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgojIEZJWE1FOiBUaGlzIGhhY2sgc2hv dWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KYWNfZGF0YXJvb3RkaXJfaGFj az07IGFjX2RhdGFyb290ZGlyX3NlZW49CmFjX3NlZF9kYXRhcm9vdD0nCi9kYXRhcm9vdGRpci8g ewogIHAKICBxCn0KL0BkYXRhZGlyQC9wCi9AZG9jZGlyQC9wCi9AaW5mb2RpckAvcAovQGxvY2Fs ZWRpckAvcAovQG1hbmRpckAvcCcKY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJv b3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgoqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9z ZWVuPXllczs7CipAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJA KnwqQG1hbmRpckAqKQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog V0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRp ciBzZXR0aW5nIiA+JjUKJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRz IHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQogIGFjX2Rh dGFyb290ZGlyX2hhY2s9JwogIHMmQGRhdGFkaXJAJiR7ZGF0YXJvb3RkaXJ9JmcKICBzJkBkb2Nk aXJAJiR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0mZwogIHMmQGluZm9kaXJA JiR7ZGF0YXJvb3RkaXJ9L2luZm8mZwogIHMmQGxvY2FsZWRpckAmJHtkYXRhcm9vdGRpcn0vbG9j YWxlJmcKICBzJkBtYW5kaXJAJiR7ZGF0YXJvb3RkaXJ9L21hbiZnCiAgcyZcJHtkYXRhcm9vdGRp cn0mJHtwcmVmaXh9L3NoYXJlJmcnIDs7CmVzYWMKYWNfc2VkX2V4dHJhPSIvXlsJIF0qVlBBVEhb CSBdKj1bCSBdKi97CmgKcy8vLwpzL14vOi8Kcy9bCSBdKiQvOi8Kcy86XCQoc3JjZGlyKTovOi9n CnMvOlwke3NyY2Rpcn06LzovZwpzLzpAc3JjZGlyQDovOi9nCnMvXjoqLy8Kcy86KiQvLwp4CnMv XCg9WwkgXSpcKS4qL1wxLwpHCnMvXG4vLwpzL15bXj1dKj1bCSBdKiQvLwp9Cgo6dAovQFthLXpB LVpfXVthLXpBLVpfMC05XSpALyFiCnN8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lu cHV0fDt0IHQKcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CnMmQHRv cF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKcyZAc3JjZGlyQCYkYWNf c3JjZGlyJjt0IHQKcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdApzJkB0b3Bfc3Jj ZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CnMmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9z cmNkaXImO3QgdApzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKcyZAYWJzX2J1aWxkZGly QCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3Bf YnVpbGRkaXImO3QgdApzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CnMmQE1LRElSX1BAJiRh Y19NS0RJUl9QJjt0IHQKJGFjX2RhdGFyb290ZGlyX2hhY2sKIgpldmFsIHNlZCBcIlwkYWNfc2Vk X2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBc CiAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19m aWxlIiAiJExJTkVOTyIgNQoKdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJv b3RkaXJfc2VlbiIgJiYKICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIk YWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgogIHsgYWNfb3V0PWBzZWQgLW4g Jy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKICAgICAgIiRhY190bXAvb3V0ImA7IHRl c3QgLXogIiRhY19vdXQiOyB9ICYmCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFy aWFibGUgXGBkYXRhcm9vdGRpcicKd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNl IG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzog JGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3Rk aXInCndoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMg ZGVmaW5lZCIgPiYyO30KCiAgcm0gLWYgIiRhY190bXAvc3RkaW4iCiAgY2FzZSAkYWNfZmlsZSBp bgogIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OwogICopIHJt IC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKICBlc2FjIFwK ICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8i IDUKIDs7CiAgOkgpCiAgIwogICMgQ09ORklHX0hFQURFUgogICMKICBpZiB0ZXN0IHgiJGFjX2Zp bGUiICE9IHgtOyB0aGVuCiAgICB7CiAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0 ICAqLyIgXAogICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRh Y19maWxlX2lucHV0cyIKICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCiAgICAgIHx8IGFzX2Zu X2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogICAgaWYg ZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBp cyB1bmNoYW5nZWQiID4mNQokYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQi ID4mNjt9CiAgICBlbHNlCiAgICAgIHJtIC1mICIkYWNfZmlsZSIKICAgICAgbXYgIiRhY190bXAv Y29uZmlnLmgiICIkYWNfZmlsZSIgXAoJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVh dGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICBmaQogIGVsc2UKICAgICRhc19lY2hvICIvKiAk Y29uZmlndXJlX2lucHV0ICAqLyIgXAogICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2Rl ZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAogICAgICB8fCBhc19mbl9lcnJvciAkPyAi Y291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQogIGZpCiMgQ29tcHV0ZSAiJGFjX2ZpbGUi J3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgpfYW1fYXJnPSIkYWNfZmlsZSIKX2FtX3N0YW1w X2NvdW50PTEKZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgY2FzZSAk X2FtX2hlYWRlciBpbgogICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKICAgICAgYnJlYWsgOzsK ICAgICogKQogICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFg IDs7CiAgZXNhYwpkb25lCmVjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5h bWUgLS0gIiRfYW1fYXJnIiB8fAokYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8v KlteL11bXi9dKi8qJCcgXHwgXAoJIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCgkg WCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8 IC4gMj4vZGV2L251bGwgfHwKJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAogICAgc2VkICcvXlhcKC4q W14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15Y XChcL1wvXClbXi9dLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9cKSQv ewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXCkuKi97CgkgICAgcy8vXDEvCgkg ICAgcQoJICB9CgkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAogOzsKCiAg OkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAk YWNfZmlsZSBjb21tYW5kcyIgPiY1CiRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmls ZSBjb21tYW5kcyIgPiY2O30KIDs7CiAgZXNhYwoKCiAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGlu CiAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKICAjIE9s ZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdo ZW4gZmlsZXMKICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUg YW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCiAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCiAg Y2FzZSAkQ09ORklHX0ZJTEVTIGluCiAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIg OzsKICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKICBlc2FjCiAgc2hpZnQKICBmb3IgbWYK ICBkbwogICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmls ZS4KICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCiAgICAjIENoZWNrIHdo ZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgogICAg IyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkICdNYWtlZmlsZS5pbicsIGJ1 dAogICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRo ZSBmaWxlIGNvbnRlbnQuCiAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91 Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwogICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBh ZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KICAgICMgR3JlcCdp bmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5l CiAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3Rh bmQgYXQgbGVhc3QgNDAwMC4KICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9t YWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgZGly cGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14v XVwpLy8qW14vXVteL10qLyokJyBcfCBcCgkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCgkg WCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCgkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYv bnVsbCB8fAokYXNfZWNobyBYIiRtZiIgfAogICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9d W14vXSpcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXClbXi9dLiov ewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9cKSQvewoJICAgIHMvL1wxLwoJ ICAgIHEKCSAgfQoJICAvXlhcKFwvXCkuKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIHMv LiovLi87IHEnYAogICAgZWxzZQogICAgICBjb250aW51ZQogICAgZmkKICAgICMgRXh0cmFjdCB0 aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCiAgICAj IGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyAnbWFrZScuCiAgICBERVBESVI9YHNl ZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAogICAgdGVzdCAteiAiJERFUERJUiIgJiYg Y29udGludWUKICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8 ICIkbWYiYAogICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQogICAgYW1fX3F1 b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKICAgICMgRmluZCBhbGwg ZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKICAg ICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNl IGl0IGlzIHRoZQogICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikg dG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKICAgICMgZXhwYW5zaW9uLgogICAgZm9yIGZpbGUg aW4gYHNlZCAtbiAiCiAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIp LipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAoJIHNlZCAtZSAncy9cJChERVBESVIp LyciJERFUERJUiInL2cnYDsgZG8KICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlz dHMuCiAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQogICAgICBmZGly PWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8CiRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14v XVwpLy8qW14vXVteL10qLyokJyBcfCBcCgkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwK CSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAoJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAy Pi9kZXYvbnVsbCB8fAokYXNfZWNobyBYIiRmaWxlIiB8CiAgICBzZWQgJy9eWFwoLipbXi9dXClc L1wvKlteL11bXi9dKlwvKiQvewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9c KVteL10uKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wpJC97CgkgICAg cy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cKS4qL3sKCSAgICBzLy9cMS8KCSAgICBxCgkg IH0KCSAgcy8uKi8uLzsgcSdgCiAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtk aXJfcAogICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgogICAgICBlY2hvICcj IGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKICAgIGRvbmUKICBkb25lCn0KIDs7CiAgICAicG8t ZGlyZWN0b3JpZXMiOkMpCiAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbwogICAg ICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCiAgICAgIGNhc2UgIiRh Y19maWxlIiBpbgogICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6 LiolJSdgIDs7CiAgICAgIGVzYWMKICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZp bGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCiAgICAgIGNhc2UgIiRhY19maWxl IiBpbiAqL01ha2VmaWxlLmluKQogICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgog ICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKICAg ICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKICAg ICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydg CiAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGly LgogICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KICAgICAg ICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIi CiAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KICAgICAgICAgIC4pICB0b3Bfc3Jj ZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKICAgICAgICAgIC8qKSB0b3Bfc3Jj ZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OwogICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19k b3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKICAgICAgICBlc2FjCiAgICAgICAgIyBUcmVhdCBhIGRp cmVjdG9yeSBhcyBhIFBPIGRpcmVjdG9yeSBpZiBhbmQgb25seSBpZiBpdCBoYXMgYQogICAgICAg ICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBs ZSBQTwogICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRp ZmZlcmVudCBsb2NhdGlvbnMuCiAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8k YWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgogICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklM RVMiCiAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcg JGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKICAg ICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAt ZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxc XFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIK ICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKICAgICAgICAgICMgQUxMX0xJ TkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVw ZW5kCiAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNp ZmllZCBjb25maWd1cmF0aW9uCiAgICAgICAgICAjIHBhcmFtZXRlcnMuCiAgICAgICAgICBpZiB0 ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KICAgICAgICAg ICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1 YWdlcy4KICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhl bgogICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5n IEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGlu ZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCiAgICAgICAgICAgIGZp CiAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIk YWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCiAgICAgICAgICAgICMgSGlkZSB0aGUg QUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCiAgICAgICAgICAgIGV2 YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKICAgICAgICAgICAgUE9NQUtFRklMRURF UFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgogICAgICAgICAgZWxzZQogICAgICAgICAgICAj IFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmlu LgogICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9t YWtlIDwgMS41LgogICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExf TElOR1VBUycKICAgICAgICAgIGZpCiAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwogICAgICAg ICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQo bGFuZykucG8pCiAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUwogICAgICAgICAgIyBh cyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUp CiAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCiAgICAgICAgICAjIGFzICAgICAgJChm b3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKICAgICAgICAgICMgQ29t cHV0ZSBHTU9GSUxFUwogICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9M SU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQogICAgICAgICAgY2FzZSAiJGFjX2dpdmVu X3NyY2RpciIgaW4KICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OwogICAgICAgICAgICAqKSBz cmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CiAgICAgICAgICBlc2FjCiAgICAgICAgICBQT0ZJTEVT PQogICAgICAgICAgVVBEQVRFUE9GSUxFUz0KICAgICAgICAgIERVTU1ZUE9GSUxFUz0KICAgICAg ICAgIEdNT0ZJTEVTPQogICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwogICAg ICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCiAgICAgICAgICAg IFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKICAgICAgICAg ICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKICAgICAgICAgICAgR01P RklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgogICAgICAgICAgZG9uZQogICAg ICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBM SU5HVUFTCiAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICAgICAgSU5TVF9M SU5HVUFTPQogICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgogICAgICAg ICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwogICAgICAgICAgICAgIHVz ZWl0PW5vCiAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhl bgogICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCiAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgog ICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVk bGFuZ3VhZ2VzOyBkbwogICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFs b2cgaWYgZGVzaXJlZGxhbmcgaXMKICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVz ZW50bGFuZywgb3IKICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxh bmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAogICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRs YW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCiAgICAgICAgICAgICAg ICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRh bG9nKS4KICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KICAgICAgICAgICAg ICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OwogICAgICAgICAgICAgICAgZXNhYwog ICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhl bgogICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFu ZyIKICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCiAgICAgICAgICBmaQogICAgICAg ICAgQ0FUQUxPR1M9CiAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgog ICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbwogICAgICAgICAgICAgIENB VEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgogICAgICAgICAgICBkb25lCiAgICAgICAgICBm aQogICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRh Y19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCiAgICAg ICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFr ZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVT QHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUg InN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9G SUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURF UFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9N YWtlZmlsZSIKICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1 bGVzLSo7IGRvCiAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgogICAgICAgICAgICAg IGNhc2UgIiRmIiBpbgogICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKICAg ICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OwogICAgICAg ICAgICAgIGVzYWMKICAgICAgICAgICAgZmkKICAgICAgICAgIGRvbmUKICAgICAgICBmaQogICAg ICAgIDs7CiAgICAgIGVzYWMKICAgIGRvbmUgOzsKICAgICJuaXgvc2NyaXB0cy9saXN0LXJ1bnRp bWUtcm9vdHMiOkYpIGNobW9kICt4IG5peC9zY3JpcHRzL2xpc3QtcnVudGltZS1yb290cyA7Owog ICAgIm5peC9zY3JpcHRzL3N1YnN0aXR1dGUiOkYpIGNobW9kICt4IG5peC9zY3JpcHRzL3N1YnN0 aXR1dGUgOzsKICAgICJuaXgvc2NyaXB0cy9ndWl4LWF1dGhlbnRpY2F0ZSI6RikgY2htb2QgK3gg bml4L3NjcmlwdHMvZ3VpeC1hdXRoZW50aWNhdGUgOzsKICAgICJuaXgvc2NyaXB0cy9vZmZsb2Fk IjpGKSBjaG1vZCAreCBuaXgvc2NyaXB0cy9vZmZsb2FkIDs7CiAgICAic2NyaXB0cy9ndWl4IjpG KSBjaG1vZCAreCBzY3JpcHRzL2d1aXggOzsKICAgICJ0ZXN0LWVudiI6RikgY2htb2QgK3ggdGVz dC1lbnYgOzsKICAgICJwcmUtaW5zdC1lbnYiOkYpIGNobW9kICt4IHByZS1pbnN0LWVudiA7OwoK ICBlc2FjCmRvbmUgIyBmb3IgYWNfdGFnCgoKYXNfZm5fZXhpdCAwCg== --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/x-log Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=test-suite.log ======================================= GNU Guix 0.10.0: ./test-suite.log ======================================= # TOTAL: 604 # PASS: 582 # SKIP: 19 # XFAIL: 0 # FAIL: 3 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 SKIP: tests/base32 ================== sh: nix-hash: command not found test-name: bytevector->base32-string location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:48 source: + (test-assert + "bytevector->base32-string" + (fold (lambda (bv expected result) + (and result + (string=? + (bytevector->base32-string bv) + expected))) + #t + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")) + '("" + "my" + "mzxq" + "mzxw6" + "mzxw6yq" + "mzxw6ytb" + "mzxw6ytboi"))) actual-value: #t result: PASS test-name: base32-string->bytevector location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:65 source: + (test-assert + "base32-string->bytevector" + (every (lambda (bv) + (equal? + (base32-string->bytevector + (bytevector->base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: nix-base32-string->bytevector location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:73 source: + (test-assert + "nix-base32-string->bytevector" + (every (lambda (bv) + (equal? + (nix-base32-string->bytevector + (bytevector->nix-base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: &invalid-base32-character location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:81 source: + (test-equal + "&invalid-base32-character" + #\e + (guard (c ((invalid-base32-character? c) + (invalid-base32-character-value c))) + (nix-base32-string->bytevector + (string-append (make-string 51 #\a) "e")))) expected-value: e actual-value: e result: PASS test-name: sha256 & bytevector->nix-base32-string location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:92 source: + (test-assert + "sha256 & bytevector->nix-base32-string" + (let ((file (search-path %load-path "tests/test.drv"))) + (equal? + (bytevector->nix-base32-string + (sha256 + (call-with-input-file file get-bytevector-all))) + (let* ((c (format + #f + "~a --type sha256 --base32 --flat \"~a\"" + %nix-hash + file)) + (p (open-input-pipe c)) + (l (read-line p))) + (close-pipe p) + l)))) result: SKIP SKIP: tests/cpio ================ test-name: file->cpio-header + write-cpio-header + read-cpio-header location: /home/sapientech/Dev/guix/guix_wip/tests/cpio.scm:37 source: + (test-assert + "file->cpio-header + write-cpio-header + read-cpio-header" + (let* ((file (search-path %load-path "guix.scm")) + (header (file->cpio-header file))) + (call-with-values + (lambda () (open-bytevector-output-port)) + (lambda (port get-bv) + (write-cpio-header header port) + (let ((port (open-bytevector-input-port (get-bv)))) + (equal? header (read-cpio-header port))))))) actual-value: #t result: PASS test-name: bit-identical to GNU cpio's output location: /home/sapientech/Dev/guix/guix_wip/tests/cpio.scm:49 source: + (test-assert + "bit-identical to GNU cpio's output" + (call-with-temporary-output-file + (lambda (link _) + (delete-file link) + (symlink "chbouib" link) + (let ((files (cons* "/" + (canonicalize-path + (dirname (search-path %load-path "guix.scm"))) + link + (map (compose + canonicalize-path + (cut search-path %load-path <>)) + '("guix.scm" + "guix/build/syscalls.scm" + "guix/packages.scm"))))) + (call-with-temporary-output-file + (lambda (ref-file _) + (let ((pipe (open-pipe* + OPEN_WRITE + %cpio-program + "-o" + "-O" + ref-file + "-H" + "newc" + "--null"))) + (for-each + (lambda (file) (format pipe "~a\x00" file)) + files) + (and (zero? (close-pipe pipe)) + (call-with-temporary-output-file + (lambda (file port) + (write-cpio-archive files port) + (close-port port) + (or (file=? ref-file file) + (throw 'cpio-archives-differ + files + ref-file + file + (stat:size (stat ref-file)) + (stat:size (stat file)))))))))))))) result: SKIP random seed for tests: 1469939214 SKIP: tests/snix ================ test-name: factorize-uri location: /home/sapientech/Dev/guix/guix_wip/tests/snix.scm:36 source: + (test-assert + "factorize-uri" + (every? + (match-lambda + ((uri version '-> expected) + (equal? (factorize-uri uri version) expected))) + '(("http://example.com/foo.tgz" + "1.0" + -> + "http://example.com/foo.tgz") + ("http://example.com/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/foo-" version ".tgz")) + ("http://example.com/2.8/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/" + version + "/foo-" + version + ".tgz"))))) actual-value: #t result: PASS test-name: nixpkgs->guix-package location: /home/sapientech/Dev/guix/guix_wip/tests/snix.scm:54 source: + (test-assert + "nixpkgs->guix-package" + (match (nixpkgs->guix-package + %nixpkgs-directory + "guile") + (('package + ('name "guile") + ('version (? string?)) + ('source ('origin _ ...)) + ('build-system _) + ('inputs ('quasiquote (inputs ...))) + ('propagated-inputs ('quasiquote (pinputs ...))) + ('home-page (? string?)) + ('synopsis (? string?)) + ('description (? string?)) + ('license (? symbol?))) + (and (member '("libffi" ,libffi) inputs) + (member '("gmp" ,gmp) pinputs) + #t)) + (x (pk 'fail x #f)))) result: SKIP FAIL: tests/store ================= test-name: store-path-hash-part location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:51 source: + (test-equal + "store-path-hash-part" + "283gqy39v3g9dxjy26rynl0zls82fmcg" + (store-path-hash-part + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: 283gqy39v3g9dxjy26rynl0zls82fmcg actual-value: 283gqy39v3g9dxjy26rynl0zls82fmcg result: PASS test-name: store-path-hash-part #f location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:57 source: + (test-equal + "store-path-hash-part #f" + #f + (store-path-hash-part + (string-append + (%store-prefix) + "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: #f actual-value: #f result: PASS test-name: store-path-package-name location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:63 source: + (test-equal + "store-path-package-name" + "guile-2.0.7" + (store-path-package-name + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: guile-2.0.7 actual-value: guile-2.0.7 result: PASS test-name: store-path-package-name #f location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:69 source: + (test-equal + "store-path-package-name #f" + #f + (store-path-package-name + "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")) expected-value: #f actual-value: #f result: PASS test-name: direct-store-path? location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:74 source: + (test-assert + "direct-store-path?" + (and (direct-store-path? + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")) + (not (direct-store-path? + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7/bin/guile"))) + (not (direct-store-path? (%store-prefix))))) actual-value: #t result: PASS test-name: valid-path? live location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:86 source: + (test-assert + "valid-path? live" + (let ((p (add-text-to-store %store "hello" "hello, world"))) + (valid-path? %store p))) actual-value: #t result: PASS test-name: valid-path? false location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:90 source: + (test-assert + "valid-path? false" + (not (valid-path? + %store + (string-append + (%store-prefix) + "/" + (make-string 32 #\e) + "-foobar")))) actual-value: #t result: PASS test-name: valid-path? error location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:95 source: + (test-assert + "valid-path? error" + (with-store + s + (guard (c ((nix-protocol-error? c) #t)) + (valid-path? s "foo") + #f))) actual-value: #t result: PASS test-name: valid-path? recovery location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:101 source: + (test-assert + "valid-path? recovery" + (with-store + s + (let-syntax ((true-if-error + (syntax-rules () + ((_ exp) + (guard (c ((nix-protocol-error? c) #t)) exp #f))))) + (and (true-if-error (valid-path? s "foo")) + (true-if-error (valid-path? s "bar")) + (true-if-error (valid-path? s "baz")) + (true-if-error (valid-path? s "chbouib")) + (valid-path? + s + (add-text-to-store s "valid" "yeah")))))) actual-value: #t result: PASS test-name: hash-part->path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:118 source: + (test-assert + "hash-part->path" + (let ((p (add-text-to-store %store "hello" "hello, world"))) + (equal? + (hash-part->path %store (store-path-hash-part p)) + p))) actual-value: #t result: PASS test-name: dead-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:123 source: + (test-assert + "dead-paths" + (let ((p (add-text-to-store + %store + "random-text" + (random-text)))) + (->bool (member p (dead-paths %store))))) random seed for tests: 1469938959 finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11095' determining live/dead paths... actual-value: #t result: PASS test-name: permanent root location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:144 source: + (test-assert + "permanent root" + (let* ((p (with-store + store + (let ((p (add-text-to-store + store + "random-text" + (random-text)))) + (add-permanent-root p) + (add-permanent-root p) + p)))) + (and (member p (live-paths %store)) + (begin + (remove-permanent-root p) + (->bool (member p (dead-paths %store))))))) finding garbage collector roots... determining live/dead paths... finding garbage collector roots... determining live/dead paths... actual-value: #t result: PASS test-name: dead path can be explicitly collected location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:156 source: + (test-assert + "dead path can be explicitly collected" + (let ((p (add-text-to-store + %store + "random-text" + (random-text) + '()))) + (let-values + (((paths freed) (delete-paths %store (list p)))) + (and (equal? paths (list p)) + (> freed 0) + (not (file-exists? p)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: add-text-to-store vs. delete-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:164 source: + (test-assert + "add-text-to-store vs. delete-paths" + (with-store + store + (let* ((text (random-text)) + (path (add-text-to-store store "delete-me" text)) + (deleted (delete-paths store (list path))) + (path2 (add-text-to-store store "delete-me" text))) + (and (string=? path path2) + (equal? deleted (list path)) + (valid-path? store path) + (file-exists? path))))) finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11111' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/r11ng87nwwzjwb5qxkyg8nbayhwrqfxr-delete-me' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: #t result: PASS test-name: add-to-store vs. delete-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:177 source: + (test-assert + "add-to-store vs. delete-paths" + (with-store + store + (let* ((file (search-path %load-path "guix.scm")) + (path (add-to-store store "delete-me" #t "sha256" file)) + (deleted (delete-paths store (list path))) + (path2 (add-to-store store "delete-me" #t "sha256" file))) + (and (string=? path path2) + (equal? deleted (list path)) + (valid-path? store path) + (file-exists? path))))) finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11115' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/57nhqlbqv5kh4zwr2vvdk3xyh741ynri-delete-me' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: #t result: PASS test-name: references location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:189 source: + (test-assert + "references" + (let* ((t1 (add-text-to-store + %store + "random1" + (random-text))) + (t2 (add-text-to-store + %store + "random2" + (random-text) + (list t1)))) + (and (equal? (list t1) (references %store t2)) + (equal? (list t2) (referrers %store t1)) + (null? (references %store t1)) + (null? (referrers %store t2))))) actual-value: #t result: PASS test-name: references/substitutes missing reference info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:199 source: + (test-assert + "references/substitutes missing reference info" + (with-store + s + (set-build-options s #:use-substitutes? #f) + (guard (c ((nix-protocol-error? c) #t)) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--help") + #:inputs + `((,b))))) + (references/substitutes + s + (list (derivation->output-path d) b)) + #f)))) actual-value: #t result: PASS test-name: references/substitutes with substitute info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:211 source: + (test-assert + "references/substitutes with substitute info" + (with-store + s + (set-build-options s #:use-substitutes? #t) + (let* ((t1 (add-text-to-store s "random1" (random-text))) + (t2 (add-text-to-store + s + "random2" + (random-text) + (list t1))) + (t3 (add-text-to-store + s + "build" + "echo -n $t2 > $out")) + (b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + `("-e" ,t3) + #:inputs + `((,b) (,t3) (,t2)) + #:env-vars + `(("t2" unquote t2)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (sha256 => (sha256 (string->utf8 t2))) + (references => (list t2)) + (equal? + (references/substitutes s (list o t3 t2 t1)) + `((,t2) () (,t1) ())))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable actual-value: #t result: PASS test-name: substitutable-path-info when substitutes are turned off location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:235 source: + (test-equal + "substitutable-path-info when substitutes are turned off" + '() + (with-store + s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--version") + #:inputs + `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (substitutable-path-info s (list o)))))) expected-value: () actual-value: () result: PASS test-name: substitutable-paths when substitutes are turned off location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:248 source: + (test-equal + "substitutable-paths when substitutes are turned off" + '() + (with-store + s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--version") + #:inputs + `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (substitutable-paths s (list o)))))) expected-value: () actual-value: () result: PASS test-name: requisites location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:261 source: + (test-assert + "requisites" + (let* ((t1 (add-text-to-store + %store + "random1" + (random-text) + '())) + (t2 (add-text-to-store + %store + "random2" + (random-text) + (list t1))) + (t3 (add-text-to-store + %store + "random3" + (random-text) + (list t2))) + (t4 (add-text-to-store + %store + "random4" + (random-text) + (list t1 t3)))) + (define (same? x y) + (and (= (length x) (length y)) + (lset= equal? x y))) + (and (same? (requisites %store (list t1)) (list t1)) + (same? (requisites %store (list t2)) + (list t1 t2)) + (same? (requisites %store (list t3)) + (list t1 t2 t3)) + (same? (requisites %store (list t4)) + (list t1 t2 t3 t4)) + (same? (requisites %store (list t1 t2 t3 t4)) + (list t1 t2 t3 t4))))) actual-value: #t result: PASS test-name: derivers location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:281 source: + (test-assert + "derivers" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (equal? + (query-derivation-outputs + %store + (derivation-file-name d)) + (list o)) + (equal? + (valid-derivers %store o) + (list (derivation-file-name d)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/v90wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/v9//0wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/v90wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv - actual-value: #t result: PASS test-name: topologically-sorted, one item location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:297 source: + (test-assert + "topologically-sorted, one item" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (s (topologically-sorted %store (list d)))) + (equal? s (list a b c d)))) actual-value: #t result: PASS test-name: topologically-sorted, several items location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:305 source: + (test-assert + "topologically-sorted, several items" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (s1 (topologically-sorted %store (list d a c b))) + (s2 (topologically-sorted %store (list b d c a b d)))) + (equal? s1 s2 (list a b c d)))) actual-value: #t result: PASS test-name: topologically-sorted, more difficult location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:314 source: + (test-assert + "topologically-sorted, more difficult" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (w (add-text-to-store %store "w" "w")) + (x (add-text-to-store %store "x" "x" (list w))) + (y (add-text-to-store %store "y" "y" (list x d))) + (s1 (topologically-sorted %store (list y))) + (s2 (topologically-sorted %store (list c y))) + (s3 (topologically-sorted + %store + (cons y (references %store y))))) + (let* ((x-then-d? + (equal? (references %store y) (list x d)))) + (and (equal? + s1 + (if x-then-d? + (list w x a b c d y) + (list a b c d w x y))) + (equal? + s2 + (if x-then-d? + (list a b c w x d y) + (list a b c d w x y))) + (lset= string=? s1 s3))))) actual-value: #t result: PASS test-name: current-build-output-port, UTF-8 location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:338 source: + (test-assert + "current-build-output-port, UTF-8" + (string-contains + (with-fluids + ((%default-port-encoding "UTF-8")) + (call-with-output-string + (lambda (port) + (parameterize + ((current-build-output-port port)) + (let* ((s "Here\u2019s a Greek letter: \u03bb.") + (d (build-expression->derivation + %store + "foo" + `(display ,s) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system))))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list d)))))))) + "Here\u2019s a Greek letter: \u03bb.")) actual-value: 231 result: PASS test-name: current-build-output-port, UTF-8 + garbage location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:354 source: + (test-assert + "current-build-output-port, UTF-8 + garbage" + (string-contains + (with-fluids + ((%default-port-encoding "UTF-8")) + (call-with-output-string + (lambda (port) + (parameterize + ((current-build-output-port port)) + (let ((d (build-expression->derivation + %store + "foo" + `(begin + (use-modules (rnrs io ports)) + (display "garbage: ") + (put-bytevector (current-output-port) #vu8(128)) + (display "lambda: \u03bb\n")) + #:guile-for-build + (package-derivation %store %bootstrap-guile)))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list d)))))))) + "garbage: ?lambda: \u03bb")) actual-value: 231 result: PASS test-name: log-file, derivation location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:374 source: + (test-assert + "log-file, derivation" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s))))) + (and (build-derivations %store (list d)) + (file-exists? + (pk (log-file %store (derivation-file-name d))))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/rhr8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/rh//r8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/rhr8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv - ;;; ("/home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/rh/r8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv.bz2") actual-value: #t result: PASS test-name: log-file, output file name location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:386 source: + (test-assert + "log-file, output file name" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (file-exists? (pk (log-file %store o))) + (string=? + (log-file %store (derivation-file-name d)) + (log-file %store o))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fraav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fr//aav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fraav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv - ;;; ("/home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fr/aav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv.bz2") actual-value: #t result: PASS test-name: no substitutes location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:401 source: + (test-assert + "no substitutes" + (with-store + s + (let* ((d1 (package-derivation + s + %bootstrap-guile + (%current-system))) + (d2 (package-derivation + s + %bootstrap-glibc + (%current-system))) + (o (map derivation->output-path (list d1 d2)))) + (set-build-options s #:use-substitutes? #f) + (and (not (has-substitutes? s (derivation-file-name d1))) + (not (has-substitutes? s (derivation-file-name d2))) + (null? (substitutable-paths s o)) + (null? (substitutable-path-info s o)))))) actual-value: #t result: PASS test-name: build-things with output path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:412 source: + (test-assert + "build-things with output path" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (set-build-options s #:use-substitutes? #f) + (build-things s (list o)) + (not (valid-path? s o))))) actual-value: #t result: PASS test-name: substitute query location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:432 source: + (test-assert + "substitute query" + (with-store + s + (let* ((d (package-derivation + s + %bootstrap-guile + (%current-system))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (false-if-exception + (delete-file-recursively + (string-append + (getenv "XDG_CACHE_HOME") + "/guix/substitute"))) + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (equal? + (list o) + (substitutable-paths s (list o))) + (match (pk 'spi (substitutable-path-info s (list o))) + (((? substitutable? s)) + (and (string=? + (substitutable-deriver s) + (derivation-file-name d)) + (null? (substitutable-references s)) + (equal? (substitutable-nar-size s) 1234))))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable ;;; (spi (#< path: "/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0" deriver: "/home/sapientech/Dev/guix/guix_wip/test-tmp/store/bjihchailclirz3310dqypibjg0happm-guile-bootstrap-2.0.drv" refs: () dl-size: 0 nar-size: 1234>)) actual-value: #t result: PASS test-name: substitute query, alternating URLs location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:456 source: + (test-assert + "substitute query, alternating URLs" + (let* ((d (with-store + s + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (false-if-exception + (delete-file-recursively + (string-append + (getenv "XDG_CACHE_HOME") + "/guix/substitute"))) + (and (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (has-substitutes? s o)) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (list "http://does-not-exist")) + (not (has-substitutes? s o))) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (has-substitutes? s o)) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + '()) + (not (has-substitutes? s o))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable substitute: Backtrace: substitute: In ice-9/boot-9.scm: substitute: 157: 9 [catch #t # ...] substitute: In unknown file: substitute: ?: 8 [apply-smob/1 #] substitute: In ice-9/boot-9.scm: substitute: 63: 7 [call-with-prompt prompt0 ...] substitute: In ice-9/eval.scm: substitute: 432: 6 [eval # #] substitute: In ice-9/boot-9.scm: substitute: 2401: 5 [save-module-excursion #] substitute: 4050: 4 [#] substitute: 1724: 3 [%start-stack load-stack ...] substitute: 1729: 2 [#] substitute: In unknown file: substitute: ?: 1 [primitive-load "/home/sapientech/Dev/guix/guix_wip/scripts/guix"] substitute: In guix/ui.scm: substitute: 1209: 0 [run-guix-command substitute "--query"] substitute: substitute: guix/ui.scm:1209:6: In procedure run-guix-command: substitute: guix/ui.scm:1209:6: unmatched line "" actual-value: #f actual-error: + (srfi-34 + #) result: FAIL test-name: substitute location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:488 source: + (test-assert + "substitute" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (exit 1) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (build-derivations s (list d)) + (equal? + c + (call-with-input-file o get-string-all))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% @ substituter-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me actual-value: #t result: PASS test-name: substitute + build-things with output path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:507 source: + (test-assert + "substitute + build-things with output path" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (exit 1) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (build-things s (list o)) + (valid-path? s o) + (equal? + c + (call-with-input-file o get-string-all))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% @ substituter-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me actual-value: #t result: PASS test-name: substitute, corrupt output hash location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:527 source: + (test-assert + "substitute, corrupt output hash" + (with-store + s + (let* ((c "hello, world") + (d (build-expression->derivation + s + "corrupt-substitute" + `(mkdir %output) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (sha256 => (make-bytevector 32 0)) + (set-build-options + s + #:use-substitutes? + #t + #:fallback? + #f + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (guard (c ((nix-protocol-error? c) + (pk 'corrupt c) + (not (zero? (nix-protocol-error-status c))))) + (build-derivations s (list d)) + #f)))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute (1KiB installed)...  example.nar 128B 0B/s 00:00 [####################] 100.0% @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute 0 hash mismatch in downloaded path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute': expected 0000000000000000000000000000000000000000000000000000000000000000, got b8f73a6eb280e63169b1de2a5b5e154676fe1ada685f1e5c7183cbb2c1dcd535 ;;; (corrupt #) actual-value: #t result: PASS test-name: substitute --fallback location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:557 source: + (test-assert + "substitute --fallback" + (with-store + s + (let* ((t (random-text)) + (d (build-expression->derivation + s + "substitute-me-not" + `(call-with-output-file + %output + (lambda (p) (display ,t p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (guard (c ((nix-protocol-error? c) + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls) + #:fallback? + #t) + (and (build-derivations s (list d)) + (equal? + t + (call-with-input-file o get-string-all))))) + (build-derivations s (list d)) + #f)))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not (1KiB installed)... guix substitute: error: open-file: No such file or directory: "/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/substituter-data/example.nar" @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not 256 fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not' failed with exit code 1 @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not (1KiB installed)... guix substitute: error: open-file: No such file or directory: "/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/substituter-data/example.nar" @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not 256 fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not' failed with exit code 1 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/5gni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/5g//ni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/5gni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv - actual-value: #t result: PASS test-name: export/import several paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:589 source: + (test-assert + "export/import several paths" + (let* ((texts (unfold + (cut >= <> 10) + (lambda _ (random-text)) + #{1+}# + 0)) + (files (map (cut add-text-to-store %store "text" <>) + texts)) + (dump (call-with-bytevector-output-port + (cut export-paths %store files <>)))) + (delete-paths %store files) + (and (every (negate file-exists?) files) + (let* ((source (open-bytevector-input-port dump)) + (imported (import-paths %store source))) + (and (equal? imported files) + (every file-exists? files) + (equal? + texts + (map (lambda (file) + (call-with-input-file file get-string-all)) + files))))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: export/import paths, ensure topological order location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:609 source: + (test-assert + "export/import paths, ensure topological order" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (files (list file1 file2)) + (dump1 (call-with-bytevector-output-port + (cute export-paths %store (list file1 file2) <>))) + (dump2 (call-with-bytevector-output-port + (cute export-paths %store (list file2 file1) <>)))) + (delete-paths %store files) + (and (every (negate file-exists?) files) + (bytevector=? dump1 dump2) + (let* ((source (open-bytevector-input-port dump1)) + (imported (import-paths %store source))) + (and (equal? imported (list file1 file2)) + (every file-exists? files) + (equal? (list file0) (references %store file1)) + (equal? (list file1) (references %store file2))))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: export/import incomplete location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:631 source: + (test-assert + "export/import incomplete" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (dump (call-with-bytevector-output-port + (cute export-paths %store (list file2) <>)))) + (delete-paths %store (list file0 file1 file2)) + (guard (c ((nix-protocol-error? c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "not valid")))) + (import-paths + %store + (open-bytevector-input-port dump))))) finding garbage collector roots... deleting unused links... actual-value: 97 result: PASS test-name: export/import recursive location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:648 source: + (test-assert + "export/import recursive" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (dump (call-with-bytevector-output-port + (cute export-paths + %store + (list file2) + <> + #:recursive? + #t)))) + (delete-paths %store (list file0 file1 file2)) + (let ((imported + (import-paths + %store + (open-bytevector-input-port dump)))) + (and (equal? imported (list file0 file1 file2)) + (every file-exists? (list file0 file1 file2)) + (equal? (list file0) (references %store file1)) + (equal? (list file1) (references %store file2)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: write-file & export-path yield the same result location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:664 source: + (test-assert + "write-file & export-path yield the same result" + (run-with-store + %store + (mlet* %store-monad + ((drv1 (package->derivation %bootstrap-guile)) + (out1 -> (derivation->output-path drv1)) + (data -> + (unfold + (cut >= <> 26) + (lambda (i) (random-bytevector 128)) + #{1+}# + 0)) + (build -> + (gexp (begin + (use-modules (rnrs io ports) (srfi srfi-1)) + (let () + (define letters + (map (lambda (i) + (string + (integer->char + (+ i (char->integer #\a))))) + (iota 26))) + (define (touch file data) + (call-with-output-file + file + (lambda (port) (put-bytevector port data)))) + (mkdir (ungexp output)) + (chdir (ungexp output)) + (for-each + touch + (append (drop letters 10) (take letters 10)) + (list (ungexp-splicing data))) + #t)))) + (drv2 (gexp->derivation "bunch" build)) + (out2 -> (derivation->output-path drv2)) + (item-info -> (store-lift query-path-info))) + (mbegin + %store-monad + (built-derivations (list drv1 drv2)) + (foldm %store-monad + (lambda (item result) + (define ref-hash + (let-values + (((port get) (open-sha256-port))) + (write-file item port) + (close-port port) + (get))) + (>>= (item-info item) + (lambda (info) + (return + (and result + (bytevector=? + (path-info-hash info) + ref-hash)))))) + #t + (list out1 out2)))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/dfxcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/df//xcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/dfxcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv - actual-value: #t result: PASS test-name: import corrupt path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:730 source: + (test-assert + "import corrupt path" + (let* ((text (random-text)) + (file (add-text-to-store %store "text" text)) + (dump (call-with-bytevector-output-port + (cut export-paths %store (list file) <>)))) + (delete-paths %store (list file)) + (let* ((index (quotient (bytevector-length dump) 4)) + (byte (bytevector-u8-ref dump index))) + (bytevector-u8-set! dump index (logxor 255 byte))) + (and (not (file-exists? file)) + (guard (c ((nix-protocol-error? c) + (pk 'c c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "corrupt")))) + (let* ((source (open-bytevector-input-port dump)) + (imported (import-paths %store source))) + (pk 'corrupt-imported imported) + #f))))) finding garbage collector roots... deleting unused links... ;;; (c #) actual-value: 80 result: PASS test-name: register-path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:753 source: + (test-assert + "register-path" + (let ((file (string-append + (%store-prefix) + "/" + (make-string 32 #\f) + "-fake"))) + (when (valid-path? %store file) + (delete-paths %store (list file))) + (false-if-exception (delete-file file)) + (let ((ref (add-text-to-store + %store + "ref-of-fake" + (random-text))) + (drv (string-append file ".drv"))) + (call-with-output-file + file + (cut display "This is a fake store item.\n" <>)) + (register-path + file + #:references + (list ref) + #:deriver + drv) + (and (valid-path? %store file) + (equal? (references %store file) (list ref)) + (null? (valid-derivers %store file)) + (null? (referrers %store file)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: verify-store location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:773 source: + (test-assert + "verify-store" + (let* ((text (random-text)) + (file1 (add-text-to-store %store "foo" text)) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1)))) + (and (pk 'verify1 (verify-store %store)) + (begin + (delete-file file1) + (not (pk 'verify2 (verify-store %store)))) + (begin + (call-with-output-file + file1 + (lambda (port) (display text port))) + (pk 'verify3 (verify-store %store)))))) reading the Nix store... ;;; (verify1 #t) reading the Nix store... path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/b2x6jn5drxda6ym1kbwyqfjhdn3qr4xc-foo' disappeared, but it still has valid referrers! ;;; (verify2 #f) reading the Nix store... ;;; (verify3 #t) actual-value: #t result: PASS test-name: verify-store + check-contents location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:790 source: + (test-assert + "verify-store + check-contents" + (with-store + s + (let* ((text (random-text)) + (drv (build-expression->derivation + s + "corrupt" + `(let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) (display ,text port))) + #t) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (with-derivation-substitute + drv + text + (and (build-derivations s (list drv)) + (verify-store s #:check-contents? #t) + (begin + (chmod file 420) + (call-with-output-file + file + (lambda (port) (display "corrupt!" port))) + #t) + (not (verify-store s #:check-contents? #t)) + (delete-paths s (list file))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt'... warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% reading the Nix store... checking path existence... checking hashes... reading the Nix store... checking path existence... checking hashes... path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt' was modified! expected hash `03b9a1aa33de49627f23936e1d4298f852a8b2df398441ffcef3a1e9a0dbda19', got `e09c480e2e93336cd3c45aa129f81a0d7ba56c410b849d7779a8136074413b3d' finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11405' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: (/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt) result: PASS test-name: build-things, check mode location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:827 source: + (test-assert + "build-things, check mode" + (with-store + store + (call-with-temporary-output-file + (lambda (entropy entropy-port) + (write (random-text) entropy-port) + (force-output entropy-port) + (let* ((drv (build-expression->derivation + store + "non-deterministic" + `(begin + (use-modules (rnrs io ports)) + (let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) + (display + (call-with-input-file + ,entropy + get-string-all) + port))) + #t)) + #:guile-for-build + (package-derivation + store + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (and (build-things + store + (list (derivation-file-name drv))) + (begin + (write (random-text) entropy-port) + (force-output entropy-port) + (guard (c ((nix-protocol-error? c) + (pk 'determinism-exception c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "deterministic")))) + (build-things + store + (list (derivation-file-name drv)) + (build-mode check)) + #f)))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable building path(s) `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic' checking path(s) `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic' warning: rewriting hashes in `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic'; cross fingers ;;; (determinism-exception #) actual-value: 99 result: PASS test-name: build multiple times location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:864 source: + (test-assert + "build multiple times" + (with-store + store + (set-build-options + store + #:rounds + 2 + #:use-substitutes? + #f) + (call-with-temporary-output-file + (lambda (entropy entropy-port) + (write (random-text) entropy-port) + (force-output entropy-port) + (let* ((drv (build-expression->derivation + store + "non-deterministic" + `(begin + (use-modules (rnrs io ports)) + (let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) + (display + (call-with-input-file + ,entropy + get-string-all) + port) + (call-with-output-file + ,entropy + (lambda (port) (write 'foobar port))))) + #t)) + #:guile-for-build + (package-derivation + store + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (pk 'multiple-build c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "deterministic")))) + (current-build-output-port (current-error-port)) + (build-things + store + (list (derivation-file-name drv))) + #f)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/yv//sdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv.bz2 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/yv//sdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv.bz2 output ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/8l03iryrwim00ydbifhfja8cgi8fyc8c-non-deterministic? of ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv? differs from previous round @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - 1 output ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/8l03iryrwim00ydbifhfja8cgi8fyc8c-non-deterministic? of ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv? differs from previous round ;;; (multiple-build #) actual-value: 97 result: PASS test-name: store-lower location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:902 source: + (test-equal + "store-lower" + "Lowered." + (let* ((add (store-lower text-file)) + (file (add %store "foo" "Lowered."))) + (call-with-input-file file get-string-all))) expected-value: Lowered. actual-value: Lowered. result: PASS test-name: current-system location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:908 source: + (test-equal + "current-system" + "bar" + (parameterize + ((%current-system "frob")) + (run-with-store + %store + (mbegin + %store-monad + (set-current-system "bar") + (current-system)) + #:system + "foo"))) expected-value: bar actual-value: bar result: PASS test-name: query-path-info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:917 source: + (test-assert + "query-path-info" + (let* ((ref (add-text-to-store %store "ref" "foo")) + (item (add-text-to-store + %store + "item" + "bar" + (list ref))) + (info (query-path-info %store item))) + (and (equal? (path-info-references info) (list ref)) + (equal? + (path-info-hash info) + (sha256 + (string->utf8 + (call-with-output-string + (cut write-file item <>)))))))) actual-value: #t result: PASS test-name: path-info-deriver location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:927 source: + (test-assert + "path-info-deriver" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (not (path-info-deriver (query-path-info %store b))) + (string=? + (derivation-file-name d) + (path-info-deriver (query-path-info %store o)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9n78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/9n//78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9n78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv - actual-value: #t result: PASS SKIP: tests/gexp ================ test-name: no refs location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:71 source: + (test-equal + "no refs" + '(display "hello!") + (let ((exp (gexp (display "hello!")))) + (and (gexp? exp) + (null? (gexp-inputs exp)) + (gexp->sexp* exp)))) expected-value: (display hello!) actual-value: (display hello!) result: PASS test-name: unquote location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:78 source: + (test-equal + "unquote" + '(display `(foo ,(+ 2 3))) + (let ((exp (gexp (display `(foo ,(+ 2 3)))))) + (and (gexp? exp) + (null? (gexp-inputs exp)) + (gexp->sexp* exp)))) expected-value: (display (quasiquote (foo (unquote (+ 2 3))))) actual-value: (display (quasiquote (foo (unquote (+ 2 3))))) result: PASS test-name: one input package location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:85 source: + (test-assert + "one input package" + (let ((exp (gexp (display (ungexp coreutils))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((p "out")) (eq? p coreutils))) + (equal? + `(display + ,(derivation->output-path + (package-derivation %store coreutils))) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one input origin location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:95 source: + (test-assert + "one input origin" + (let ((exp (gexp (display (ungexp (package-source coreutils)))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((o "out")) (eq? o (package-source coreutils)))) + (equal? + `(display + ,(derivation->output-path + (package-source-derivation + %store + (package-source coreutils)))) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one local file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:106 source: + (test-assert + "one local file" + (let* ((file (search-path %load-path "guix.scm")) + (local (local-file file)) + (exp (gexp (display (ungexp local)))) + (intd (add-to-store + %store + (basename file) + #f + "sha256" + file))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x local))) + (equal? `(display ,intd) (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one local file, symlink location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:118 source: + (test-assert + "one local file, symlink" + (let ((file (search-path %load-path "guix.scm")) + (link (tmpnam))) + (dynamic-wind + (const #t) + (lambda () + (symlink (canonicalize-path file) link) + (let* ((local (local-file link "my-file" #:recursive? #f)) + (exp (gexp (display (ungexp local)))) + (intd (add-to-store %store "my-file" #f "sha256" file))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x local))) + (equal? `(display ,intd) (gexp->sexp* exp))))) + (lambda () + (false-if-exception (delete-file link)))))) actual-value: #t result: PASS test-name: local-file, relative file name location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:137 source: + (test-equal + "local-file, relative file name" + (canonicalize-path + (search-path %load-path "guix/base32.scm")) + (let ((directory + (dirname + (search-path + %load-path + "guix/build-system/gnu.scm")))) + (with-directory-excursion + directory + (let ((file (local-file "../guix/base32.scm"))) + (local-file-absolute-file-name file))))) expected-value: /home/sapientech/Dev/guix/guix_wip/guix/base32.scm actual-value: /home/sapientech/Dev/guix/guix_wip/guix/base32.scm result: PASS test-name: local-file, #:select? location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:145 source: + (test-assert + "local-file, #:select?" + (run-with-store + %store + (mlet* %store-monad + ((select? + -> + (lambda (file stat) + (member + (basename file) + '("guix.scm" "tests" "gexp.scm")))) + (file -> + (local-file + ".." + "directory" + #:recursive? + #t + #:select? + select?)) + (dir (lower-object file))) + (return + (and (store-path? dir) + (equal? + (scandir dir) + '("." ".." "guix.scm" "tests")) + (equal? + (scandir (string-append dir "/tests")) + '("." ".." "gexp.scm"))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: one plain file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:160 source: + (test-assert + "one plain file" + (let* ((file (plain-file "hi" "Hello, world!")) + (exp (gexp (display (ungexp file)))) + (expected + (add-text-to-store %store "hi" "Hello, world!"))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x file))) + (equal? `(display ,expected) (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: same input twice location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:170 source: + (test-assert + "same input twice" + (let ((exp (gexp (begin + (display (ungexp coreutils)) + (display (ungexp coreutils)))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((p "out")) (eq? p coreutils))) + (let ((e `(display + ,(derivation->output-path + (package-derivation %store coreutils))))) + (equal? `(begin ,e ,e) (gexp->sexp* exp)))))) actual-value: #t result: PASS test-name: two input packages, one derivation, one file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:182 source: + (test-assert + "two input packages, one derivation, one file" + (let* ((drv (build-expression->derivation + %store + "foo" + 'bar + #:guile-for-build + (package-derivation %store %bootstrap-guile))) + (txt (add-text-to-store %store "foo" "Hello, world!")) + (exp (gexp (begin + (display (ungexp coreutils)) + (display (ungexp %bootstrap-guile)) + (display (ungexp drv)) + (display (ungexp txt)))))) + (define (match-input thing) + (match-lambda + ((drv-or-pkg _ ...) (eq? thing drv-or-pkg)))) + (and (gexp? exp) + (= 4 (length (gexp-inputs exp))) + (every (lambda (input) + (find (match-input input) (gexp-inputs exp))) + (list drv coreutils %bootstrap-guile txt)) + (let ((e0 `(display + ,(derivation->output-path + (package-derivation %store coreutils)))) + (e1 `(display + ,(derivation->output-path + (package-derivation %store %bootstrap-guile)))) + (e2 `(display ,(derivation->output-path drv))) + (e3 `(display ,txt))) + (equal? + `(begin ,e0 ,e1 ,e2 ,e3) + (gexp->sexp* exp)))))) actual-value: #t result: PASS test-name: ungexp + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:210 source: + (test-assert + "ungexp + ungexp-native" + (let* ((exp (gexp (list (ungexp-native %bootstrap-guile) + (ungexp coreutils) + (ungexp-native glibc) + (ungexp binutils)))) + (target "mips64el-linux") + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-cross-derivation + %store + coreutils + target))) + (libc (derivation->output-path + (package-derivation %store glibc))) + (bu (derivation->output-path + (package-cross-derivation %store binutils target)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,glibc "out")) + (gexp-native-inputs exp)) + (lset= equal? + `((,coreutils "out") (,binutils "out")) + (gexp-inputs exp)) + (equal? + `(list ,guile ,cu ,libc ,bu) + (gexp->sexp* exp target))))) actual-value: #t result: PASS test-name: ungexp + ungexp-native, nested location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:233 source: + (test-equal + "ungexp + ungexp-native, nested" + (list `((,%bootstrap-guile "out")) + '<> + `((,coreutils "out"))) + (let* ((exp (gexp (list (ungexp-native (gexp (ungexp coreutils))) + (ungexp %bootstrap-guile))))) + (list (gexp-inputs exp) + '<> + (gexp-native-inputs exp)))) expected-value: (((# out)) <> ((# out))) actual-value: (((# out)) <> ((# out))) result: PASS test-name: input list location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:239 source: + (test-assert + "input list" + (let ((exp (gexp (display + '(ungexp (list %bootstrap-guile coreutils))))) + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-derivation %store coreutils)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,coreutils "out")) + (gexp-inputs exp)) + (equal? + `(display '(,guile ,cu)) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: input list + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:252 source: + (test-assert + "input list + ungexp-native" + (let* ((target "mips64el-linux") + (exp (gexp (display + (cons '(ungexp-native + (list %bootstrap-guile coreutils)) + '(ungexp (list glibc binutils)))))) + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-derivation %store coreutils))) + (xlibc (derivation->output-path + (package-cross-derivation %store glibc target))) + (xbu (derivation->output-path + (package-cross-derivation %store binutils target)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,coreutils "out")) + (gexp-native-inputs exp)) + (lset= equal? + `((,glibc "out") (,binutils "out")) + (gexp-inputs exp)) + (equal? + `(display (cons '(,guile ,cu) '(,xlibc ,xbu))) + (gexp->sexp* exp target))))) actual-value: #t result: PASS test-name: input list splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:274 source: + (test-assert + "input list splicing" + (let* ((inputs + (list (gexp-input glibc "debug") + %bootstrap-guile)) + (outputs + (list (derivation->output-path + (package-derivation %store glibc) + "debug") + (derivation->output-path + (package-derivation %store %bootstrap-guile)))) + (exp (gexp (list (ungexp-splicing (cons (+ 2 3) inputs)))))) + (and (lset= equal? + `((,glibc "debug") (,%bootstrap-guile "out")) + (gexp-inputs exp)) + (equal? + (gexp->sexp* exp) + `(list ,@(cons 5 outputs)))))) actual-value: #t result: PASS test-name: input list splicing + ungexp-native-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:288 source: + (test-assert + "input list splicing + ungexp-native-splicing" + (let* ((inputs + (list (gexp-input glibc "debug") + %bootstrap-guile)) + (exp (gexp (list (ungexp-native-splicing (cons (+ 2 3) inputs)))))) + (and (lset= equal? + `((,glibc "debug") (,%bootstrap-guile "out")) + (gexp-native-inputs exp)) + (null? (gexp-inputs exp)) + (equal? + (gexp->sexp* exp) + (gexp->sexp* exp "mips64el-linux"))))) actual-value: #t result: PASS test-name: output list location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:298 source: + (test-equal + "output list" + 2 + (let ((exp (gexp (begin + (mkdir (ungexp output)) + (mkdir (ungexp output "bar")))))) + (length (gexp-outputs exp)))) expected-value: 2 actual-value: 2 result: PASS test-name: output list, combined gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:304 source: + (test-assert + "output list, combined gexps" + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (mkdir (ungexp output "foo")))) + (exp2 (gexp (begin + (display "hi!") + (ungexp exp0) + (ungexp exp1))))) + (and (lset= equal? + (append (gexp-outputs exp0) (gexp-outputs exp1)) + (gexp-outputs exp2)) + (= 2 (length (gexp-outputs exp2)))))) actual-value: #t result: PASS test-name: output list, combined gexps, duplicate output location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:313 source: + (test-equal + "output list, combined gexps, duplicate output" + 1 + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (begin (mkdir (ungexp output)) (ungexp exp0)))) + (exp2 (gexp (begin (mkdir (ungexp output)) (ungexp exp1))))) + (length (gexp-outputs exp2)))) expected-value: 1 actual-value: 1 result: PASS test-name: output list + ungexp-splicing list, combined gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:320 source: + (test-assert + "output list + ungexp-splicing list, combined gexps" + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (mkdir (ungexp output "foo")))) + (exp2 (gexp (begin + (display "hi!") + (ungexp-splicing (list exp0 exp1)))))) + (and (lset= equal? + (append (gexp-outputs exp0) (gexp-outputs exp1)) + (gexp-outputs exp2)) + (= 2 (length (gexp-outputs exp2)))))) actual-value: #t result: PASS test-name: gexp->file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:330 source: + (test-assert + "gexp->file" + (run-with-store + %store + (mlet* %store-monad + ((exp -> + (gexp (display (ungexp %bootstrap-guile)))) + (guile (package-file %bootstrap-guile)) + (sexp (gexp->sexp exp)) + (drv (gexp->file "foo" exp)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv))) + (refs ((store-lift references) out))) + (return + (and (equal? sexp (call-with-input-file out read)) + (equal? (list guile) refs)))) + #:guile-for-build + (%guile-for-build))) random seed for tests: 1469938558 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/br6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/br//6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/br6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:341 source: + (test-assert + "gexp->derivation" + (run-with-store + %store + (mlet* %store-monad + ((file (text-file "foo" "Hello, world!")) + (exp -> + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "foo") + (symlink (ungexp file) (ungexp output "2nd"))))) + (drv (gexp->derivation "foo" exp)) + (out -> (derivation->output-path drv)) + (out2 -> (derivation->output-path drv "2nd")) + (done (built-derivations (list drv))) + (refs ((store-lift references) out)) + (refs2 ((store-lift references) out2)) + (guile (package-file %bootstrap-guile "bin/guile"))) + (return + (and (string=? + (readlink (string-append out "/foo")) + guile) + (string=? (readlink out2) file) + (equal? refs (list (dirname (dirname guile)))) + (equal? refs2 (list file))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/zmhmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/zm//hmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv.bz2 warning: rewriting hashes in `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/pysmjhfk9v7lfq97asqxzn1fxk5rqykr-foo'; cross fingers @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/zmhmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation vs. grafts location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:365 source: + (test-assert + "gexp->derivation vs. grafts" + (run-with-store + %store + (mlet* %store-monad + ((graft? (set-grafting #f)) + (p0 -> + (dummy-package + "dummy" + (arguments '(#:implicit-inputs? #f)))) + (r -> (package (inherit p0) (name "DuMMY"))) + (p1 -> (package (inherit p0) (replacement r))) + (exp0 -> + (gexp (frob (ungexp p0) (ungexp output)))) + (exp1 -> + (gexp (frob (ungexp p1) (ungexp output)))) + (void (set-guile-for-build %bootstrap-guile)) + (drv0 (gexp->derivation "t" exp0 #:graft? #t)) + (drv1 (gexp->derivation "t" exp1 #:graft? #t)) + (drv1* (gexp->derivation "t" exp1 #:graft? #f)) + (_ (set-grafting graft?))) + (return + (and (not (string=? + (derivation->output-path drv0) + (derivation->output-path drv1))) + (string=? + (derivation->output-path drv0) + (derivation->output-path drv1*))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, composed gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:384 source: + (test-assert + "gexp->derivation, composed gexps" + (run-with-store + %store + (mlet* %store-monad + ((exp0 -> + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output))))) + (exp1 -> + (gexp (symlink + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "foo"))) + (exp -> + (gexp (begin (ungexp exp0) (ungexp exp1)))) + (drv (gexp->derivation "foo" exp)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv))) + (guile (package-file %bootstrap-guile "bin/guile"))) + (return + (string=? + (readlink (string-append out "/foo")) + guile))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/d7a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/d7//a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/d7a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation, default system location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:400 source: + (test-assert + "gexp->derivation, default system" + (run-with-store + %store + (let ((system (%current-system)) + (mdrv (parameterize + ((%current-system "foobar64-linux")) + (gexp->derivation + "foo" + (gexp (mkdir (ungexp output))))))) + (mlet %store-monad + ((drv mdrv)) + (return + (string=? system (derivation-system drv))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, local-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:411 source: + (test-assert + "gexp->derivation, local-file" + (run-with-store + %store + (mlet* %store-monad + ((file -> (search-path %load-path "guix.scm")) + (intd (interned-file file #:recursive? #f)) + (local -> (local-file file)) + (exp -> + (gexp (begin + (stat (ungexp local)) + (symlink (ungexp local) (ungexp output))))) + (drv (gexp->derivation "local-file" exp))) + (mbegin + %store-monad + (built-derivations (list drv)) + (return + (string=? + (readlink (derivation->output-path drv)) + intd)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, cross-compilation location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:425 source: + (test-assert + "gexp->derivation, cross-compilation" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp coreutils) (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (refs ((store-lift references) + (derivation-file-name xdrv))) + (xcu (package->cross-derivation coreutils target)) + (cu (package->derivation coreutils))) + (return + (and (member (derivation-file-name xcu) refs) + (not (member (derivation-file-name cu) refs))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:439 source: + (test-assert + "gexp->derivation, ungexp-native" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp-native coreutils) (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (drv (gexp->derivation "foo" exp))) + (return + (string=? + (derivation-file-name drv) + (derivation-file-name xdrv)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, ungexp + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:449 source: + (test-assert + "gexp->derivation, ungexp + ungexp-native" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp-native coreutils) + (ungexp glibc) + (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (refs ((store-lift references) + (derivation-file-name xdrv))) + (xglibc (package->cross-derivation glibc target)) + (cu (package->derivation coreutils))) + (return + (and (member (derivation-file-name cu) refs) + (member (derivation-file-name xglibc) refs)))) + #:guile-for-build + (%guile-for-build))) actual-value: (/home/sapientech/Dev/guix/guix_wip/test-tmp/store/izq9lrpv4z9xaaslk79ayidcv5lisn90-glibc-2.22.drv /home/sapientech/Dev/guix/guix_wip/test-tmp/store/sajnfz79nhdi4l8a464c9hhv4vf0gay2-coreutils-8.24.drv) result: PASS test-name: gexp->derivation, ungexp-native + composed gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:463 source: + (test-assert + "gexp->derivation, ungexp-native + composed gexps" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp0 -> (gexp (list 1 2 (ungexp coreutils)))) + (exp -> (gexp (list 0 (ungexp-native exp0)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (drv (gexp->derivation "foo" exp))) + (return + (string=? + (derivation-file-name drv) + (derivation-file-name xdrv)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, store copy location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:474 source: + (test-assert + "gexp->derivation, store copy" + (run-with-store + %store + (let ((build-one + (gexp (call-with-output-file + (ungexp output) + (lambda (port) (display "This is the one." port))))) + (build-two + (lambda (one) + (gexp (begin + (mkdir (ungexp output)) + (symlink + (ungexp one) + (string-append (ungexp output) "/one")) + (call-with-output-file + (string-append (ungexp output) "/two") + (lambda (port) + (display "This is the second one." port))))))) + (build-drv + (gexp (begin + (use-modules (guix build store-copy)) + (mkdir (ungexp output)) + (populate-store '("graph") (ungexp output)))))) + (mlet* %store-monad + ((one (gexp->derivation "one" build-one)) + (two (gexp->derivation "two" (build-two one))) + (drv (gexp->derivation + "store-copy" + build-drv + #:references-graphs + `(("graph" ,two)) + #:modules + '((guix build store-copy) (guix build utils)))) + (ok? (built-derivations (list drv))) + (out -> (derivation->output-path drv))) + (let ((one (derivation->output-path one)) + (two (derivation->output-path two))) + (return + (and ok? + (file-exists? (string-append out "/" one)) + (file-exists? (string-append out "/" two)) + (file-exists? (string-append out "/" two "/two")) + (string=? + (readlink (string-append out "/" two "/one")) + one)))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: imported-files location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:509 source: + (test-assert + "imported-files" + (run-with-store + %store + (mlet* %store-monad + ((files -> + `(("x" + unquote + (search-path %load-path "ice-9/q.scm")) + ("a/b/c" + unquote + (search-path %load-path "guix/derivations.scm")) + ("p/q" + unquote + (search-path %load-path "guix.scm")) + ("p/z" + unquote + (search-path %load-path "guix/store.scm")))) + (drv (imported-files files))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let ((dir (derivation->output-path drv))) + (return + (every (match-lambda + ((path . source) + (equal? + (call-with-input-file + (string-append dir "/" path) + get-bytevector-all) + (call-with-input-file + source + get-bytevector-all)))) + files))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp-modules & ungexp location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:529 source: + (test-equal + "gexp-modules & ungexp" + '((bar) (foo)) + ((@@ (guix gexp) gexp-modules) + (gexp (foo (ungexp + (with-imported-modules '((foo)) (gexp +))) + (ungexp-native + (with-imported-modules '((bar)) (gexp -))))))) expected-value: ((bar) (foo)) actual-value: ((bar) (foo)) result: PASS test-name: gexp-modules & ungexp-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:535 source: + (test-equal + "gexp-modules & ungexp-splicing" + '((foo) (bar)) + ((@@ (guix gexp) gexp-modules) + (gexp (foo (ungexp-splicing + (list (with-imported-modules '((foo)) (gexp +)) + (with-imported-modules '((bar)) (gexp -)))))))) expected-value: ((foo) (bar)) actual-value: ((foo) (bar)) result: PASS test-name: gexp->derivation #:modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:541 source: + (test-assert + "gexp->derivation #:modules" + (run-with-store + %store + (mlet* %store-monad + ((build -> + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append + (ungexp output) + "/guile/guix/nix")) + #t))) + (drv (gexp->derivation + "test-with-modules" + build + #:modules + '((guix build utils))))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (return (eq? (stat:type s) 'directory))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation & with-imported-modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:555 source: + (test-assert + "gexp->derivation & with-imported-modules" + (run-with-store + %store + (mlet* %store-monad + ((build -> + (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append + (ungexp output) + "/guile/guix/nix")) + #t)))) + (drv (gexp->derivation "test-with-modules" build))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (return (eq? (stat:type s) 'directory))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation & nested with-imported-modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:570 source: + (test-assert + "gexp->derivation & nested with-imported-modules" + (run-with-store + %store + (mlet* %store-monad + ((build1 + -> + (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append (ungexp output) "/guile/guix/nix")) + #t)))) + (build2 + -> + (with-imported-modules + '((guix build bournish)) + (gexp (begin + (use-modules + (guix build bournish) + (system base compile)) + (ungexp-native build1) + (call-with-output-file + (string-append (ungexp output) "/b") + (lambda (port) + (write (read-and-compile + (open-input-string "cd /foo") + #:from + %bournish-language + #:to + 'scheme) + port))))))) + (drv (gexp->derivation "test-with-modules" build2))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix"))) + (b (string-append p "/b"))) + (return + (and (eq? (stat:type s) 'directory) + (equal? + '(chdir "/foo") + (call-with-input-file b read))))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation #:references-graphs location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:599 source: + (test-assert + "gexp->derivation #:references-graphs" + (run-with-store + %store + (mlet* %store-monad + ((one (text-file "one" (random-text))) + (two (gexp->derivation + "two" + (gexp (symlink (ungexp one) (ungexp output "chbouib"))))) + (build -> + (with-imported-modules + '((guix build store-copy) (guix build utils)) + (gexp (begin + (use-modules (guix build store-copy)) + (with-output-to-file + (ungexp output) + (lambda () + (write (call-with-input-file + "guile" + read-reference-graph)))) + (with-output-to-file + (ungexp output "one") + (lambda () + (write (call-with-input-file + "one" + read-reference-graph)))) + (with-output-to-file + (ungexp output "two") + (lambda () + (write (call-with-input-file + "two" + read-reference-graph)))))))) + (drv (gexp->derivation + "ref-graphs" + build + #:references-graphs + `(("one" ,one) + ("two" ,two "chbouib") + ("guile" ,%bootstrap-guile)))) + (ok? (built-derivations (list drv))) + (guile-drv + (package->derivation %bootstrap-guile)) + (bash (interned-file + (search-bootstrap-binary + "bash" + (%current-system)) + "bash" + #:recursive? + #t)) + (g-one -> (derivation->output-path drv "one")) + (g-two -> (derivation->output-path drv "two")) + (g-guile -> (derivation->output-path drv))) + (return + (and ok? + (equal? + (call-with-input-file g-one read) + (list one)) + (lset= string=? + (call-with-input-file g-two read) + (list one + (derivation->output-path two "chbouib"))) + (lset= string=? + (call-with-input-file g-guile read) + (list (derivation->output-path guile-drv) bash))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/gnc6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/gn//c6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/gnc6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv - @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/drinqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/dr//inqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/drinqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:643 source: + (test-assert + "gexp->derivation #:allowed-references" + (run-with-store + %store + (mlet %store-monad + ((drv (gexp->derivation + "allowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp %bootstrap-guile) "guile"))) + #:allowed-references + (list "out" %bootstrap-guile)))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/qr3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/qr//3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/qr3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references, specific output location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:655 source: + (test-assert + "gexp->derivation #:allowed-references, specific output" + (run-with-store + %store + (mlet* %store-monad + ((in (gexp->derivation + "thing" + (gexp (begin + (mkdir (ungexp output "ok")) + (mkdir (ungexp output "not-ok")))))) + (drv (gexp->derivation + "allowed-refs" + (gexp (begin + (pk (ungexp in "not-ok")) + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp in "ok") "ok"))) + #:allowed-references + (list "out" (gexp-input in "ok"))))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references, disallowed location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:672 source: + (test-assert + "gexp->derivation #:allowed-references, disallowed" + (let ((drv (run-with-store + %store + (gexp->derivation + "allowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp %bootstrap-guile) "guile"))) + #:allowed-references + '())))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/f2wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/f2//wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv.bz2 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/ilzqy6rrlwdwsa939k1z5maipa1g202i-allowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/f2wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv - 1 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/ilzqy6rrlwdwsa939k1z5maipa1g202i-allowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' actual-value: #t result: PASS test-name: gexp->derivation #:disallowed-references, allowed location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:684 source: + (test-assert + "gexp->derivation #:disallowed-references, allowed" + (run-with-store + %store + (mlet %store-monad + ((drv (gexp->derivation + "disallowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp %bootstrap-guile) "guile"))) + #:disallowed-references + '()))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/n3hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/n3//hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/n3hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:disallowed-references location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:696 source: + (test-assert + "gexp->derivation #:disallowed-references" + (let ((drv (run-with-store + %store + (gexp->derivation + "disallowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp %bootstrap-guile) "guile"))) + #:disallowed-references + (list %bootstrap-guile))))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/y6h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/y6//h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv.bz2 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/jz1q32n6qxyvi6dkywl028y6fvdfsi1k-disallowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/y6h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv - 1 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/jz1q32n6qxyvi6dkywl028y6fvdfsi1k-disallowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' actual-value: #t result: PASS test-name: gexp->script location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:716 source: + (test-assert + "gexp->script" + (run-with-store + %store + (mlet* %store-monad + ((n -> (random (expt 2 50))) + (exp -> + (gexp (system* + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "-c" + (object->string '(display (expt (ungexp n) 2)))))) + (drv (gexp->script + "guile-thing" + exp + #:guile + %bootstrap-guile)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv)))) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return + (and (zero? (close-pipe pipe)) + (= (expt n 2) (string->number str)))))) + #:guile-for-build + (%guile-for-build))) result: SKIP test-name: program-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:733 source: + (test-assert + "program-file" + (run-with-store + %store + (let* ((n (random (expt 2 50))) + (exp (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (display (ungexp n)))))) + (file (program-file + "program" + exp + #:guile + %bootstrap-guile))) + (mlet* %store-monad + ((drv (lower-object file)) + (out -> (derivation->output-path drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return + (and (zero? (close-pipe pipe)) + (= n (string->number str)))))))) + #:guile-for-build + (%guile-for-build))) result: SKIP test-name: scheme-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:750 source: + (test-assert + "scheme-file" + (run-with-store + %store + (let* ((text (plain-file "foo" "Hello, world!")) + (scheme + (scheme-file + "bar" + (gexp (list "foo" (ungexp text)))))) + (mlet* %store-monad + ((drv (lower-object scheme)) + (text (lower-object text)) + (out -> (derivation->output-path drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (mlet %store-monad + ((refs ((store-lift references) out))) + (return + (and (equal? refs (list text)) + (equal? + `(list "foo" ,text) + (call-with-input-file out read)))))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: text-file* location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:763 source: + (test-assert + "text-file*" + (let ((references (store-lift references))) + (run-with-store + %store + (mlet* %store-monad + ((drv (package->derivation %bootstrap-guile)) + (guile -> (derivation->output-path drv)) + (file (text-file "bar" "This is bar.")) + (text (text-file* + "foo" + %bootstrap-guile + "/bin/guile " + (gexp-input %bootstrap-guile "out") + "/bin/guile " + drv + "/bin/guile " + file)) + (done (built-derivations (list text))) + (out -> (derivation->output-path text)) + (refs (references out))) + (return + (and (lset= string=? refs (list guile file)) + (equal? + (call-with-input-file out get-string-all) + (string-append + guile + "/bin/guile " + guile + "/bin/guile " + guile + "/bin/guile " + file))))) + #:guile-for-build + (package-derivation %store %bootstrap-guile)))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hkndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/hk//ndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hkndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv - actual-value: #t result: PASS test-name: mixed-text-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:787 source: + (test-assert + "mixed-text-file" + (run-with-store + %store + (mlet* %store-monad + ((file -> + (mixed-text-file + "mixed" + "export PATH=" + %bootstrap-guile + "/bin")) + (drv (lower-object file)) + (out -> (derivation->output-path drv)) + (guile-drv + (package->derivation %bootstrap-guile)) + (guile -> (derivation->output-path guile-drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (mlet %store-monad + ((refs ((store-lift references) out))) + (return + (and (string=? + (string-append "export PATH=" guile "/bin") + (call-with-input-file out get-string-all)) + (equal? refs (list guile))))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/h3cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/h3//cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/h3cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv - actual-value: #t result: PASS test-name: gexp->derivation vs. %current-target-system location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:802 source: + (test-assert + "gexp->derivation vs. %current-target-system" + (let ((mval (gexp->derivation + "foo" + (gexp (begin + (mkdir (ungexp output)) + (foo (ungexp-native gnu-make)))) + #:target + #f))) + (parameterize + ((%current-target-system "fooooo")) + (derivation? (run-with-store %store mval))))) actual-value: #t result: PASS test-name: lower-object location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:813 source: + (test-assert + "lower-object" + (run-with-store + %store + (mlet %store-monad + ((drv1 (lower-object %bootstrap-guile)) + (drv2 (lower-object (package-source coreutils))) + (item (lower-object (plain-file "foo" "Hello!")))) + (return + (and (derivation? drv1) + (derivation? drv2) + (store-path? item)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: lower-object, computed-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:820 source: + (test-assert + "lower-object, computed-file" + (run-with-store + %store + (let* ((text (plain-file "foo" "Hello!")) + (exp (gexp (begin + (mkdir (ungexp output)) + (symlink + (ungexp %bootstrap-guile) + (string-append (ungexp output) "/guile")) + (symlink + (ungexp text) + (string-append (ungexp output) "/text"))))) + (computed (computed-file "computed" exp))) + (mlet* %store-monad + ((text (lower-object text)) + (guile-drv (lower-object %bootstrap-guile)) + (comp-drv (lower-object computed)) + (comp -> (derivation->output-path comp-drv))) + (mbegin + %store-monad + (built-derivations (list comp-drv)) + (return + (and (string=? + (readlink (string-append comp "/guile")) + (derivation->output-path guile-drv)) + (string=? + (readlink (string-append comp "/text")) + text)))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fdhli6nzdk7643skliaca0flzvrf2xx8-computed.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fd//hli6nzdk7643skliaca0flzvrf2xx8-computed.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fdhli6nzdk7643skliaca0flzvrf2xx8-computed.drv - actual-value: #t result: PASS test-name: printer location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:839 source: + (test-assert + "printer" + (string-match + "^#$" + (with-output-to-string + (lambda () + (write (gexp (string-append (ungexp coreutils) "/bin/uname"))))))) actual-value: #(#:out> "/bin/uname") 5c2f630> (0 . 122)) result: PASS test-name: printer vs. ungexp-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:848 source: + (test-assert + "printer vs. ungexp-splicing" + (string-match + "^#$" + (with-output-to-string + (lambda () + (write (gexp (begin (ungexp-splicing (gexp ()))))))))) actual-value: #(# (0 . 16)) result: PASS test-name: sugar location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:856 source: + (test-equal + "sugar" + '(gexp (foo (ungexp bar) + (ungexp baz "out") + (ungexp (chbouib 42)) + (ungexp-splicing (list x y z)) + (ungexp-native foo) + (ungexp-native foo "out") + (ungexp-native (chbouib 42)) + (ungexp-native-splicing (list x y z)))) + '(gexp (foo (ungexp bar) + (ungexp baz "out") + (ungexp (chbouib 42)) + (ungexp-splicing (list x y z)) + (ungexp-native foo) + (ungexp-native foo "out") + (ungexp-native (chbouib 42)) + (ungexp-native-splicing (list x y z))))) expected-value: (gexp (foo (ungexp bar) (ungexp baz out) (ungexp (chbouib 42)) (ungexp-splicing (list x y z)) (ungexp-native foo) (ungexp-native foo out) (ungexp-native (chbouib 42)) (ungexp-native-splicing (list x y z)))) actual-value: (gexp (foo (ungexp bar) (ungexp baz out) (ungexp (chbouib 42)) (ungexp-splicing (list x y z)) (ungexp-native foo) (ungexp-native foo out) (ungexp-native (chbouib 42)) (ungexp-native-splicing (list x y z)))) result: PASS SKIP: tests/syscalls ==================== test-name: mount, ENOENT location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:38 source: + (test-equal + "mount, ENOENT" + ENOENT + (catch 'system-error + (lambda () + (mount "/dev/null" "/does-not-exist" "ext2") + #f) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: umount, ENOENT/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:46 source: + (test-assert + "umount, ENOENT/EPERM" + (catch 'system-error + (lambda () (umount "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: mount-points location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:55 source: + (test-assert + "mount-points" + (any (cute member <> (mount-points)) + '("/" "/proc" "/sys" "/dev"))) actual-value: (/ /sys/kernel/security /dev/shm /dev/pts /sys/fs/cgroup /sys/fs/cgroup/systemd /sys/fs/pstore /sys/fs/cgroup/freezer /sys/fs/cgroup/cpuset /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/blkio /sys/fs/cgroup/memory /sys/fs/cgroup/net_cls /sys/fs/cgroup/pids /sys/fs/cgroup/devices /proc/sys/fs/binfmt_misc /dev/mqueue /sys/kernel/debug /dev/hugepages /sys/kernel/config /tmp /run/user/1000) result: PASS test-name: swapon, ENOENT/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:61 source: + (test-assert + "swapon, ENOENT/EPERM" + (catch 'system-error + (lambda () (swapon "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: swapoff, ENOENT/EINVAL/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:69 source: + (test-assert + "swapoff, ENOENT/EINVAL/EPERM" + (catch 'system-error + (lambda () (swapoff "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM EINVAL ENOENT))))) actual-value: (1 22 2) result: PASS test-name: mkdtemp! location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:77 source: + (test-assert + "mkdtemp!" + (let* ((tmp (or (getenv "TMPDIR") "/tmp")) + (dir (mkdtemp! + (string-append tmp "/guix-test-XXXXXX")))) + (and (file-exists? dir) (begin (rmdir dir) #t)))) actual-value: #t result: PASS test-name: statfs, ENOENT location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:85 source: + (test-equal + "statfs, ENOENT" + ENOENT + (catch 'system-error + (lambda () (statfs "/does-not-exist")) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: statfs location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:92 source: + (test-assert + "statfs" + (let ((fs (statfs "/"))) + (and (file-system? fs) + (> (file-system-block-size fs) 0) + (>= (file-system-blocks-available fs) 0) + (>= (file-system-blocks-free fs) + (file-system-blocks-available fs))))) actual-value: #t result: PASS test-name: clone location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 source: + (test-assert + "clone" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 42)) + (pid (and (not (equal? + (readlink (user-namespace pid)) + (readlink (user-namespace (getpid))))) + (match (waitpid pid) + ((_ . status) (= 42 (status:exit-val status)))))))) result: SKIP test-name: setns location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:122 source: + (test-assert + "setns" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 0)) + (clone-pid + (match (pipe) + ((in . out) + (match (primitive-fork) + (0 + (close in) + (call-with-input-file + (user-namespace clone-pid) + (lambda (port) (setns (port->fdes port) 0))) + (write 'done out) + (close out) + (primitive-exit 0)) + (fork-pid + (close out) + (read in) + (let ((result + (and (equal? + (readlink + (user-namespace clone-pid)) + (readlink + (user-namespace fork-pid)))))) + (waitpid clone-pid) + (waitpid fork-pid) + result)))))))) result: SKIP test-name: pivot-root location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:151 source: + (test-assert + "pivot-root" + (match (pipe) + ((in . out) + (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD)) + (0 + (close in) + (call-with-temporary-directory + (lambda (root) + (let ((put-old (string-append root "/real-root"))) + (mount "none" root "tmpfs") + (mkdir put-old) + (call-with-output-file + (string-append root "/test") + (lambda (port) (display "testing\n" port))) + (pivot-root root put-old) + (write (file-exists? "/test") out) + (close out)))) + (primitive-exit 0)) + (pid (close out) + (let ((result (read in))) + (close in) + (and (zero? (match (waitpid pid) + ((_ . status) + (status:exit-val status)))) + (eq? #t result)))))))) result: SKIP test-name: fcntl-flock wait location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:180 source: + (test-equal + "fcntl-flock wait" + 42 + (let ((file (open-file temp-file "w0b"))) + (fcntl-flock file 'write-lock) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (let ((file (open-file temp-file "r0b"))) + (fcntl-flock file 'read-lock) + (primitive-exit (read file))) + (primitive-exit 1)) + (lambda () (primitive-exit 2)))) + (pid (display "hello, world!" file) + (force-output file) + (sleep 1) + (seek file 0 SEEK_SET) + (truncate-file file 0) + (write 42 file) + (force-output file) + (fcntl-flock file 'unlock) + (match (waitpid pid) + ((_ . status) + (let ((result (status:exit-val status))) + (close-port file) + result))))))) expected-value: 42 actual-value: 42 result: PASS test-name: fcntl-flock non-blocking location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:219 source: + (test-equal + "fcntl-flock non-blocking" + EAGAIN + (match (pipe) + ((input . output) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (close-port output) + (read-char input) + (let ((file (open-file temp-file "w0"))) + (catch 'flock-error + (lambda () + (fcntl-flock file 'write-lock #:wait? #f)) + (lambda (key errno) + (primitive-exit (pk 'errno errno))))) + (primitive-exit -1)) + (lambda () (primitive-exit -2)))) + (pid (close-port input) + (let ((file (open-file temp-file "w0"))) + (fcntl-flock file 'write-lock) + (write 'green-light output) + (force-output output) + (match (waitpid pid) + ((_ . status) + (let ((result (status:exit-val status))) + (fcntl-flock file 'unlock) + (close-port file) + result))))))))) ;;; (errno 11) expected-value: 11 actual-value: 11 result: PASS test-name: all-network-interface-names location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:261 source: + (test-assert + "all-network-interface-names" + (match (all-network-interface-names) + (((? string? names) ..1) (member "lo" names)))) actual-value: (lo enp0s25 wlp2s0) result: PASS test-name: network-interface-names location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:266 source: + (test-assert + "network-interface-names" + (match (network-interface-names) + (((? string? names) ..1) + (lset<= + string=? + names + (all-network-interface-names))))) actual-value: #t result: PASS test-name: network-interface-flags location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:271 source: + (test-assert + "network-interface-flags" + (let* ((sock (socket AF_INET SOCK_STREAM 0)) + (flags (network-interface-flags sock "lo"))) + (close-port sock) + (and (not (zero? (logand flags IFF_LOOPBACK))) + (not (zero? (logand flags IFF_UP)))))) actual-value: #t result: PASS test-name: loopback-network-interface? location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:278 source: + (test-equal + "loopback-network-interface?" + ENODEV + (and (loopback-network-interface? "lo") + (catch 'system-error + (lambda () + (loopback-network-interface? "nonexistent") + #f) + (lambda args (system-error-errno args))))) expected-value: 19 actual-value: 19 result: PASS test-name: set-network-interface-flags location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:289 source: + (test-assert + "set-network-interface-flags" + (let ((sock (socket AF_INET SOCK_STREAM 0))) + (catch 'system-error + (lambda () + (set-network-interface-flags sock "lo" IFF_UP)) + (lambda args + (close-port sock) + (memv (system-error-errno args) + (list EPERM EACCES)))))) actual-value: (1 13) result: PASS test-name: network-interface-address lo location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:299 source: + (test-equal + "network-interface-address lo" + (make-socket-address + AF_INET + (inet-pton AF_INET "127.0.0.1") + 0) + (let* ((sock (socket AF_INET SOCK_STREAM 0)) + (addr (network-interface-address sock "lo"))) + (close-port sock) + addr)) expected-value: #(2 2130706433 0) actual-value: #(2 2130706433 0) result: PASS test-name: set-network-interface-address location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:307 source: + (test-assert + "set-network-interface-address" + (let ((sock (socket AF_INET SOCK_STREAM 0))) + (catch 'system-error + (lambda () + (set-network-interface-address + sock + "nonexistent" + (make-socket-address + AF_INET + (inet-pton AF_INET "127.12.14.15") + 0))) + (lambda args + (close-port sock) + (memv (system-error-errno args) + (list EPERM EACCES)))))) actual-value: (1 13) result: PASS test-name: network-interfaces returns one or more interfaces location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:321 source: + (test-equal + "network-interfaces returns one or more interfaces" + '(#t #t #t) + (match (network-interfaces) + ((interfaces ..1) + (list (every interface? interfaces) + (every string? (map interface-name interfaces)) + (every (lambda (sockaddr) + (or (vector? sockaddr) (not sockaddr))) + (map interface-address interfaces)))))) expected-value: (#t #t #t) actual-value: (#t #t #t) result: PASS test-name: network-interfaces returns "lo" location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:333 source: + (test-equal + "network-interfaces returns \"lo\"" + (list #t + (make-socket-address + AF_INET + (inet-pton AF_INET "127.0.0.1") + 0)) + (match (filter + (lambda (interface) + (string=? "lo" (interface-name interface))) + (network-interfaces)) + ((loopbacks ..1) + (list (every (lambda (lo) + (not (zero? (logand + IFF_LOOPBACK + (interface-flags lo))))) + loopbacks) + (match (find (lambda (lo) + (= AF_INET + (sockaddr:fam (interface-address lo)))) + loopbacks) + (#f #f) + (lo (interface-address lo))))))) expected-value: (#t #(2 2130706433 0)) actual-value: (#t #(2 2130706433 0)) result: PASS test-name: tcgetattr ENOTTY location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:348 source: + (test-equal + "tcgetattr ENOTTY" + ENOTTY + (catch 'system-error + (lambda () + (call-with-input-file + "/dev/null" + (lambda (port) (tcgetattr (fileno port))))) + (compose system-error-errno list))) expected-value: 25 actual-value: 25 result: PASS test-name: tcgetattr location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:362 source: + (test-assert + "tcgetattr" + (let ((termios (tcgetattr 0))) + (and (termios? termios) + (> (termios-input-speed termios) 0) + (> (termios-output-speed termios) 0)))) actual-value: #t result: PASS test-name: tcsetattr location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:368 source: + (test-assert + "tcsetattr" + (let ((first (tcgetattr 0))) + (tcsetattr 0 (tcsetattr-action TCSANOW) first) + (equal? first (tcgetattr 0)))) actual-value: #t result: PASS test-name: terminal-window-size ENOTTY location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:373 source: + (test-assert + "terminal-window-size ENOTTY" + (call-with-input-file + "/dev/null" + (lambda (port) + (catch 'system-error + (lambda () (terminal-window-size port)) + (lambda args + (memv (system-error-errno args) + (list ENOTTY EINVAL))))))) actual-value: (25 22) result: PASS test-name: terminal-columns location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:384 source: + (test-assert + "terminal-columns" + (> (terminal-columns) 0)) actual-value: #t result: PASS test-name: terminal-columns non-file port location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:387 source: + (test-assert + "terminal-columns non-file port" + (> (terminal-columns + (open-input-string + "Join us now, share the software!")) + 0)) actual-value: #t result: PASS SKIP: tests/gremlin =================== test-name: elf-dynamic-info-needed, executable location: /home/sapientech/Dev/guix/guix_wip/tests/gremlin.scm:44 source: + (test-assert + "elf-dynamic-info-needed, executable" + (let* ((elf (call-with-input-file %guile-executable read-elf)) + (dyninfo (elf-dynamic-info elf))) + (or (not dyninfo) + (lset<= + string=? + (list (string-append "libguile-" (effective-version)) + "libgc" + "libunistring" + "libffi") + (map (lambda (lib) + (string-take lib (string-contains lib ".so"))) + (elf-dynamic-info-needed dyninfo)))))) result: SKIP test-name: expand-origin location: /home/sapientech/Dev/guix/guix_wip/tests/gremlin.scm:55 source: + (test-equal + "expand-origin" + '("OOO/../lib" + "OOO" + "../OOO/bar/OOO/baz" + "ORIGIN/foo") + (map (cut expand-origin <> "OOO") + '("$ORIGIN/../lib" + "${ORIGIN}" + "../${ORIGIN}/bar/$ORIGIN/baz" + "ORIGIN/foo"))) expected-value: (OOO/../lib OOO ../OOO/bar/OOO/baz ORIGIN/foo) actual-value: (OOO/../lib OOO ../OOO/bar/OOO/baz ORIGIN/foo) result: PASS FAIL: tests/lint ================ test-name: description: not a string location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:145 source: + (test-assert + "description: not a string" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (description 'foobar)))) + (check-description-style pkg))) + "invalid description"))) actual-value: #t result: PASS test-name: description: not empty location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:153 source: + (test-assert + "description: not empty" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (description "")))) + (check-description-style pkg))) + "description should not be empty"))) actual-value: #t result: PASS test-name: description: valid Texinfo markup location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:161 source: + (test-assert + "description: valid Texinfo markup" + (->bool + (string-contains + (with-warnings + (check-description-style + (dummy-package "x" (description "f{oo}b@r")))) + "Texinfo markup in description is invalid"))) actual-value: #t result: PASS test-name: description: does not start with an upper-case letter location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:168 source: + (test-assert + "description: does not start with an upper-case letter" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (description "bad description.")))) + (check-description-style pkg))) + "description should start with an upper-case letter"))) actual-value: #t result: PASS test-name: description: may start with a digit location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:176 source: + (test-assert + "description: may start with a digit" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description "2-component library.")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: description: may start with lower-case package name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:183 source: + (test-assert + "description: may start with lower-case package name" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description "x is a dummy package.")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: description: two spaces after end of sentence location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:190 source: + (test-assert + "description: two spaces after end of sentence" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (description "Bad. Quite bad.")))) + (check-description-style pkg))) + "sentences in description should be followed by two spaces"))) actual-value: #t result: PASS test-name: description: end-of-sentence detection with abbreviations location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:198 source: + (test-assert + "description: end-of-sentence detection with abbreviations" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description + "E.g. Foo, i.e. Bar resp. Baz (a.k.a. DVD).")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: synopsis: not a string location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:206 source: + (test-assert + "synopsis: not a string" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis #f)))) + (check-synopsis-style pkg))) + "invalid synopsis"))) actual-value: #t result: PASS test-name: synopsis: not empty location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:214 source: + (test-assert + "synopsis: not empty" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "")))) + (check-synopsis-style pkg))) + "synopsis should not be empty"))) actual-value: #t result: PASS test-name: synopsis: does not start with an upper-case letter location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:222 source: + (test-assert + "synopsis: does not start with an upper-case letter" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "bad synopsis.")))) + (check-synopsis-style pkg))) + "synopsis should start with an upper-case letter"))) actual-value: #t result: PASS test-name: synopsis: may start with a digit location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:230 source: + (test-assert + "synopsis: may start with a digit" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "5-dimensional frobnicator")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: ends with a period location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:237 source: + (test-assert + "synopsis: ends with a period" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "Bad synopsis.")))) + (check-synopsis-style pkg))) + "no period allowed at the end of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: ends with 'etc.' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:245 source: + (test-assert + "synopsis: ends with 'etc.'" + (string-null? + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "Foo, bar, etc.")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: starts with 'A' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:251 source: + (test-assert + "synopsis: starts with 'A'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "A bad synop\u015dis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'An' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:259 source: + (test-assert + "synopsis: starts with 'An'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "An awful synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'a' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:267 source: + (test-assert + "synopsis: starts with 'a'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "a bad synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'an' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:275 source: + (test-assert + "synopsis: starts with 'an'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "an awful synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: too long location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:283 source: + (test-assert + "synopsis: too long" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis (make-string 80 #\x))))) + (check-synopsis-style pkg))) + "synopsis should be less than 80 characters long"))) actual-value: #t result: PASS test-name: synopsis: start with package name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:291 source: + (test-assert + "synopsis: start with package name" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (name "foo") + (synopsis "foo, a nice package")))) + (check-synopsis-style pkg))) + "synopsis should not start with the package name"))) actual-value: #t result: PASS test-name: synopsis: start with package name prefix location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:300 source: + (test-assert + "synopsis: start with package name prefix" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "arb" + (synopsis "Arbitrary precision")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: start with abbreviation location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:307 source: + (test-assert + "synopsis: start with abbreviation" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "uucp" + (synopsis "UUCP implementation") + (description "Imagine this is Taylor UUCP.")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: inputs: pkg-config is probably a native input location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:316 source: + (test-assert + "inputs: pkg-config is probably a native input" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (inputs `(("pkg-config" ,pkg-config)))))) + (check-inputs-should-be-native pkg))) + "'pkg-config' should probably be a native input"))) actual-value: #t result: PASS test-name: inputs: glib:bin is probably a native input location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:325 source: + (test-assert + "inputs: glib:bin is probably a native input" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (inputs `(("glib" ,glib "bin")))))) + (check-inputs-should-be-native pkg))) + "'glib:bin' should probably be a native input"))) actual-value: #t result: PASS test-name: patches: file names location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:334 source: + (test-assert + "patches: file names" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (source + (dummy-origin + (patches (list "/path/to/y.patch"))))))) + (check-patch-file-names pkg))) + "file names of patches should start with the package name"))) actual-value: #t result: PASS test-name: patches: not found location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:345 source: + (test-assert + "patches: not found" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (source + (dummy-origin + (patches + (list (search-patch + "this-patch-does-not-exist!")))))))) + (check-patch-file-names pkg))) + "patch not found"))) actual-value: #t result: PASS test-name: derivation: invalid arguments location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:357 source: + (test-assert + "derivation: invalid arguments" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (arguments + '(#:imported-modules (invalid-module)))))) + (check-derivation pkg))) + "failed to create derivation"))) actual-value: #t result: PASS test-name: license: invalid license location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:367 source: + (test-assert + "license: invalid license" + (string-contains + (with-warnings + (check-license (dummy-package "x" (license #f)))) + "invalid license")) actual-value: 63 result: PASS test-name: home-page: wrong home-page location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:373 source: + (test-assert + "home-page: wrong home-page" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page #f)))) + (check-home-page pkg))) + "invalid"))) actual-value: #t result: PASS test-name: home-page: invalid URI location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:383 source: + (test-assert + "home-page: invalid URI" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page "foobar")))) + (check-home-page pkg))) + "invalid home page URL"))) actual-value: #t result: PASS test-name: home-page: host not found location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:393 source: + (test-assert + "home-page: host not found" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page "http://does-not-exist")))) + (check-home-page pkg))) + "domain not found"))) actual-value: #f result: FAIL test-name: home-page: Connection refused location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:404 source: + (test-assert + "home-page: Connection refused" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg))) + "Connection refused"))) actual-value: #t result: PASS test-name: home-page: 200 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:415 source: + (test-equal + "home-page: 200" + "" + (with-warnings + (with-http-server + 200 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg))))) expected-value: actual-value: result: PASS test-name: home-page: 200 but short length location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:425 source: + (test-assert + "home-page: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server + 200 + "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg)))) + "suspiciously small"))) actual-value: #t result: PASS test-name: home-page: 404 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:437 source: + (test-assert + "home-page: 404" + (->bool + (string-contains + (with-warnings + (with-http-server + 404 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg)))) + "not reachable: 404"))) actual-value: #t result: PASS test-name: source-file-name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:448 source: + (test-assert + "source-file-name" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: v prefix location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:462 source: + (test-assert + "source-file-name: v prefix" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/v3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: bad checkout location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:476 source: + (test-assert + "source-file-name: bad checkout" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://www.example.com/x.git") + (commit "0"))) + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: good checkout location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:492 source: + (test-assert + "source-file-name: good checkout" + (not (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://git.example.com/x.git") + (commit "0"))) + (file-name (string-append "x-" version)) + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name")))) actual-value: #t result: PASS test-name: source-file-name: valid location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:510 source: + (test-assert + "source-file-name: valid" + (not (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/x-3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name")))) actual-value: #t result: PASS test-name: source: 200 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:526 source: + (test-equal + "source: 200" + "" + (with-warnings + (with-http-server + 200 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg))))) expected-value: actual-value: result: PASS test-name: source: 200 but short length location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:539 source: + (test-assert + "source: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server + 200 + "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg)))) + "suspiciously small"))) actual-value: #t result: PASS test-name: source: 404 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:554 source: + (test-assert + "source: 404" + (->bool + (string-contains + (with-warnings + (with-http-server + 404 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg)))) + "not reachable: 404"))) actual-value: #t result: PASS test-name: cve location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:568 source: + (test-assert + "cve" + (mock ((guix scripts lint) + package-vulnerabilities + (const '())) + (string-null? + (with-warnings + (check-vulnerabilities (dummy-package "x")))))) actual-value: #t result: PASS test-name: cve: one vulnerability location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:573 source: + (test-assert + "cve: one vulnerability" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-contains + (with-warnings + (check-vulnerabilities + (dummy-package "pi" (version "3.14")))) + "vulnerable to CVE-2015-1234"))) actual-value: 76 result: PASS test-name: cve: one patched vulnerability location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:585 source: + (test-assert + "cve: one patched vulnerability" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-null? + (with-warnings + (check-vulnerabilities + (dummy-package + "pi" + (version "3.14") + (source + (dummy-origin + (patches (list "/a/b/pi-CVE-2015-1234.patch")))))))))) actual-value: #t result: PASS test-name: cve: patched vulnerability in replacement location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:602 source: + (test-assert + "cve: patched vulnerability in replacement" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-null? + (with-warnings + (check-vulnerabilities + (dummy-package + "pi" + (version "3.14") + (source (dummy-origin)) + (replacement + (dummy-package + "pi" + (version "3.14") + (source + (dummy-origin + (patches + (list "/a/b/pi-CVE-2015-1234.patch")))))))))))) actual-value: #t result: PASS test-name: formatting: lonely parentheses location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:621 source: + (test-assert + "formatting: lonely parentheses" + (string-contains + (with-warnings + (check-formatting + (dummy-package "ugly as hell!"))) + "lonely")) actual-value: 101 result: PASS test-name: formatting: tabulation location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:631 source: + (test-assert + "formatting: tabulation" + (string-contains + (with-warnings + (check-formatting + (dummy-package "leave the tab here:\t"))) + "tabulation")) actual-value: 82 result: PASS test-name: formatting: trailing white space location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:637 source: + (test-assert + "formatting: trailing white space" + (string-contains + (with-warnings + (check-formatting (dummy-package "x"))) + "trailing white space")) actual-value: 63 result: PASS test-name: formatting: long line location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:644 source: + (test-assert + "formatting: long line" + (string-contains + (with-warnings + (check-formatting (dummy-package "x"))) + "too long")) actual-value: 78 result: PASS test-name: formatting: alright location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:652 source: + (test-assert + "formatting: alright" + (string-null? + (with-warnings + (check-formatting (dummy-package "x"))))) actual-value: #t result: PASS random seed for tests: 1469937910 SKIP: tests/containers ====================== test-name: call-with-container, exit with 0 when there is no error location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:40 source: + (test-assert + "call-with-container, exit with 0 when there is no error" + (zero? (call-with-container + '() + (const #t) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, user namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:45 source: + (test-assert + "call-with-container, user namespace" + (zero? (call-with-container + '() + (lambda () + (assert-exit + (and (zero? (getuid)) (zero? (getgid))))) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, uts namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:54 source: + (test-assert + "call-with-container, uts namespace" + (zero? (call-with-container + '() + (lambda () + (sethostname "test-container") + (primitive-exit 0)) + #:namespaces + '(user uts)))) result: SKIP test-name: call-with-container, pid namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:65 source: + (test-assert + "call-with-container, pid namespace" + (zero? (call-with-container + '() + (lambda () + (match (primitive-fork) + (0 (assert-exit (= 2 (getpid)))) + (pid (primitive-exit + (match (waitpid pid) + ((_ . status) + (status:exit-val status))))))) + #:namespaces + '(user pid)))) result: SKIP test-name: call-with-container, mnt namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:81 source: + (test-assert + "call-with-container, mnt namespace" + (zero? (call-with-container + '(("none" device "/testing" "tmpfs" () #f #f)) + (lambda () + (assert-exit (file-exists? "/testing"))) + #:namespaces + '(user mnt)))) result: SKIP test-name: call-with-container, mnt namespace, wrong bind mount location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:89 source: + (test-equal + "call-with-container, mnt namespace, wrong bind mount" + `(system-error ,ENOENT) + (catch 'system-error + (lambda () + (call-with-container + '(("/does-not-exist" + device + "/foo" + "none" + (bind-mount) + #f + #f)) + (const #t) + #:namespaces + '(user mnt))) + (lambda args + (list 'system-error (system-error-errno args))))) result: SKIP test-name: call-with-container, all namespaces location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:102 source: + (test-assert + "call-with-container, all namespaces" + (zero? (call-with-container + '() + (lambda () (primitive-exit 0))))) result: SKIP test-name: container-excursion location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:109 source: + (test-assert + "container-excursion" + (call-with-temporary-directory + (lambda (root) + (match (list (pipe) (pipe)) + (((start-in . start-out) (end-in . end-out)) + (define (container) + (close end-out) + (close start-in) + (write 'ready start-out) + (close start-out) + (read end-in) + (close end-in)) + (define (namespaces pid) + (let ((pid (number->string pid))) + (map (lambda (ns) + (readlink (string-append "/proc/" pid "/ns/" ns))) + '("user" "ipc" "uts" "net" "pid" "mnt")))) + (let* ((pid (run-container root '() %namespaces 1 container)) + (container-namespaces (namespaces pid)) + (result + (begin + (close start-out) + (read start-in) + (close start-in) + (container-excursion + pid + (lambda () + (match (primitive-fork) + (0 + (assert-exit + (equal? + container-namespaces + (namespaces (getpid))))) + (fork-pid + (match (waitpid fork-pid) + ((_ . status) + (primitive-exit + (status:exit-val + status))))))))))) + (close end-in) + (write 'done end-out) + (close end-out) + (waitpid pid) + (zero? result))))))) result: SKIP SKIP: tests/pypi ================ test-name: guix-package->pypi-name, old URL style location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:76 source: + (test-equal + "guix-package->pypi-name, old URL style" + "psutil" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.io/packages/source/p/psutil/psutil-4.3.0.tar.gz")))))) expected-value: psutil actual-value: psutil result: PASS test-name: guix-package->pypi-name, new URL style location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:84 source: + (test-equal + "guix-package->pypi-name, new URL style" + "certbot" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.python.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) expected-value: certbot actual-value: certbot result: PASS test-name: pypi->guix-package location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:92 source: + (test-assert + "pypi->guix-package" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://pypi.python.org/pypi/foo/json" + (with-output-to-file + file-name + (lambda () (display test-json)))) + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir "foo-1.0.0") + (with-output-to-file + "foo-1.0.0/requirements.txt" + (lambda () (display test-requirements))) + (system* "tar" "czvf" file-name "foo-1.0.0/") + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri + (string-append + "https://example.com/foo-" + version + ".tar.gz")) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-baz" ('unquote 'python-baz)) + ("python-setuptools" + ('unquote 'python-setuptools))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f))))) foo-1.0.0/ foo-1.0.0/requirements.txt actual-value: #t result: PASS test-name: pypi->guix-package, wheels location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:141 source: + (test-assert + "pypi->guix-package, wheels" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://pypi.python.org/pypi/foo/json" + (with-output-to-file + file-name + (lambda () (display test-json)))) + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir "foo-1.0.0") + (with-output-to-file + "foo-1.0.0/requirements.txt" + (lambda () (display test-requirements))) + (system* "tar" "czvf" file-name "foo-1.0.0/") + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + (begin + (mkdir "foo-1.0.0.dist-info") + (with-output-to-file + "foo-1.0.0.dist-info/metadata.json" + (lambda () (display test-metadata))) + (let ((zip-file (string-append file-name ".zip"))) + (system* + "zip" + zip-file + "foo-1.0.0.dist-info/metadata.json") + (rename-file zip-file file-name)) + (delete-file-recursively "foo-1.0.0.dist-info"))) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri + (string-append + "https://example.com/foo-" + version + ".tar.gz")) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-baz" ('unquote 'python-baz)) + ("python-setuptools" + ('unquote 'python-setuptools))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f))))) result: SKIP random seed for tests: 1469933106 FAIL: tests/guix-download ========================= + guix download --version guix download (GNU Guix) 0.10.0 Copyright (C) 2016 the Guix authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. + guix download http://does.not/exist accepted connection from pid 13292, user sapientech Starting download of /tmp/guix-file.zUVDhl >From http://does.not/exist...  exist 0B/s 00:00 | 0B transferred  exist 320KiB/s 00:00 | 319B transferred /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hi5hmfl117bri5c79i96fb7ymip4cb43-exist 1ipmbjjgif1f6a77j91s2y989y6sgk3fh4jiycbqqs6v2i827l7s + false ./test-env: line 1: 13275 Terminated "/home/sapientech/Dev/guix/guix_wip/pre-inst-env" "/home/sapientech/Dev/guix/guix_wip/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" FAIL tests/guix-download.sh (exit status: 1) SKIP: tests/guix-environment-container ====================================== + set -e + guix environment --version guix environment (GNU Guix) 0.10.0 Copyright (C) 2016 the Guix authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. + guile -c '((@@ (guix scripts environment) assert-container-features))' error: cannot create container: user namespaces unavailable error: is your kernel version < 3.10? + exit 77 ./test-env: line 1: 15698 Terminated "/home/sapientech/Dev/guix/guix_wip/pre-inst-env" "/home/sapientech/Dev/guix/guix_wip/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" SKIP tests/guix-environment-container.sh (exit status: 77) --MP_/RfwZ3bl.=e6TtpTaWZdR65C--