diff options
55 files changed, 1898 insertions, 363 deletions
diff --git a/Makefile.am b/Makefile.am index 9b9bdbf8b3..053dc1e8c5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,6 +38,7 @@ MODULES = \ guix/gnu-maintenance.scm \ guix/licenses.scm \ guix/build-system.scm \ + guix/build-system/cmake.scm \ guix/build-system/gnu.scm \ guix/build-system/perl.scm \ guix/build-system/trivial.scm \ @@ -45,6 +46,7 @@ MODULES = \ guix/store.scm \ guix/ui.scm \ guix/build/download.scm \ + guix/build/cmake-build-system.scm \ guix/build/gnu-build-system.scm \ guix/build/perl-build-system.scm \ guix/build/utils.scm \ @@ -58,6 +60,7 @@ MODULES = \ gnu/packages/aspell.scm \ gnu/packages/attr.scm \ gnu/packages/autotools.scm \ + gnu/packages/avahi.scm \ gnu/packages/base.scm \ gnu/packages/bash.scm \ gnu/packages/bdb.scm \ @@ -65,9 +68,12 @@ MODULES = \ gnu/packages/bison.scm \ gnu/packages/bootstrap.scm \ gnu/packages/cdrom.scm \ + gnu/packages/cflow.scm \ gnu/packages/check.scm \ + gnu/packages/cmake.scm \ gnu/packages/compression.scm \ gnu/packages/cpio.scm \ + gnu/packages/cppi.scm \ gnu/packages/cross-base.scm \ gnu/packages/curl.scm \ gnu/packages/cyrus-sasl.scm \ @@ -75,10 +81,12 @@ MODULES = \ gnu/packages/ddrescue.scm \ gnu/packages/ed.scm \ gnu/packages/emacs.scm \ + gnu/packages/fdisk.scm \ gnu/packages/file.scm \ gnu/packages/flex.scm \ gnu/packages/fontutils.scm \ gnu/packages/gawk.scm \ + gnu/packages/gcc.scm \ gnu/packages/gdb.scm \ gnu/packages/gdbm.scm \ gnu/packages/gettext.scm \ @@ -117,6 +125,8 @@ MODULES = \ gnu/packages/linux-initrd.scm \ gnu/packages/lout.scm \ gnu/packages/lsh.scm \ + gnu/packages/lsof.scm \ + gnu/packages/lua.scm \ gnu/packages/m4.scm \ gnu/packages/mailutils.scm \ gnu/packages/make-bootstrap.scm \ @@ -163,6 +173,7 @@ MODULES = \ gnu/packages/tor.scm \ gnu/packages/vim.scm \ gnu/packages/vpn.scm \ + gnu/packages/w3m.scm \ gnu/packages/wdiff.scm \ gnu/packages/wget.scm \ gnu/packages/which.scm \ @@ -185,6 +196,7 @@ dist_patch_DATA = \ gnu/packages/patches/automake-skip-amhello-tests.patch \ gnu/packages/patches/bigloo-gc-shebangs.patch \ gnu/packages/patches/binutils-ld-new-dtags.patch \ + gnu/packages/patches/cmake-fix-tests.patch \ gnu/packages/patches/cpio-gets-undeclared.patch \ gnu/packages/patches/diffutils-gets-undeclared.patch \ gnu/packages/patches/emacs-configure-sh.patch \ @@ -196,6 +208,7 @@ dist_patch_DATA = \ gnu/packages/patches/gettext-gets-undeclared.patch \ gnu/packages/patches/glib-tests-desktop.patch \ gnu/packages/patches/glib-tests-homedir.patch \ + gnu/packages/patches/glib-tests-prlimit.patch \ gnu/packages/patches/glib-tests-timezone.patch \ gnu/packages/patches/glibc-bootstrap-system.patch \ gnu/packages/patches/glibc-no-ld-so-cache.patch \ @@ -204,7 +217,7 @@ dist_patch_DATA = \ gnu/packages/patches/guile-default-utf8.patch \ gnu/packages/patches/guile-linux-syscalls.patch \ gnu/packages/patches/guile-relocatable.patch \ - gnu/packages/patches/libapr-skip-getservbyname-test.patch \ + gnu/packages/patches/libapr-skip-getservbyname-test.patch \ gnu/packages/patches/libevent-dns-tests.patch \ gnu/packages/patches/libtool-skip-tests.patch \ gnu/packages/patches/lsh-guile-compat.patch \ @@ -221,9 +234,10 @@ dist_patch_DATA = \ gnu/packages/patches/readline-link-ncurses.patch \ gnu/packages/patches/shishi-gets-undeclared.patch \ gnu/packages/patches/tar-gets-undeclared.patch \ - gnu/packages/patches/tcsh-fix-autotest.patch \ + gnu/packages/patches/tcsh-fix-autotest.patch \ gnu/packages/patches/teckit-cstdio.patch \ gnu/packages/patches/vpnc-script.patch \ + gnu/packages/patches/w3m-fix-compile.patch \ gnu/packages/patches/xpdf-constchar.patch bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap @@ -8,12 +8,6 @@ Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> * integrate needed Nix code -Guix uses Nix’s daemon (‘nix-worker’, later renamed to ‘nix-daemon’) to -actually perform builds, scheduling, substitution of pre-built binaries, -and GC-related tasks. The daemon mainly uses ‘libstore’ from Nix. -Integrating it in Guix itself will make Guix self-contained, thereby -simplifying our users’ lives. - ** Remove dependency on OpenSSL The ‘openssl’ command-line tool is used in libstore to sign store paths @@ -51,14 +45,6 @@ For a start, we may use the instance at hydra.nixos.org, generously provided by TU Delft. However, in the future, we may want to setup our own instance at gnu.org. -* add guix pull - -A tool that fetches the latest code from [[http://git.savannah.gnu.org/cgit/guix.git/snapshot/guix-master.tar.gz][cgit]], builds a derivation that -unpacks it, copies only .scm files (this excludes guix/config.in) and -compiles it, and then links to it from ~/.local/guix/latest . Change -guix-build and guix-package to have that directory first in their load -path. - * user interface ** Add a package.el (Emacs) back-end @@ -167,7 +153,6 @@ etc. See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]]. * distro -** choose a name! (Jinn?) ** port to new GNU/Linux platforms, notably ‘mipsel64-linux’ ** port to GNU/Hurd, aka. ‘i686-gnu’ diff --git a/build-aux/download.scm b/build-aux/download.scm index 62956378ed..c5486f8970 100644 --- a/build-aux/download.scm +++ b/build-aux/download.scm @@ -34,6 +34,11 @@ ;;"http://www.fdn.fr/~lcourtes/software/guix/packages" ) +;; XXX: Work around <http://bugs.gnu.org/13095>, present in Guile +;; up to 2.0.7. +(module-define! (resolve-module '(web client)) + 'shutdown (const #f)) + (define (file-name->uri file) "Return the URI for FILE." (match (string-tokenize file (char-set-complement (char-set #\/))) @@ -115,7 +115,7 @@ libstore_a_CPPFLAGS = \ -DNIX_BIN_DIR=\"$(bindir)\" \ -DOPENSSL_PATH="\"openssl\"" -libstore_a_CFLAGS = \ +libstore_a_CXXFLAGS = \ $(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS) bin_PROGRAMS = guix-daemon diff --git a/doc/guix.texi b/doc/guix.texi index a07c277e70..1be172c3f6 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -514,6 +514,12 @@ Thus, when installing MPC, the MPFR and GMP libraries also get installed in the profile; removing MPC also removes MPFR and GMP---unless they had also been explicitly installed independently. +@c XXX: keep me up-to-date +Besides, when installing a GNU package, the tool reports the +availability of a newer upstream version. In the future, it may provide +the option of installing directly from the upstream version, even if +that version is not yet in the distribution. + @item --install-from-expression=@var{exp} @itemx -e @var{exp} Install the package @var{exp} evaluates to. diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm index bc4dddc01f..114e98f606 100644 --- a/gnu/packages/autotools.scm +++ b/gnu/packages/autotools.scm @@ -164,6 +164,11 @@ exec ~a --no-auto-compile \"$0\" \"$@\" (setenv "SHELL" sh) (setenv "CONFIG_SHELL" sh))) %standard-phases))) + (native-search-paths + (list (search-path-specification + (variable "ACLOCAL_PATH") + (directories '("share/aclocal"))))) + (home-page "http://www.gnu.org/software/automake/") (synopsis "GNU Automake, a GNU standard-compliant makefile generator") diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm new file mode 100644 index 0000000000..fbdc0e2834 --- /dev/null +++ b/gnu/packages/avahi.scm @@ -0,0 +1,65 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages avahi) + #:use-module ((guix licenses) #:select (lgpl2.1+)) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages gdbm) + #:use-module (gnu packages libdaemon) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages glib) + #:use-module (gnu packages xml)) + +(define-public avahi + (package + (name "avahi") + (version "0.6.31") + (home-page "http://avahi.org") + (source (origin + (method url-fetch) + (uri (string-append home-page "/download/avahi-" + version ".tar.gz")) + (sha256 + (base32 + "0j5b5ld6bjyh3qhd2nw0jb84znq0wqai7fsrdzg7bpg24jdp2wl3")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags '("--with-distro=none" + "--disable-python" + "--disable-mono" + "--disable-doxygen-doc" + "--disable-xmltoman" + "--enable-tests" + "--disable-qt3" "--disable-qt4" + "--disable-gtk" "--disable-gtk3"))) + (inputs + `(("expat" ,expat) + ("glib" ,glib) + ("dbus" ,dbus) + ("libdaemon" ,libdaemon) + ("intltool" ,intltool) + ("pkg-config" ,pkg-config) + ("gdbm" ,gdbm))) + (synopsis "Avahi, an mDNS/DNS-SD implementation") + (description + "Avahi is a system which facilitates service discovery on a local +network. It is an implementation of the mDNS (for \"Multicast DNS\") and +DNS-SD (for \"DNS-Based Service Discovery\") protocols.") + (license lgpl2.1+))) diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 537bd5af6d..606e59b851 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -24,6 +24,7 @@ #:use-module (gnu packages bash) #:use-module (gnu packages bootstrap) #:use-module (gnu packages compression) + #:use-module (gnu packages gcc) #:use-module (gnu packages gawk) #:use-module (gnu packages guile) #:use-module (gnu packages multiprecision) @@ -88,14 +89,14 @@ lines.") (define-public sed (package (name "sed") - (version "4.2.1") + (version "4.2.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/sed/sed-" version ".tar.bz2")) (sha256 (base32 - "13wlsb4sf5d5a82xjhxqmdvrrn36rmw5f0pl9qyb9zkvldnb7hra")))) + "1myvrmh99jsvk7v3d7crm0gcrq51hmmm1r2kjyyci152in1x2j7h")))) (build-system gnu-build-system) (synopsis "GNU sed, a batch stream editor") (arguments @@ -263,14 +264,14 @@ The tools supplied with this package are: (define-public coreutils (package (name "coreutils") - (version "8.20") + (version "8.21") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/coreutils/coreutils-" version ".tar.xz")) (sha256 (base32 - "1cly97xdy3v4nbbx631k43smqw0nnpn651kkprs0yyl2cj3pkjyv")))) + "064f512185iysqqcvhnhaf3bfmzrvcgs7n405qsyp99zmfyl9amd")))) (build-system gnu-build-system) (inputs `(("acl" ,acl) ("gmp" ,gmp) @@ -342,14 +343,14 @@ that it is possible to use Make to build and install the program.") (define-public binutils (package (name "binutils") - (version "2.22") + (version "2.23.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/binutils/binutils-" version ".tar.bz2")) (sha256 (base32 - "1a9w66v5dwvbnawshjwqcgz7km6kw6ihkzp6sswv9ycc3knzhykc")))) + "06bs5v5ndb4g5qx96d52lc818gkbskd1m0sz57314v887sqfbcia")))) (build-system gnu-build-system) ;; Split Binutils in several outputs, mostly to avoid collisions in @@ -367,7 +368,11 @@ that it is possible to use Make to build and install the program.") "LDFLAGS=-static-libgcc" ;; Don't search under /usr/lib & co. - "--with-lib-path=/no-ld-lib-path"))) + "--with-lib-path=/no-ld-lib-path" + + ;; Glibc 2.17 has a "comparison of unsigned + ;; expression >= 0 is always true" in wchar.h. + "--disable-werror"))) (synopsis "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)") @@ -378,119 +383,6 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.") (license gpl3+) (home-page "http://www.gnu.org/software/binutils/"))) -(define-public gcc-4.7 - (let ((stripped? #t)) ; TODO: make this a parameter - (package - (name "gcc") - (version "4.7.2") - (source (origin - (method url-fetch) - (uri (string-append "mirror://gnu/gcc/gcc-" - version "/gcc-" version ".tar.bz2")) - (sha256 - (base32 - "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la")))) - (build-system gnu-build-system) - (inputs `(("gmp" ,gmp) - ("mpfr" ,mpfr) - ("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc. - (arguments - `(#:out-of-source? #t - #:strip-binaries? ,stripped? - #:configure-flags - `("--enable-plugin" - "--enable-languages=c,c++" - "--disable-multilib" - - "--with-local-prefix=/no-gcc-local-prefix" - - ,(let ((libc (assoc-ref %build-inputs "libc"))) - (if libc - (string-append "--with-native-system-header-dir=" libc - "/include") - "--without-headers"))) - #:make-flags - (let ((libc (assoc-ref %build-inputs "libc"))) - `(,@(if libc - (list (string-append "LDFLAGS_FOR_TARGET=" - "-B" libc "/lib " - "-Wl,-dynamic-linker " - "-Wl," libc - ,(glibc-dynamic-linker))) - '()) - ,(string-append "BOOT_CFLAGS=-O2 " - ,(if stripped? "-g0" "-g")))) - - #:tests? #f - #:phases - (alist-cons-before - 'configure 'pre-configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (libc (assoc-ref inputs "libc"))) - (when libc - ;; The following is not performed for `--without-headers' - ;; cross-compiler builds. - - ;; Fix the dynamic linker's file name. - (substitute* (find-files "gcc/config" - "^linux(64|-elf)?\\.h$") - (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix) - (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%" - suffix - (string-append libc ,(glibc-dynamic-linker))))) - - ;; Tell where to find libstdc++, libc, and `?crt*.o', except - ;; `crt{begin,end}.o', which come with GCC. - (substitute* (find-files "gcc/config" - "^(gnu-user(64)?|linux-elf)\\.h$") - (("#define LIB_SPEC (.*)$" _ suffix) - ;; Note that with this "lib" spec, we may still add a - ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED. - ;; There's not much that can be done to avoid it, though. - (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \ -%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a" - libc libc out out suffix)) - (("#define STARTFILE_SPEC.*$" line) - (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\" -#define STANDARD_STARTFILE_PREFIX_2 \"\" -~a~%" - libc line)))) - - ;; Don't retain a dependency on the build-time sed. - (substitute* "fixincludes/fixincl.x" - (("static char const sed_cmd_z\\[\\] =.*;") - "static char const sed_cmd_z[] = \"sed\";")))) - - (alist-cons-after - 'configure 'post-configure - (lambda _ - ;; Don't store configure flags, to avoid retaining references to - ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'. - (substitute* "Makefile" - (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest) - "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))) - (alist-replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (zero? - (system* "make" - ,(if stripped? - "install-strip" - "install")))) - %standard-phases))))) - - (properties `((gcc-libc . ,(assoc-ref inputs "libc")))) - (synopsis "The GNU Compiler Collection") - (description - "The GNU Compiler Collection includes compiler front ends for C, C++, -Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as -libraries for these languages (libstdc++, libgcj, libgomp,...). - -GCC development is a part of the GNU Project, aiming to improve the compiler -used in the GNU system including the GNU/Linux variant.") - (license gpl3+) - (home-page "http://gcc.gnu.org/")))) - (define-public glibc (package (name "glibc") @@ -703,7 +595,8 @@ identifier SYSTEM." #:implicit-inputs? #f ,@(substitute-keyword-arguments (package-arguments binutils) ((#:configure-flags cf) - `(list ,(string-append "--target=" (boot-triplet))))))) + `(cons ,(string-append "--target=" (boot-triplet)) + ,cf))))) (inputs %boot0-inputs)))) (define gcc-boot0 diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index 809eb84295..eaad45a741 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -104,7 +104,8 @@ check whether everything is alright." ("tarball" ,(bootstrap-origin (source* (%current-system)))))) (synopsis description*) (description #f) - (home-page #f))) + (home-page #f) + (license #f))) (define package-with-bootstrap-guile (memoize @@ -153,7 +154,8 @@ check whether everything is alright." (let ((raw (build-system (name "raw") (description "Raw build system with direct store access") - (build (lambda* (store name source inputs #:key outputs system) + (build (lambda* (store name source inputs + #:key outputs system search-paths) (define (->store file) (add-to-store store file #t "sha256" (or (search-bootstrap-binary file @@ -285,7 +287,8 @@ $out/bin/guile --version~%" "08hv8i0axwnihrcgbz19x0a7s6zyv3yx38x8r29liwl8h82x9g88"))))))))) (synopsis "Bootstrap binaries and headers of the GNU C Library") (description #f) - (home-page #f))) + (home-page #f) + (license lgpl2.1+))) (define %bootstrap-gcc ;; The initial GCC. Uses binaries from a tarball typically built by @@ -350,9 +353,17 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \ ("i686-linux" (base32 "06wqs0xxnpw3hn0xjb4c9cs0899p1xwkcysa2rvzhvpra0c5vsg2"))))))))) + (native-search-paths + (list (search-path-specification + (variable "CPATH") + (directories '("include"))) + (search-path-specification + (variable "LIBRARY_PATH") + (directories '("lib" "lib64"))))) (synopsis "Bootstrap binaries of the GNU Compiler Collection") (description #f) - (home-page #f))) + (home-page #f) + (license gpl3+))) (define %bootstrap-inputs ;; The initial, pre-built inputs. From now on, we can start building our diff --git a/gnu/packages/cflow.scm b/gnu/packages/cflow.scm new file mode 100644 index 0000000000..bb000ddc59 --- /dev/null +++ b/gnu/packages/cflow.scm @@ -0,0 +1,51 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages cflow) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (guix licenses) + #:use-module (gnu packages emacs)) + +(define-public cflow + (package + (name "cflow") + (version "1.4") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/cflow/cflow-" + version ".tar.bz2")) + (sha256 + (base32 + "1jkbq97ajcf834z68hbn3xfhiz921zhn39gklml1racf0kb3jzh3")))) + (build-system gnu-build-system) + (home-page "http://www.gnu.org/software/cflow/") + (synopsis "A tool to analyze the control flow of C programs") + (description + "GNU cflow analyzes a collection of C source files and prints a +graph, charting control flow within the program. + +GNU cflow is able to produce both direct and inverted flowgraphs +for C sources. Optionally a cross-reference listing can be +generated. Two output formats are implemented: POSIX and GNU +(extended). + +The package also provides Emacs major mode for examining the +produced flowcharts in Emacs.") + (license gpl3+))) diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm new file mode 100644 index 0000000000..734f55f330 --- /dev/null +++ b/gnu/packages/cmake.scm @@ -0,0 +1,78 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages cmake) + #:use-module (guix licenses) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages file)) + +(define-public cmake + (package + (name "cmake") + (version "2.8.10.2") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.cmake.org/files/v" + (substring version 0 + (string-index version #\. (+ 1 (string-index version #\.)))) + "/cmake-" version ".tar.gz")) + (sha256 + (base32 "1c8fj6i2x9sb39wc9av2ighj415mw33cxfrlfpafcvm0knrlylnf")))) + (build-system gnu-build-system) + (arguments + '(#:test-target "test" + #:patches (list (assoc-ref %build-inputs "fix-tests")) + #:patch-flags '("-p0") + #:phases (alist-replace + 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Replace "/bin/sh" by the right path in... a lot of + ;; files. + (substitute* + '("Modules/CompilerId/Xcode-3.pbxproj.in" + "Modules/CompilerId/Xcode-1.pbxproj.in" + "Modules/CompilerId/Xcode-2.pbxproj.in" + "Modules/CPack.RuntimeScript.in" + "Source/cmakexbuild.cxx" + "Source/cmGlobalXCodeGenerator.cxx" + "Source/CTest/cmCTestBatchTestHandler.cxx" + "Source/cmLocalUnixMakefileGenerator3.cxx" + "Utilities/cmbzip2/Makefile-libbz2_so" + "Utilities/Release/release_cmake.cmake" + "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c" + "Tests/CMakeLists.txt") + (("/bin/sh") (which "sh"))) + (zero? (system* "./configure" + (string-append "--prefix=" out))))) + %standard-phases))) + (inputs + `(("file" ,file) + ("fix-tests" ,(search-patch "cmake-fix-tests.patch")))) + (home-page "http://www.cmake.org/") + (synopsis "A cross-platform, open-source build system") + (description + "CMake is a family of tools designed to build, test and package software. +CMake is used to control the software compilation process using simple platform +and compiler independent configuration files. CMake generates native makefiles +and workspaces that can be used in the compiler environment of your choice.") + (license bsd-3))) diff --git a/gnu/packages/cppi.scm b/gnu/packages/cppi.scm new file mode 100644 index 0000000000..53f24698fc --- /dev/null +++ b/gnu/packages/cppi.scm @@ -0,0 +1,45 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages cppi) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (guix licenses)) + +(define-public cppi + (package + (name "cppi") + (version "1.18") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/cppi/cppi-" + version ".tar.xz")) + (sha256 + (base32 + "1jk42cjaggk71rimjnx3qpmb6hivps0917vl3z7wbxk3i2whb98j")))) + (build-system gnu-build-system) + (home-page "http://www.gnu.org/software/cppi/") + (synopsis "A cpp directive indenter") + (description + "GNU cppi indents C preprocessor directives to reflect their nesting and +ensure that there is exactly one space character between each #if, #elif, +#define directive and the following token. The number of spaces between the +`#' and the following directive must correspond to the level of nesting of +that directive.") + (license gpl3+))) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 6b2cda6e73..9a107967a3 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -31,14 +31,14 @@ (define-public emacs (package (name "emacs") - (version "24.2") + (version "24.3") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/emacs/emacs-" - version ".tar.bz2")) + version ".tar.xz")) (sha256 (base32 - "13wbjfjmz13qpjwssy44nw2230lllmkkgjsy0rqfm6am2cf87n3k")))) + "1385qzs3bsa52s5rcncbrkxlydkw0ajzrvfxgv8rws5fx512kakh")))) (build-system gnu-build-system) (arguments '(#:configure-flags diff --git a/gnu/packages/fdisk.scm b/gnu/packages/fdisk.scm new file mode 100644 index 0000000000..5cf02a9014 --- /dev/null +++ b/gnu/packages/fdisk.scm @@ -0,0 +1,54 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages fdisk) + #:use-module ((guix licenses) #:select (gpl3+)) + #:use-module ((gnu packages gettext) + #:renamer (symbol-prefix-proc 'guix:)) + #:use-module (gnu packages guile) + #:use-module (gnu packages linux) + #:use-module (gnu packages parted) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu)) + +(define-public fdisk + (package + (name "fdisk") + (version "2.0.0a") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/fdisk/gnufdisk-" + version ".tar.gz")) + (sha256 + (base32 + "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3")))) + (build-system gnu-build-system) + (inputs + `(("gettext" ,guix:gettext) + ("guile" ,guile-1.8) + ("util-linux" ,util-linux) + ("parted" ,parted))) + (home-page "https://www.gnu.org/software/fdisk/") + (synopsis + "GNU Fdisk, a command-line disk partitioning tool") + (description + "GNU Fdisk provides alternatives to util-linux fdisk and util-linux +cfdisk. It uses GNU Parted.") + (license gpl3+)))
\ No newline at end of file diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm new file mode 100644 index 0000000000..878d246c36 --- /dev/null +++ b/gnu/packages/gcc.scm @@ -0,0 +1,249 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages gcc) + #:use-module (guix licenses) + #:use-module (gnu packages) + #:use-module (gnu packages bootstrap) + #:use-module (gnu packages compression) + #:use-module (gnu packages multiprecision) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu)) + +(define %gcc-infrastructure + ;; Base URL for GCC's infrastructure. + "ftp://gcc.gnu.org/pub/gcc/infrastructure/") + +(define-public gcc-4.7 + (let ((stripped? #t)) ; TODO: make this a parameter + (package + (name "gcc") + (version "4.7.2") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/gcc/gcc-" + version "/gcc-" version ".tar.bz2")) + (sha256 + (base32 + "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la")))) + (build-system gnu-build-system) + (inputs `(("gmp" ,gmp) + ("mpfr" ,mpfr) + ("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc. + (arguments + `(#:out-of-source? #t + #:strip-binaries? ,stripped? + #:configure-flags + `("--enable-plugin" + "--enable-languages=c,c++" + "--disable-multilib" + + "--with-local-prefix=/no-gcc-local-prefix" + + ,(let ((libc (assoc-ref %build-inputs "libc"))) + (if libc + (string-append "--with-native-system-header-dir=" libc + "/include") + "--without-headers"))) + #:make-flags + (let ((libc (assoc-ref %build-inputs "libc"))) + `(,@(if libc + (list (string-append "LDFLAGS_FOR_TARGET=" + "-B" libc "/lib " + "-Wl,-dynamic-linker " + "-Wl," libc + ,(glibc-dynamic-linker))) + '()) + ,(string-append "BOOT_CFLAGS=-O2 " + ,(if stripped? "-g0" "-g")))) + + #:tests? #f + #:phases + (alist-cons-before + 'configure 'pre-configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (libc (assoc-ref inputs "libc"))) + (when libc + ;; The following is not performed for `--without-headers' + ;; cross-compiler builds. + + ;; Fix the dynamic linker's file name. + (substitute* (find-files "gcc/config" + "^linux(64|-elf)?\\.h$") + (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix) + (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%" + suffix + (string-append libc ,(glibc-dynamic-linker))))) + + ;; Tell where to find libstdc++, libc, and `?crt*.o', except + ;; `crt{begin,end}.o', which come with GCC. + (substitute* (find-files "gcc/config" + "^(gnu-user(64)?|linux-elf)\\.h$") + (("#define LIB_SPEC (.*)$" _ suffix) + ;; Note that with this "lib" spec, we may still add a + ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED. + ;; There's not much that can be done to avoid it, though. + (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \ +%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a" + libc libc out out suffix)) + (("#define STARTFILE_SPEC.*$" line) + (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\" +#define STANDARD_STARTFILE_PREFIX_2 \"\" +~a~%" + libc line)))) + + ;; Don't retain a dependency on the build-time sed. + (substitute* "fixincludes/fixincl.x" + (("static char const sed_cmd_z\\[\\] =.*;") + "static char const sed_cmd_z[] = \"sed\";")))) + + (alist-cons-after + 'configure 'post-configure + (lambda _ + ;; Don't store configure flags, to avoid retaining references to + ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'. + (substitute* "Makefile" + (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest) + "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))) + (alist-replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (zero? + (system* "make" + ,(if stripped? + "install-strip" + "install")))) + %standard-phases))))) + + (native-search-paths + (list (search-path-specification + (variable "CPATH") + (directories '("include"))) + (search-path-specification + (variable "LIBRARY_PATH") + (directories '("lib" "lib64"))))) + + (properties `((gcc-libc . ,(assoc-ref inputs "libc")))) + (synopsis "The GNU Compiler Collection") + (description + "The GNU Compiler Collection includes compiler front ends for C, C++, +Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as +libraries for these languages (libstdc++, libgcj, libgomp,...). + +GCC development is a part of the GNU Project, aiming to improve the compiler +used in the GNU system including the GNU/Linux variant.") + (license gpl3+) + (home-page "http://gcc.gnu.org/")))) + +(define-public isl + (package + (name "isl") + (version "0.11.1") + (source (origin + (method url-fetch) + (uri (list (string-append + "ftp://ftp.linux.student.kuleuven.be/pub/people/skimo/isl/isl-" + version + ".tar.bz2") + (string-append %gcc-infrastructure + name "-" version ".tar.gz"))) + (sha256 + (base32 + "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9")))) + (build-system gnu-build-system) + (inputs `(("gmp" ,gmp))) + (home-page "http://www.kotnet.org/~skimo/isl/") + (synopsis + "A library for manipulating sets and relations of integer points bounded +by linear constraints") + (description + "isl is a library for manipulating sets and relations of integer points +bounded by linear constraints. Supported operations on sets include +intersection, union, set difference, emptiness check, convex hull, (integer) +affine hull, integer projection, computing the lexicographic minimum using +parametric integer programming, coalescing and parametric vertex +enumeration. It also includes an ILP solver based on generalized basis +reduction, transitive closures on maps (which may encode infinite graphs), +dependence analysis and bounds on piecewise step-polynomials.") + (license lgpl2.1+))) + +(define-public cloog + (package + (name "cloog") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (list (string-append + "http://www.bastoul.net/cloog/pages/download/count.php3?url=cloog-" + version + ".tar.gz") + (string-append %gcc-infrastructure + name "-" version ".tar.gz"))) + (sha256 + (base32 + "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system gnu-build-system) + (inputs `(("gmp" ,gmp) + ("isl" ,isl))) + (arguments '(#:configure-flags '("--with-isl=system"))) + (home-page "http://www.cloog.org/") + (synopsis "A library to generate code for scanning Z-polyhedra") + (description + "CLooG is a free software library to generate code for scanning +Z-polyhedra. That is, it finds a code (e.g., in C, FORTRAN...) that +reaches each integral point of one or more parameterized polyhedra. +CLooG has been originally written to solve the code generation problem +for optimizing compilers based on the polytope model. Nevertheless it +is used now in various area e.g., to build control automata for +high-level synthesis or to find the best polynomial approximation of a +function. CLooG may help in any situation where scanning polyhedra +matters. While the user has full control on generated code quality, +CLooG is designed to avoid control overhead and to produce a very +effective code.") + (license gpl2+))) + +(define-public libelf + (package + (name "libelf") + (version "0.8.13") + (source (origin + (method url-fetch) + (uri (string-append "http://www.mr511.de/software/libelf-" + version ".tar.gz")) + (sha256 + (base32 + "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr")))) + (build-system gnu-build-system) + (arguments '(#:phases (alist-replace + 'configure + (lambda* (#:key outputs #:allow-other-keys) + ;; This old `configure' script doesn't support + ;; variables passed as arguments. + (let ((out (assoc-ref outputs "out"))) + (setenv "CONFIG_SHELL" (which "bash")) + (zero? + (system* "./configure" + (string-append "--prefix=" out))))) + %standard-phases))) + (home-page "http://www.mr511.de/software/english.html") + (synopsis "An ELF object file access library") + (description "libelf is a C library to access ELF object files.") + (license lgpl2.0+))) diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 1286700911..7ff9ede22b 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -18,7 +18,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages glib) - #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+)) + #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+ gpl2)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) @@ -76,7 +76,7 @@ shared NFS home directories.") (version "2.34.3") (source (origin (method url-fetch) - (uri (string-append "http://ftp.gnome.org/pub/gnome/sources/" + (uri (string-append "mirror://gnome/sources/" name "/2.34/" name "-" version ".tar.xz")) (sha256 @@ -99,11 +99,14 @@ shared NFS home directories.") ("patch/tests-homedir" ,(search-patch "glib-tests-homedir.patch")) ("patch/tests-desktop" - ,(search-patch "glib-tests-desktop.patch")))) + ,(search-patch "glib-tests-desktop.patch")) + ("patch/tests-prlimit" + ,(search-patch "glib-tests-prlimit.patch")))) (arguments '(#:patches (list (assoc-ref %build-inputs "patch/tests-tzdata") (assoc-ref %build-inputs "patch/tests-homedir") - (assoc-ref %build-inputs "patch/tests-desktop")) + (assoc-ref %build-inputs "patch/tests-desktop") + (assoc-ref %build-inputs "patch/tests-prlimit")) #:phases (alist-cons-before 'build 'pre-build (lambda* (#:key inputs outputs #:allow-other-keys) @@ -124,3 +127,40 @@ and interfaces for such runtime functionality as an event loop, threads, dynamic loading, and an object system.") (home-page "http://developer.gnome.org/glib/") (license lgpl2.0+))) ; some files are under lgpl2.1+ + +(define-public intltool + (package + (name "intltool") + (version "0.40.6") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://gnome/sources/intltool/0.40/intltool-" + version + ".tar.bz2")) + (sha256 + (base32 + "0r1vkvy5xzqk01yl6a0xlrry39bra24alkrx6279b77hc62my7jd")))) + (build-system gnu-build-system) + (native-inputs `(("pkg-config" ,pkg-config))) + (propagated-inputs + `(("gettext" ,guix:gettext) + ("perl-xml-parser" ,xml:perl-xml-parser) + ("perl" ,perl))) + (home-page "http://freedesktop.org/wiki/Software/intltool") + (synopsis "Tools to centralize translation of many different file formats") + (description + "intltool is a set of tools to centralize translation of many different +file formats using GNU gettext-compatible PO files. + +The intltool collection can be used to do these things: + + Extract translatable strings from various source files (.xml.in, + glade, .desktop.in, .server.in, .oaf.in). + + Collect the extracted strings together with messages from traditional + source files (.c, .h) in po/$(PACKAGE).pot. + + Merge back the translations from .po files into .xml, .desktop and + oaf files. This merge step will happen at build resp. installation time.") + (license gpl2))) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index f26582fb22..1810b65fe8 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; ;;; This file is part of GNU Guix. @@ -57,15 +57,14 @@ Daemon and possibly more in the future.") (define-public libgcrypt (package (name "libgcrypt") - (version "1.5.0") - (source - (origin - (method url-fetch) - (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-" - version ".tar.bz2")) - (sha256 - (base32 - "1ykkh7dm0gyndz7bbpvn3agijj8xb2h02m02f42hm504c18zqqjb")))) + (version "1.5.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-" + version ".tar.bz2")) + (sha256 + (base32 + "09z5zbxhvg6c7n8qcm8h9ygr28qli2n83hfq1f69jsg711cb37md")))) (build-system gnu-build-system) (propagated-inputs `(("libgpg-error" ,libgpg-error))) diff --git a/gnu/packages/gnutls.scm b/gnu/packages/gnutls.scm index 0a681e3a88..dc571adc60 100644 --- a/gnu/packages/gnutls.scm +++ b/gnu/packages/gnutls.scm @@ -52,7 +52,7 @@ portable, and only require an ANSI C89 platform.") (define-public gnutls (package (name "gnutls") - (version "3.1.6") + (version "3.1.9.1") (source (origin (method url-fetch) (uri @@ -62,7 +62,7 @@ portable, and only require an ANSI C89 platform.") version ".tar.xz")) (sha256 (base32 - "0zsybr9plllk1phh83bx9bg7c5ccik427j4n3k1s9fiy4j69n0w3")))) + "0gkwhz7sypfy39jfj2yzrngbxq5j9l9smqc89mqlqsh25spc8009")))) (build-system gnu-build-system) (inputs `(("guile" ,guile-2.0) diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 58e7c2910c..c74d0512c6 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -88,6 +88,11 @@ ;; When cross-compiling, a native version of Guile itself is needed. (self-native-input? #t) + (native-search-paths + (list (search-path-specification + (variable "GUILE_LOAD_PATH") + (directories '("share/guile/site"))))) + (synopsis "GNU Guile 1.8, an embeddable Scheme interpreter") (description "GNU Guile 1.8 is an interpreter for the Scheme programming language, @@ -137,6 +142,14 @@ extensible. It supports many SRFIs.") (string-append bash "/bin/bash"))))) %standard-phases))) + (native-search-paths + (list (search-path-specification + (variable "GUILE_LOAD_PATH") + (directories '("share/guile/site/2.0"))) + (search-path-specification + (variable "GUILE_LOAD_COMPILED_PATH") + (directories '("share/guile/site/2.0"))))) + (synopsis "GNU Guile 2.0, an embeddable Scheme implementation") (description "GNU Guile is an implementation of the Scheme programming language, with diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm new file mode 100644 index 0000000000..d0cdefd533 --- /dev/null +++ b/gnu/packages/lsof.scm @@ -0,0 +1,75 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages lsof) + #:use-module ((guix licenses) + #:renamer (symbol-prefix-proc 'license:)) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages perl)) + +(define-public lsof + (package + (name "lsof") + (version "4.87") + (source (origin + (method url-fetch) + (uri (string-append "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_" + version ".tar.bz2")) + (sha256 (base32 + "0b6si72sml7gr9784ak491cxxbm9mx5bh174yg6rrirbv04kgpfz")))) + (build-system gnu-build-system) + (inputs `(("perl" ,perl))) + (arguments + `(#:tests? #f ; no test target + #:phases + (alist-replace + 'unpack + (lambda* (#:key source name version #:allow-other-keys) + (let ((unpack (assoc-ref %standard-phases 'unpack))) + (apply unpack (list #:source source)) + (apply unpack (list #:source (car (find-files "." "\\.tar$")))))) + (alist-replace + 'configure + (lambda* (#:key #:allow-other-keys) + (setenv "LSOF_CC" "gcc") + (setenv "LSOF_MAKE" "make") + (system* "./Configure" "linux")) + (alist-replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir out) + (mkdir (string-append out "/bin")) + (copy-file "lsof" (string-append out "/bin/lsof")) + (mkdir (string-append out "/share")) + (mkdir (string-append out "/share/man")) + (mkdir (string-append out "/share/man/man8")) + (copy-file "lsof.8" (string-append out "/share/man/man8/lsof.8")) + )) + %standard-phases))))) + (synopsis "lsof displays information about open files") + (description + "Lsof stands for LiSt Open Files, and it does just that. +It lists information about files that are open by the processes running +on the system.") + (license (license:fsf-free + "file://00FAQ" + "License inspired by zlib, see point 1.9 of 00FAQ in the distribution.")) + (home-page "http://people.freebsd.org/~abe/"))) diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm new file mode 100644 index 0000000000..14fc28ced0 --- /dev/null +++ b/gnu/packages/lua.scm @@ -0,0 +1,63 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages lua) + #:use-module (guix licenses) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages readline)) + +(define-public lua + (package + (name "lua") + (version "5.2.1") + (source (origin + (method url-fetch) + (uri (string-append "http://www.lua.org/ftp/lua-" + version ".tar.gz")) + (sha256 + (base32 "1rbv2ysq5fdksz7xg07dnrkl8i0gnx855hg4z6b324vng6l4sc34")))) + (build-system gnu-build-system) + (inputs `(("readline", readline))) + (arguments + '(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-1)) + #:test-target "test" + #:phases (alist-replace + 'build + (lambda _ (zero? (system* "make" "linux"))) ; XXX: Other OS. + (alist-replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (zero? (system + (string-append "make install INSTALL_TOP=" out))))) + (alist-delete 'configure %standard-phases))))) + (home-page "http://www.lua.org/") + (synopsis "An embeddable scripting language.") + (description + "Lua is a powerful, fast, lightweight, embeddable scripting language. Lua +combines simple procedural syntax with powerful data description constructs +based on associative arrays and extensible semantics. Lua is dynamically typed, +runs by interpreting bytecode for a register-based virtual machine, and has +automatic memory management with incremental garbage collection, making it ideal +for configuration, scripting, and rapid prototyping.") + (license x11))) diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm index 3bb926bd36..40e3e21210 100644 --- a/gnu/packages/make-bootstrap.scm +++ b/gnu/packages/make-bootstrap.scm @@ -27,6 +27,7 @@ #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages gawk) + #:use-module (gnu packages gcc) #:use-module (gnu packages guile) #:use-module (gnu packages bdw-gc) #:use-module (gnu packages linux) diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm index 5e0dee0620..acff875db1 100644 --- a/gnu/packages/multiprecision.scm +++ b/gnu/packages/multiprecision.scm @@ -70,13 +70,13 @@ faster algorithms.") (define-public mpfr (package (name "mpfr") - (version "3.1.1") + (version "3.1.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/mpfr/mpfr-" version ".tar.xz")) (sha256 (base32 - "0ym1ylcq803n52qrggxqmkz66gbn8ncc3ybawal31v5y5p1srma9")))) + "0fs501qi8l523gs3cpy4jjcnvwxggyfbklcys80wq236xx3hz79r")))) (build-system gnu-build-system) (propagated-inputs `(("gmp" ,gmp))) ; <mpfr.h> refers to <gmp.h> (synopsis "GNU MPFR, a library for multiple-precision floating-point diff --git a/gnu/packages/patches/cmake-fix-tests.patch b/gnu/packages/patches/cmake-fix-tests.patch new file mode 100644 index 0000000000..ae28ca336b --- /dev/null +++ b/gnu/packages/patches/cmake-fix-tests.patch @@ -0,0 +1,45 @@ +--- Tests/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100 ++++ Tests/CMakeLists.txt 2013-03-20 22:58:02.000000000 +0100 +@@ -1706,16 +1706,17 @@ + PASS_REGULAR_EXPRESSION "Could not find executable" + FAIL_REGULAR_EXPRESSION "SegFault") + +- configure_file( +- "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in" +- "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" +- @ONLY ESCAPE_QUOTES) +- add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND} +- -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V +- --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log" +- ) +- set_tests_properties(CTestTestUpload PROPERTIES +- PASS_REGULAR_EXPRESSION "Upload\\.xml") ++# This test requires network connectivity: skip it. ++# configure_file( ++# "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in" ++# "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" ++# @ONLY ESCAPE_QUOTES) ++# add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND} ++# -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V ++# --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log" ++# ) ++# set_tests_properties(CTestTestUpload PROPERTIES ++# PASS_REGULAR_EXPRESSION "Upload\\.xml") + + configure_file( + "${CMake_SOURCE_DIR}/Tests/CTestTestConfigFileInBuildDir/test1.cmake.in" +--- Utilities/cmcurl/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100 ++++ Utilities/cmcurl/CMakeLists.txt 2013-03-20 23:08:41.000000000 +0100 +@@ -729,8 +729,9 @@ + ADD_EXECUTABLE(LIBCURL Testing/curltest.c) + TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS}) + +-IF(CMAKE_CURL_TEST_URL) +- ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL}) +-ENDIF(CMAKE_CURL_TEST_URL) ++# This test requires network connectivity: skip it. ++#IF(CMAKE_CURL_TEST_URL) ++# ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL}) ++#ENDIF(CMAKE_CURL_TEST_URL) + + INSTALL(FILES COPYING DESTINATION ${CMake_DOC_DEST}/cmcurl) diff --git a/gnu/packages/patches/emacs-configure-sh.patch b/gnu/packages/patches/emacs-configure-sh.patch index fd34d06ced..6f5f3fe93a 100644 --- a/gnu/packages/patches/emacs-configure-sh.patch +++ b/gnu/packages/patches/emacs-configure-sh.patch @@ -1,14 +1,13 @@ Make sure the right shell is used when creating src/epaths.h. ---- emacs-24.2/configure 2013-01-13 17:01:53.000000000 +0100 -+++ emacs-24.2/configure 2013-01-13 17:01:57.000000000 +0100 -@@ -24135,7 +24135,7 @@ done +--- emacs-24.3/configure 2013-03-14 17:42:26.000000000 +0100 ++++ emacs-24.3/configure 2013-03-14 17:42:58.000000000 +0100 +@@ -26463,7 +26463,7 @@ done ;; "epaths":C) echo creating src/epaths.h --${MAKE-make} epaths-force -+${MAKE-make} epaths-force SHELL="$CONFIG_SHELL" +-${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force ++${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force SHELL="$CONFIG_SHELL" ;; "gdbinit":C) if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then - diff --git a/gnu/packages/patches/glib-tests-prlimit.patch b/gnu/packages/patches/glib-tests-prlimit.patch new file mode 100644 index 0000000000..f2b2a61bee --- /dev/null +++ b/gnu/packages/patches/glib-tests-prlimit.patch @@ -0,0 +1,14 @@ +prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64 as found on +hydra.gnu.org, and strace(1) doesn't recognize it. + +--- glib-2.34.3/glib/tests/thread.c 2012-11-20 15:27:12.000000000 +0100 ++++ glib-2.34.3/glib/tests/thread.c 2013-03-27 14:48:31.000000000 +0100 +@@ -130,7 +130,7 @@ test_thread3 (void) + static void + test_thread4 (void) + { +-#ifdef HAVE_PRLIMIT ++#if 0 + struct rlimit ol, nl; + GThread *thread; + GError *error; diff --git a/gnu/packages/patches/w3m-fix-compile.patch b/gnu/packages/patches/w3m-fix-compile.patch new file mode 100644 index 0000000000..5604052f67 --- /dev/null +++ b/gnu/packages/patches/w3m-fix-compile.patch @@ -0,0 +1,15 @@ +https://bugs.archlinux.org/task/33397 + +diff -aur old/main.c new/main.c +--- main.c 2013-01-14 18:16:14.216210053 -0600 ++++ main.c 2013-01-14 18:17:28.816220559 -0600 +@@ -833,7 +833,8 @@ + mySignal(SIGPIPE, SigPipe); + #endif + +- orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); ++ orig_GC_warn_proc = GC_get_warn_proc(); ++ GC_set_warn_proc(wrap_GC_warn_proc); + err_msg = Strnew(); + if (load_argc == 0) { + /* no URL specified */ diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 624d228059..c677a1b7e2 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -63,6 +63,9 @@ (string-append "-Dloclibpth=" libc "/lib"))))) %standard-phases))) (inputs `(("patch/no-sys-dirs" ,(search-patch "perl-no-sys-dirs.patch")))) + (native-search-paths (list (search-path-specification + (variable "PERL5LIB") + (directories '("lib/perl5/site_perl"))))) (synopsis "Implementation of the Perl programming language") (description "Perl 5 is a highly capable, feature-rich programming language with over diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm index 0910a410ee..294163b474 100644 --- a/gnu/packages/pkg-config.scm +++ b/gnu/packages/pkg-config.scm @@ -36,6 +36,11 @@ "05wc5nwkqz7saj2v33ydmz1y6jdg659dll4jjh91n41m63gx0qsg")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-internal-glib"))) + (native-search-paths + (list (search-path-specification + (variable "PKG_CONFIG_PATH") + (directories '("lib/pkgconfig" "lib64/pkgconfig" + "share/pkgconfig"))))) (home-page "http://www.freedesktop.org/wiki/Software/pkg-config") (license gpl2+) (synopsis "a helper tool used when compiling applications and diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 52b11e4197..26b76864ce 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -43,6 +43,10 @@ `(("zlib" ,zlib) ("openssl" ,openssl) ("bzip2" ,bzip2))) + (native-search-paths + (list (search-path-specification + (variable "PYTHONPATH") + (directories '("lib/python2.7/site-packages"))))) (home-page "http://python.org") (synopsis "Python, a high-level dynamically-typed programming language") diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm index 96016c053d..4194f48ffe 100644 --- a/gnu/packages/texinfo.scm +++ b/gnu/packages/texinfo.scm @@ -28,14 +28,14 @@ (define-public texinfo (package (name "texinfo") - (version "5.0") + (version "5.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/texinfo/texinfo-" version ".tar.xz")) (sha256 (base32 - "1p34f68h9ggfj6ckgj0p62qlj7pmz3ha3vc91kh4hr44pnwm1pla")))) + "0864v5i488x3mb3v5p6nhy2kw0mqkzpa3b0453iibj81zlpq078q")))) (build-system gnu-build-system) (inputs `(("ncurses" ,ncurses) ("xz" ,xz))) diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm index 9393e1e7b4..4cd90cd7f2 100644 --- a/gnu/packages/vpn.scm +++ b/gnu/packages/vpn.scm @@ -23,8 +23,14 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (gnu packages) + #:use-module (gnu packages compression) + #:use-module ((gnu packages gettext) + #:renamer (symbol-prefix-proc 'gnu:)) #:use-module (gnu packages gnupg) - #:use-module (gnu packages perl)) + #:use-module (gnu packages openssl) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages xml)) (define-public vpnc (package @@ -64,3 +70,45 @@ shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES, Only \"Universal TUN/TAP device driver support\" is needed in the kernel.") (license license:gpl2+) ; some file are bsd-2, see COPYING (home-page "http://www.unix-ag.uni-kl.de/~massar/vpnc/"))) + + +(define-public openconnect + (package + (name "openconnect") + (version "4.99") + (source (origin + (method url-fetch) + (uri (string-append "ftp://ftp.infradead.org/pub/openconnect/openconnect-" + version ".tar.gz")) + (sha256 (base32 + "1rd8pap455wzkx19i0sy3cqap524b6fwcjvqynxp6lhm01di4bd6")))) + (build-system gnu-build-system) + (inputs + `(("gettext" ,gnu:gettext) + ("libxml2" ,libxml2) + ("openssl" ,openssl) + ("pkg-config" ,pkg-config) + ("vpnc" ,vpnc) + ("zlib" ,zlib))) + (arguments + `(#:phases + (alist-replace + 'configure + (lambda* (#:key inputs #:allow-other-keys #:rest args) + (let ((vpnc (assoc-ref inputs "vpnc")) + (configure (assoc-ref %standard-phases 'configure))) + (apply configure + (append args + (list '#:configure-flags + (list (string-append "--with-vpnc-script=" + vpnc + "/etc/vpnc/vpnc-script"))))))) + %standard-phases))) + (synopsis "client for cisco vpn") + (description + "OpenConnect is a client for Cisco's AnyConnect SSL VPN, which is +supported by the ASA5500 Series, by IOS 12.4(9)T or later on Cisco SR500, +870, 880, 1800, 2800, 3800, 7200 Series and Cisco 7301 Routers, +and probably others.") + (license license:lgpl2.1) + (home-page "http://www.infradead.org/openconnect/"))) diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm new file mode 100644 index 0000000000..9199cbd488 --- /dev/null +++ b/gnu/packages/w3m.scm @@ -0,0 +1,81 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages w3m) + #:use-module ((guix licenses) #:select (x11-style)) + #:use-module ((gnu packages gettext) + #:renamer (symbol-prefix-proc 'guix:)) + #:use-module (gnu packages bdw-gc) + #:use-module (gnu packages compression) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages openssl) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu)) + +(define-public w3m + (package + (name "w3m") + (version "0.5.3") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/w3m/w3m-" + version ".tar.gz")) + (sha256 + (base32 + "1qx9f0kprf92r1wxl3sacykla0g04qsi0idypzz24b7xy9ix5579")))) + (build-system gnu-build-system) + (arguments `(#:tests? #f ; no check target + #:phases (alist-cons-before + 'configure 'fix-perl + (lambda _ + ;; https://launchpad.net/bugs/935540 + ;; 'struct file_handle' is used by 'glibc' + (substitute* '("istream.c" "istream.h") + (("struct[[:blank:]]+file_handle") + "struct w3m_file_handle")) + (substitute* '("scripts/w3mmail.cgi.in" + "scripts/dirlist.cgi.in") + (("@PERL@") (which "perl")))) + %standard-phases) + ;; cf. https://bugs.archlinux.org/task/33397 + #:patches (list (assoc-ref %build-inputs + "patch/fix-compile")) + #:patch-flags '("-p0"))) + (inputs + `(("gettext" ,guix:gettext) + ("libgc" ,libgc) + ("ncurses" ,ncurses) + ("openssl" ,openssl) + ("perl" ,perl) + ("pkg-config" ,pkg-config) + ("zlib" ,zlib) + ("patch/fix-compile" ,(search-patch "w3m-fix-compile.patch")))) + (home-page "http://w3m.sourceforge.net/") + (synopsis "w3m, a text-mode web browser") + (description + "w3m is a text-based web browser as well as a pager like 'more' or +'less'. With w3m you can browse web pages through a terminal emulator +window. Moreover, w3m can be used as a text formatting tool which +typesets HTML into plain text.") + (license (x11-style "file://doc/README" + "See 'doc/README' in the distribution.")))) diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm new file mode 100644 index 0000000000..4e993f3961 --- /dev/null +++ b/guix/build-system/cmake.scm @@ -0,0 +1,124 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix build-system cmake) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix derivations) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:export (cmake-build + cmake-build-system)) + +;; Commentary: +;; +;; Standard build procedure for packages using CMake. This is implemented as an +;; extension of `gnu-build-system'. +;; +;; Code: + +(define* (cmake-build store name source inputs + #:key (guile #f) + (outputs '("out")) (configure-flags ''()) + (search-paths '()) + (make-flags ''()) + (patches ''()) (patch-flags ''("--batch" "-p1")) + (cmake (@ (gnu packages cmake) cmake)) + (out-of-source? #f) + (tests? #t) + (test-target "test") + (parallel-build? #t) (parallel-tests? #f) + (patch-shebangs? #t) + (strip-binaries? #t) + (strip-flags ''("--strip-debug")) + (strip-directories ''("lib" "lib64" "libexec" + "bin" "sbin")) + (phases '(@ (guix build cmake-build-system) + %standard-phases)) + (system (%current-system)) + (imported-modules '((guix build cmake-build-system) + (guix build gnu-build-system) + (guix build utils))) + (modules '((guix build cmake-build-system) + (guix build gnu-build-system) + (guix build utils)))) + "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE +provides a 'CMakeLists.txt' file as its build system." + (define builder + `(begin + (use-modules ,@modules) + (cmake-build #:source ,(if (and source (derivation-path? source)) + (derivation-path->output-path source) + source) + #:system ,system + #:outputs %outputs + #:inputs %build-inputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:patches ,patches + #:patch-flags ,patch-flags + #:phases ,phases + #:configure-flags ,configure-flags + #:make-flags ,make-flags + #:out-of-source? ,out-of-source? + #:tests? ,tests? + #:test-target ,test-target + #:parallel-build? ,parallel-build? + #:parallel-tests? ,parallel-tests? + #:patch-shebangs? ,patch-shebangs? + #:strip-binaries? ,strip-binaries? + #:strip-flags ,strip-flags + #:strip-directories ,strip-directories))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system)) + ((and (? string?) (? derivation-path?)) + guile) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages base))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system))))) + + (let ((cmake (package-derivation store cmake system))) + (build-expression->derivation store name system + builder + `(,@(if source + `(("source" ,source)) + '()) + ("cmake" ,cmake) + ,@inputs + + ;; Keep the standard inputs of + ;; `gnu-build-system'. + ,@(standard-inputs system)) + + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build))) + +(define cmake-build-system + (build-system (name 'cmake) + (description "The standard CMake build system") + (build cmake-build))) + +;;; cmake.scm ends here diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index 8049e7510f..d5ad1e3e01 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -159,11 +159,12 @@ System: GCC, GNU Make, Bash, Coreutils, etc." (define* (gnu-build store name source inputs #:key (guile #f) - (outputs '("out")) (configure-flags ''()) + (outputs '("out")) + (search-paths '()) + (configure-flags ''()) (make-flags ''()) (patches ''()) (patch-flags ''("--batch" "-p1")) (out-of-source? #f) - (path-exclusions ''()) (tests? #t) (test-target "check") (parallel-build? #t) (parallel-tests? #t) @@ -190,6 +191,21 @@ the builder's environment, from the host. Note that we distinguish between both, because for Guile's own modules like (ice-9 foo), we want to use GUILE's own version of it, rather than import the user's one, which could lead to gratuitous input divergence." + (define implicit-inputs + (and implicit-inputs? + (parameterize ((%store store)) + (standard-inputs system)))) + + (define implicit-search-paths + (if implicit-inputs? + (append-map (match-lambda + ((_ (? package? p) _ ...) + (package-native-search-paths p)) + (_ + '())) + implicit-inputs) + '())) + (define builder `(begin (use-modules ,@modules) @@ -199,13 +215,15 @@ which could lead to gratuitous input divergence." #:system ,system #:outputs %outputs #:inputs %build-inputs + #:search-paths ',(map search-path-specification->sexp + (append implicit-search-paths + search-paths)) #:patches ,patches #:patch-flags ,patch-flags #:phases ,phases #:configure-flags ,configure-flags #:make-flags ,make-flags #:out-of-source? ,out-of-source? - #:path-exclusions ,path-exclusions #:tests? ,tests? #:test-target ,test-target #:parallel-build? ,parallel-build? @@ -233,8 +251,7 @@ which could lead to gratuitous input divergence." '()) ,@inputs ,@(if implicit-inputs? - (parameterize ((%store store)) - (standard-inputs system)) + implicit-inputs '())) #:outputs outputs #:modules imported-modules diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm index 537c29e799..c97698e225 100644 --- a/guix/build-system/perl.scm +++ b/guix/build-system/perl.scm @@ -38,6 +38,7 @@ (define* (perl-build store name source inputs #:key (perl (@ (gnu packages perl) perl)) + (search-paths '()) (tests? #t) (make-maker-flags ''()) (phases '(@ (guix build perl-build-system) @@ -53,6 +54,9 @@ (guix build utils)))) "Build SOURCE using PERL, and with INPUTS. This assumes that SOURCE provides a `Makefile.PL' file as its build system." + (define perl-search-paths + (package-native-search-paths perl)) + (define builder `(begin (use-modules ,@modules) @@ -60,6 +64,9 @@ provides a `Makefile.PL' file as its build system." #:source ,(if (and source (derivation-path? source)) (derivation-path->output-path source) source) + #:search-paths ',(map search-path-specification->sexp + (append perl-search-paths + search-paths)) #:make-maker-flags ,make-maker-flags #:system ,system #:test-target "test" diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm index e5bbeaa91d..2eb15aa2e0 100644 --- a/guix/build-system/trivial.scm +++ b/guix/build-system/trivial.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,7 +26,9 @@ #:export (trivial-build-system)) (define* (trivial-build store name source inputs - #:key outputs guile system builder (modules '())) + #:key + outputs guile system builder (modules '()) + search-paths) "Run build expression BUILDER, an expression, for SYSTEM. SOURCE is ignored." (define guile-for-build diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm new file mode 100644 index 0000000000..877d8110d7 --- /dev/null +++ b/guix/build/cmake-build-system.scm @@ -0,0 +1,63 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix build cmake-build-system) + #:use-module ((guix build gnu-build-system) + #:renamer (symbol-prefix-proc 'gnu:)) + #:use-module (guix build utils) + #:use-module (ice-9 match) + #:export (%standard-phases + cmake-build)) + +;; Commentary: +;; +;; Builder-side code of the standard cmake build procedure. +;; +;; Code: + +(define* (configure #:key outputs (configure-flags '()) + #:allow-other-keys) + "Configure the given package." + (let ((out (assoc-ref outputs "out"))) + (if (file-exists? "CMakeLists.txt") + (let ((args `(,(string-append "-DCMAKE_INSTALL_PREFIX=" out) + ,@configure-flags))) + (format #t "running 'cmake' with arguments ~s~%" args) + (zero? (apply system* "cmake" args))) + (error "no CMakeLists.txt found")))) + +(define* (check #:key (tests? #t) (parallel-tests? #t) (test-target "test") + #:allow-other-keys) + (let ((gnu-check (assoc-ref gnu:%standard-phases 'check))) + (gnu-check #:tests? tests? #:test-target test-target + #:parallel-tests? parallel-tests?))) + +(define %standard-phases + ;; Everything is as with the GNU Build System except for the `configure' + ;; and 'check' phases. + (alist-replace 'configure configure + (alist-replace 'check check + gnu:%standard-phases))) + +(define* (cmake-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; cmake-build-system.scm ends here diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm index 8fc6f86507..94a7d6bca8 100644 --- a/guix/build/gnu-build-system.scm +++ b/guix/build/gnu-build-system.scm @@ -48,34 +48,22 @@ #f dir)) -(define* (set-paths #:key inputs (path-exclusions '()) +(define* (set-paths #:key inputs (search-paths '()) #:allow-other-keys) - (define (relevant-input-directories env-var) - ;; Return the subset of INPUTS that should be considered when setting - ;; ENV-VAR. - (match (assoc-ref path-exclusions env-var) - (#f - (map cdr inputs)) - ((excluded ...) - (filter-map (match-lambda - ((name . dir) - (and (not (member name excluded)) - dir))) - inputs)))) + (define input-directories + (match inputs + (((_ . dir) ...) + dir))) - (set-path-environment-variable "PATH" '("bin") - (relevant-input-directories "PATH")) - (set-path-environment-variable "CPATH" '("include") - (relevant-input-directories "CPATH")) - (set-path-environment-variable "LIBRARY_PATH" '("lib" "lib64") - (relevant-input-directories "LIBRARY_PATH")) + (set-path-environment-variable "PATH" '("bin" "sbin") + input-directories) - ;; FIXME: Eventually move this to the `search-paths' field of the - ;; `pkg-config' package. - (set-path-environment-variable "PKG_CONFIG_PATH" - '("lib/pkgconfig" "lib64/pkgconfig" - "share/pkgconfig") - (relevant-input-directories "PKG_CONFIG_PATH")) + (for-each (match-lambda + ((env-var (directories ...) separator) + (set-path-environment-variable env-var directories + input-directories + #:separator separator))) + search-paths) ;; Dump the environment variables as a shell script, for handy debugging. (system "export > environment-variables")) diff --git a/guix/build/perl-build-system.scm b/guix/build/perl-build-system.scm index d625ef3ed6..793b6aacb5 100644 --- a/guix/build/perl-build-system.scm +++ b/guix/build/perl-build-system.scm @@ -50,10 +50,6 @@ (define* (perl-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args) "Build the given Perl package, applying all of PHASES in order." - (set-path-environment-variable "PERL5LIB" '("lib/perl5/site_perl") - (match inputs - (((_ . path) ...) - path))) (apply gnu:gnu-build #:inputs inputs #:phases phases args)) diff --git a/guix/build/utils.scm b/guix/build/utils.scm index ef215e60bb..356dd46b52 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -51,7 +52,8 @@ patch-shebang patch-makefile-SHELL fold-port-matches - remove-store-references)) + remove-store-references + wrap-program)) ;;; @@ -652,6 +654,70 @@ known as `nuke-refs' in Nixpkgs." (put-u8 out (char->integer char)) result)))))) +(define* (wrap-program prog #:rest vars) + "Rename PROG to .PROG-real and make PROG a wrapper. VARS should look like +this: + + '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES) + +where DELIMITER is optional. ':' will be used if DELIMITER is not given. + +For example, this command: + + (wrap-program \"foo\" + '(\"PATH\" \":\" = (\"/nix/.../bar/bin\")) + '(\"CERT_PATH\" suffix (\"/nix/.../baz/certs\" + \"/qux/certs\"))) + +will copy 'foo' to '.foo-real' and create the file 'foo' with the following +contents: + + #!location/of/bin/bash + export PATH=\"/nix/.../bar/bin\" + export CERT_PATH=\"$CERT_PATH${CERT_PATH:+:}/nix/.../baz/certs:/qux/certs\" + exec location/of/.foo-real + +This is useful for scripts that expect particular programs to be in $PATH, for +programs that expect particular shared libraries to be in $LD_LIBRARY_PATH, or +modules in $GUILE_LOAD_PATH, etc." + (let ((prog-real (string-append "." prog "-real")) + (prog-tmp (string-append "." prog "-tmp"))) + (define (export-variable lst) + ;; Return a string that exports an environment variable. + (match lst + ((var sep '= rest) + (format #f "export ~a=\"~a\"" + var (string-join rest sep))) + ((var sep 'prefix rest) + (format #f "export ~a=\"~a${~a~a+~a}$~a\"" + var (string-join rest sep) var sep sep var)) + ((var sep 'suffix rest) + (format #f "export ~a=\"$~a${~a~a+~a}~a\"" + var var var sep sep (string-join rest sep))) + ((var '= rest) + (format #f "export ~a=\"~a\"" + var (string-join rest ":"))) + ((var 'prefix rest) + (format #f "export ~a=\"~a${~a:+:}$~a\"" + var (string-join rest ":") var var)) + ((var 'suffix rest) + (format #f "export ~a=\"$~a${~a:+:}~a\"" + var var var (string-join rest ":"))))) + + (copy-file prog prog-real) + + (with-output-to-file prog-tmp + (lambda () + (format #t + "#!~a~%~a~%exec ~a~%" + (which "bash") + (string-join (map export-variable vars) + "\n") + (canonicalize-path prog-real)))) + + (chmod prog-tmp #o755) + (rename-file prog-tmp prog))) + ;;; Local Variables: ;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1) ;;; eval: (put 'with-throw-handler 'scheme-indent-function 1) diff --git a/guix/derivations.scm b/guix/derivations.scm index 18a637ae5a..2243d2ba46 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -235,6 +235,32 @@ DRV and not already available in STORE, recursively." (hash-set! cache file drv) drv)))))) +(define-inlinable (write-sequence lst write-item port) + ;; Write each element of LST with WRITE-ITEM to PORT, separating them with a + ;; comma. + (match lst + (() + #t) + ((prefix (... ...) last) + (for-each (lambda (item) + (write-item item port) + (display "," port)) + prefix) + (write-item last port)))) + +(define-inlinable (write-list lst write-item port) + ;; Write LST as a derivation list to PORT, using WRITE-ITEM to write each + ;; element. + (display "[" port) + (write-sequence lst write-item port) + (display "]" port)) + +(define-inlinable (write-tuple lst write-item port) + ;; Same, but write LST as a tuple. + (display "(" port) + (write-sequence lst write-item port) + (display ")" port)) + (define (write-derivation drv port) "Write the ATerm-like serialization of DRV to PORT. See Section 2.4 of Eelco Dolstra's PhD dissertation for an overview of a previous version of @@ -243,11 +269,8 @@ that form." ;; Make sure we're using the faster implementation. (define format simple-format) - (define (list->string lst) - (string-append "[" (string-join lst ",") "]")) - - (define (write-list lst) - (display (list->string lst) port)) + (define (write-string-list lst) + (write-list lst write port)) (define (coalesce-duplicate-inputs inputs) ;; Return a list of inputs, such that when INPUTS contains the same DRV @@ -272,6 +295,34 @@ that form." '() inputs)) + (define (write-output output port) + (match output + ((name . ($ <derivation-output> path hash-algo hash)) + (write-tuple (list name path + (or (and=> hash-algo symbol->string) "") + (or (and=> hash bytevector->base16-string) + "")) + write + port)))) + + (define (write-input input port) + (match input + (($ <derivation-input> path sub-drvs) + (display "(" port) + (write path port) + (display "," port) + (write-string-list (sort sub-drvs string<?)) + (display ")" port)))) + + (define (write-env-var env-var port) + (match env-var + ((name . value) + (display "(" port) + (write name port) + (display "," port) + (write value port) + (display ")" port)))) + ;; Note: lists are sorted alphabetically, to conform with the behavior of ;; C++ `std::map' in Nix itself. @@ -279,37 +330,28 @@ that form." (($ <derivation> outputs inputs sources system builder args env-vars) (display "Derive(" port) - (write-list (map (match-lambda - ((name . ($ <derivation-output> path hash-algo hash)) - (format #f "(~s,~s,~s,~s)" - name path - (or (and=> hash-algo symbol->string) "") - (or (and=> hash bytevector->base16-string) - "")))) - (sort outputs - (lambda (o1 o2) - (string<? (car o1) (car o2)))))) + (write-list (sort outputs + (lambda (o1 o2) + (string<? (car o1) (car o2)))) + write-output + port) (display "," port) - (write-list (map (match-lambda - (($ <derivation-input> path sub-drvs) - (format #f "(~s,~a)" path - (list->string (map object->string - (sort sub-drvs string<?)))))) - (sort (coalesce-duplicate-inputs inputs) - (lambda (i1 i2) - (string<? (derivation-input-path i1) - (derivation-input-path i2)))))) + (write-list (sort (coalesce-duplicate-inputs inputs) + (lambda (i1 i2) + (string<? (derivation-input-path i1) + (derivation-input-path i2)))) + write-input + port) (display "," port) - (write-list (map object->string (sort sources string<?))) + (write-string-list (sort sources string<?)) (format port ",~s,~s," system builder) - (write-list (map object->string args)) + (write-string-list args) (display "," port) - (write-list (map (match-lambda - ((name . value) - (format #f "(~s,~s)" name value))) - (sort env-vars - (lambda (e1 e2) - (string<? (car e1) (car e2)))))) + (write-list (sort env-vars + (lambda (e1 e2) + (string<? (car e1) (car e2)))) + write-env-var + port) (display ")" port)))) (define derivation-path->output-path @@ -699,14 +741,21 @@ omitted or is #f, the value of the `%guile-for-build' fluid is used instead." (unsetenv "LD_LIBRARY_PATH"))) (builder (add-text-to-store store (string-append name "-guile-builder") - (string-append - (object->string prologue) - (object->string - `(exit - ,(match exp - ((_ ...) - (remove module-form? exp)) - (_ `(,exp)))))) + + ;; Explicitly use UTF-8 for determinism, + ;; and also because UTF-8 output is faster. + (with-fluids ((%default-port-encoding + "UTF-8")) + (call-with-output-string + (lambda (port) + (write prologue port) + (write + `(exit + ,(match exp + ((_ ...) + (remove module-form? exp)) + (_ `(,exp)))) + port)))) ;; The references don't really matter ;; since the builder is always used in diff --git a/guix/download.scm b/guix/download.scm index fa89058702..689920c3e0 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -43,7 +43,6 @@ "http://ftpmirror.gnu.org/" "ftp://ftp.cs.tu-berlin.de/pub/gnu/" - "ftp://ftp.chg.ru/pub/gnu/" "ftp://ftp.funet.fi/pub/mirrors/ftp.gnu.org/gnu/" ;; This one is the master repository, and thus it's always @@ -67,6 +66,11 @@ "ftp://trumpetti.atm.tut.fi/gcrypt/" "ftp://mirror.cict.fr/gnupg/" "ftp://ftp.strasbourg.linuxfr.org/pub/gnupg/") + (gnome + "http://ftp.belnet.be/ftp.gnome.org/" + "http://ftp.linux.org.uk/mirrors/ftp.gnome.org/" + "http://ftp.gnome.org/pub/GNOME/" + "http://mirror.yandex.ru/mirrors/ftp.gnome.org/") (savannah "http://download.savannah.gnu.org/releases/" "ftp://ftp.twaren.net/Unix/NonGNU/" diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index 6475c386d3..979678d076 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2010, 2011, 2012, 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +22,7 @@ #:use-module (web client) #:use-module (web response) #:use-module (ice-9 regex) + #:use-module (ice-9 rdelim) #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) @@ -29,7 +30,23 @@ #:use-module (system foreign) #:use-module (guix ftp-client) #:use-module (guix utils) - #:export (official-gnu-packages + #:use-module (guix packages) + #:export (gnu-package-name + gnu-package-mundane-name + gnu-package-copyright-holder + gnu-package-savannah + gnu-package-fsd + gnu-package-language + gnu-package-logo + gnu-package-doc-category + gnu-package-doc-summary + gnu-package-doc-urls + gnu-package-download-url + + official-gnu-packages + find-packages + gnu-package? + releases latest-release gnu-package-name->name+version)) @@ -47,16 +64,32 @@ ;;; (define (http-fetch uri) - "Return a string containing the textual data at URI, a string." + "Return an input port containing the textual data at URI, a string." (let*-values (((resp data) (http-get (string->uri uri))) ((code) (response-code resp))) (case code ((200) - data) + (cond ((string<=? (version) "2.0.5") + (begin + ;; XXX: Guile 2.0.5 and earlier did not support chunked transfer + ;; encoding, which is required when fetching %PACKAGE-LIST-URL + ;; (see <http://lists.gnu.org/archive/html/guile-devel/2011-09/msg00089.html>). + ;; Since users may still be using these versions, warn them and + ;; bail out. + (format (current-error-port) + "warning: using Guile ~a, ~a ~s encoding~%" + (version) + "which does not support HTTP" + (response-transfer-encoding resp)) + (error "download failed; use a newer Guile" + uri resp))) + ((string<=? (version) "2.0.7") + (open-input-string data)) + (else data))) (else - (error "download failed:" uri code + (error "download failed" uri code (response-reason-phrase resp)))))) (define %package-list-url @@ -64,16 +97,114 @@ "viewvc/*checkout*/gnumaint/" "gnupackages.txt?root=womb")) +(define-record-type* <gnu-package-descriptor> + gnu-package-descriptor + make-gnu-package-descriptor + + gnu-package-descriptor? + + (name gnu-package-name) + (mundane-name gnu-package-mundane-name) + (copyright-holder gnu-package-copyright-holder) + (savannah gnu-package-savannah) + (fsd gnu-package-fsd) + (language gnu-package-language) + (logo gnu-package-logo) + (doc-category gnu-package-doc-category) + (doc-summary gnu-package-doc-summary) + (doc-urls gnu-package-doc-urls) + (download-url gnu-package-download-url)) + (define (official-gnu-packages) - "Return a list of GNU packages." - (define %package-line-rx - (make-regexp "^package: (.+)$")) - - (let ((lst (string-split (http-fetch %package-list-url) #\nl))) - (filter-map (lambda (line) - (and=> (regexp-exec %package-line-rx line) - (cut match:substring <> 1))) - lst))) + "Return a list of records, which are GNU packages." + (define (group-package-fields port state) + ;; Return a list of alists. Each alist contains fields of a GNU + ;; package. + (let ((line (read-line port)) + (field-rx (make-regexp "^([[:graph:]]+): (.*)$")) + (doc-urls-rx (make-regexp "^doc-url: (.*)$")) + (end-rx (make-regexp "^# End. .+Do not remove this line.+"))) + + (define (match-field str) + ;; Packages are separated by empty strings. If STR is an + ;; empty string, create a new list to store fields of a + ;; different package. Otherwise, match and create a key-value + ;; pair. + (match str + ("" + (group-package-fields port (cons '() state))) + (str + (cond ((regexp-exec doc-urls-rx str) + => + (lambda (match) + (if (equal? (assoc-ref (first state) "doc-urls") #f) + (group-package-fields + port (cons (cons (cons "doc-urls" + (list + (match:substring match 1))) + (first state)) + (drop state 1))) + (group-package-fields + port (cons (cons (cons "doc-urls" + (cons (match:substring match 1) + (assoc-ref (first state) + "doc-urls"))) + (assoc-remove! (first state) + "doc-urls")) + (drop state 1)))))) + ((regexp-exec field-rx str) + => + (lambda (match) + (group-package-fields + port (cons (cons (cons (match:substring match 1) + (match:substring match 2)) + (first state)) + (drop state 1))))) + (else (group-package-fields port state)))))) + + (if (or (eof-object? line) + (regexp-exec end-rx line)) ; don't include dummy fields + (remove null-list? state) + (match-field line)))) + + (define (alist->record alist make keys) + ;; Apply MAKE, which should be a syntactic constructor, to the + ;; values associated with KEYS in ALIST. + (let ((args (map (cut assoc-ref alist <>) keys))) + (apply make args))) + + (reverse + (map (lambda (alist) + (alist->record alist + make-gnu-package-descriptor + (list "package" "mundane-name" "copyright-holder" + "savannah" "fsd" "language" "logo" + "doc-category" "doc-summary" "doc-urls" + "download-url"))) + (group-package-fields (http-fetch %package-list-url) + '(()))))) + +(define (find-packages regexp) + "Find GNU packages which satisfy REGEXP." + (let ((name-rx (make-regexp regexp))) + (filter (lambda (package) + (false-if-exception + (regexp-exec name-rx (gnu-package-name package)))) + (official-gnu-packages)))) + +(define gnu-package? + (memoize + (lambda (package) + "Return true if PACKAGE is a GNU package. This procedure may access the +network to check in GNU's database." + ;; TODO: Find a way to determine that a package is non-GNU without going + ;; through the network. + (let ((url (and=> (package-source package) origin-uri)) + (name (package-name package))) + (or (and (string? url) (string-prefix? "mirror://gnu" url)) + (and (member name (map gnu-package-name (official-gnu-packages))) + #t)))))) + ;;; ;;; Latest release. @@ -119,43 +250,45 @@ pairs. Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\"). (let ((end (string-contains tarball ".tar"))) (substring tarball 0 end))) + (define (release-file file) + ;; Return #f if FILE is not a release tarball, otherwise return + ;; PACKAGE-VERSION. + (and (not (string-suffix? ".sig" file)) + (regexp-exec release-rx file) + (not (regexp-exec alpha-rx file)) + (let ((s (sans-extension file))) + (and (regexp-exec %package-name-rx s) s)))) + (let-values (((server directory) (ftp-server/directory project))) (define conn (ftp-open server)) (let loop ((directories (list directory)) (result '())) - (if (null? directories) - (begin - (ftp-close conn) - result) - (let* ((directory (car directories)) - (files (ftp-list conn directory)) - (subdirs (filter-map (lambda (file) - (match file - ((name 'directory . _) name) - (_ #f))) - files))) - (loop (append (map (cut string-append directory "/" <>) - subdirs) - (cdr directories)) - (append - ;; Filter out signatures, deltas, and files which - ;; are potentially not releases of PROJECT--e.g., - ;; in /gnu/guile, filter out guile-oops and - ;; guile-www; in mit-scheme, filter out binaries. - (filter-map (lambda (file) - (match file - ((file 'file . _) - (and (not (string-suffix? ".sig" file)) - (regexp-exec release-rx file) - (not (regexp-exec alpha-rx file)) - (let ((s (sans-extension file))) - (and (regexp-exec - %package-name-rx s) - (cons s directory))))) - (_ #f))) - files) - result))))))) + (match directories + (() + (ftp-close conn) + result) + ((directory rest ...) + (let* ((files (ftp-list conn directory)) + (subdirs (filter-map (match-lambda + ((name 'directory . _) name) + (_ #f)) + files))) + (loop (append (map (cut string-append directory "/" <>) + subdirs) + rest) + (append + ;; Filter out signatures, deltas, and files which + ;; are potentially not releases of PROJECT--e.g., + ;; in /gnu/guile, filter out guile-oops and + ;; guile-www; in mit-scheme, filter out binaries. + (filter-map (match-lambda + ((file 'file . _) + (and=> (release-file file) + (cut cons <> directory))) + (_ #f)) + files) + result)))))))) (define (latest-release project) "Return (\"FOO-X.Y\" . \"/bar/foo\") or #f." diff --git a/guix/licenses.scm b/guix/licenses.scm index 4e4aee2036..9c4e17737a 100644 --- a/guix/licenses.scm +++ b/guix/licenses.scm @@ -39,7 +39,7 @@ psfl public-domain qpl vim - x11 + x11 x11-style zlib fsf-free)) @@ -236,6 +236,16 @@ which may be a file:// URI pointing the package's tree." "http://directory.fsf.org/wiki/License:X11" "https://www.gnu.org/licenses/license-list#X11License")) +(define* (x11-style uri #:optional (comment "")) + "Return an X11-style license, whose full text can be found at URI, +which may be a file:// URI pointing the package's tree." + (license "X11-style" + uri + (string-append + "This is an X11-style, non-copyleft free software license. " + "Check the URI for details. " + comment))) + (define zlib (license "Zlib" "http://www.gzip.org/zlib/zlib_license.html" diff --git a/guix/packages.scm b/guix/packages.scm index 51984baa3b..3a6a07bbcc 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -37,6 +37,11 @@ origin-file-name base32 + <search-path-specification> + search-path-specification + search-path-specification? + search-path-specification->sexp + package package? package-name @@ -49,6 +54,7 @@ package-native-inputs package-propagated-inputs package-outputs + package-native-search-paths package-search-paths package-synopsis package-description @@ -104,8 +110,22 @@ representation." ((_ str) #'(nix-base32-string->bytevector str))))) -;; A package. +;; The specification of a search path. +(define-record-type* <search-path-specification> + search-path-specification make-search-path-specification + search-path-specification? + (variable search-path-specification-variable) + (directories search-path-specification-directories) + (separator search-path-specification-separator (default ":"))) + +(define (search-path-specification->sexp spec) + "Return an sexp representing SPEC, a <search-path-specification>. The sexp +corresponds to the arguments expected by `set-path-environment-variable'." + (match spec + (($ <search-path-specification> variable directories separator) + `(,variable ,directories ,separator)))) +;; A package. (define-record-type* <package> package make-package package? @@ -128,14 +148,17 @@ representation." (outputs package-outputs ; list of strings (default '("out"))) - (search-paths package-search-paths ; list of (ENV-VAR (DIRS ...)) - (default '())) ; tuples; see - ; `set-path-environment-variable' - ; (aka. "setup-hook") + + ; lists of + ; <search-path-specification>, + ; for native and cross + ; inputs + (native-search-paths package-native-search-paths (default '())) + (search-paths package-search-paths (default '())) (synopsis package-synopsis) ; one-line description (description package-description) ; one or two paragraphs - (license package-license (default '())) + (license package-license) (home-page package-home-page) (platforms package-platforms (default '())) (maintainers package-maintainers (default '())) @@ -292,16 +315,22 @@ PACKAGE for SYSTEM." (($ <package> name version source (= build-system-builder builder) args inputs propagated-inputs native-inputs self-native-input? outputs) - ;; TODO: For `search-paths', add a builder prologue that calls - ;; `set-path-environment-variable'. - (let ((inputs (map expand-input - (package-transitive-inputs package)))) + (let* ((inputs (package-transitive-inputs package)) + (input-drvs (map expand-input inputs)) + (paths (delete-duplicates + (append-map (match-lambda + ((_ (? package? p) _ ...) + (package-native-search-paths + p)) + (_ '())) + inputs)))) (apply builder store (package-full-name package) (and source (package-source-derivation store source system)) - inputs + input-drvs + #:search-paths paths #:outputs outputs #:system system (args)))))))) diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm index 3dc227fdcd..3f989a3494 100644 --- a/guix/scripts/download.scm +++ b/guix/scripts/download.scm @@ -110,26 +110,27 @@ and the hash of its contents.\n")) (alist-cons 'argument arg result)) %default-options)) - (let* ((opts (parse-options)) - (store (open-connection)) - (arg (assq-ref opts 'argument)) - (uri (or (string->uri arg) - (leave (_ "guix-download: ~a: failed to parse URI~%") - arg))) - (path (case (uri-scheme uri) - ((file) - (add-to-store store (basename (uri-path uri)) - #f "sha256" (uri-path uri))) - (else - (fetch-and-store store - (cut url-fetch arg <> - #:mirrors %mirrors) - (basename (uri-path uri)))))) - (hash (call-with-input-file - (or path - (leave (_ "guix-download: ~a: download failed~%") - arg)) - (compose sha256 get-bytevector-all))) - (fmt (assq-ref opts 'format))) - (format #t "~a~%~a~%" path (fmt hash)) - #t)) + (with-error-handling + (let* ((opts (parse-options)) + (store (open-connection)) + (arg (assq-ref opts 'argument)) + (uri (or (string->uri arg) + (leave (_ "guix-download: ~a: failed to parse URI~%") + arg))) + (path (case (uri-scheme uri) + ((file) + (add-to-store store (basename (uri-path uri)) + #f "sha256" (uri-path uri))) + (else + (fetch-and-store store + (cut url-fetch arg <> + #:mirrors %mirrors) + (basename (uri-path uri)))))) + (hash (call-with-input-file + (or path + (leave (_ "guix-download: ~a: download failed~%") + arg)) + (compose sha256 get-bytevector-all))) + (fmt (assq-ref opts 'format))) + (format #t "~a~%~a~%" path (fmt hash)) + #t))) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index ccca614d88..6de2f1beb6 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -39,6 +39,7 @@ #:use-module (gnu packages) #:use-module ((gnu packages base) #:select (guile-final)) #:use-module ((gnu packages bootstrap) #:select (%bootstrap-guile)) + #:use-module (guix gnu-maintenance) #:export (guix-package)) (define %store @@ -266,6 +267,47 @@ matching packages." (assoc-ref (derivation-outputs drv) sub-drv)))) `(,name ,out)))))) +(define-syntax-rule (waiting exp fmt rest ...) + "Display the given message while EXP is being evaluated." + (let* ((message (format #f fmt rest ...)) + (blank (make-string (string-length message) #\space))) + (display message (current-error-port)) + (force-output (current-error-port)) + (let ((result exp)) + ;; Clear the line. + (display #\cr (current-error-port)) + (display blank (current-error-port)) + (display #\cr (current-error-port)) + (force-output (current-error-port)) + exp))) + +(define (check-package-freshness package) + "Check whether PACKAGE has a newer version available upstream, and report +it." + ;; TODO: Automatically inject the upstream version when desired. + + (catch #t + (lambda () + (when (false-if-exception (gnu-package? package)) + (let ((name (package-name package)) + (full-name (package-full-name package))) + (match (waiting (latest-release name) + (_ "looking for the latest release of GNU ~a...") name) + ((latest-version . _) + (when (version>? latest-version full-name) + (format (current-error-port) + (_ "~a: note: using ~a \ +but ~a is available upstream~%") + (location->string (package-location package)) + full-name latest-version))) + (_ #t))))) + (lambda (key . args) + ;; Silently ignore networking errors rather than preventing + ;; installation. + (case key + ((getaddrinfo-error ftp-error) #f) + (else (apply throw key args)))))) + ;;; ;;; Command-line options. @@ -510,6 +552,44 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) ,path ,(canonicalize-deps deps)))) + (define (show-what-to-remove/install remove install dry-run?) + ;; Tell the user what's going to happen in high-level terms. + ;; TODO: Report upgrades more clearly. + (match remove + (((name version _ path _) ..1) + (let ((len (length name)) + (remove (map (cut format #f " ~a-~a\t~a" <> <> <>) + name version path))) + (if dry-run? + (format (current-error-port) + (N_ "The following package would be removed:~% ~{~a~%~}~%" + "The following packages would be removed:~% ~{~a~%~}~%" + len) + remove) + (format (current-error-port) + (N_ "The following package will be removed:~% ~{~a~%~}~%" + "The following packages will be removed:~% ~{~a~%~}~%" + len) + remove)))) + (_ #f)) + (match install + (((name version _ path _) ..1) + (let ((len (length name)) + (install (map (cut format #f " ~a-~a\t~a" <> <> <>) + name version path))) + (if dry-run? + (format (current-error-port) + (N_ "The following package would be installed:~% ~{~a~%~}~%" + "The following packages would be installed:~% ~{~a~%~}~%" + len) + install) + (format (current-error-port) + (N_ "The following package will be installed:~% ~{~a~%~}~%" + "The following packages will be installed:~% ~{~a~%~}~%" + len) + install)))) + (_ #f))) + ;; First roll back if asked to. (if (and (assoc-ref opts 'roll-back?) (not dry-run?)) (begin @@ -547,6 +627,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) ((name version sub-drv (? package? package) (deps ...)) + (check-package-freshness package) (package-derivation (%store) package)) (_ #f)) install)) @@ -576,6 +657,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) package) (_ #f)) opts)) + (remove* (filter-map (cut assoc <> installed) remove)) (packages (append install* (fold (lambda (package result) (match package @@ -587,6 +669,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (when (equal? profile %current-profile) (ensure-default-profile)) + (show-what-to-remove/install remove* install* dry-run?) (show-what-to-build (%store) drv dry-run?) (or dry-run? @@ -669,8 +752,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (let ((opts (parse-options))) (or (process-query opts) - (parameterize ((%store (open-connection))) - (with-error-handling + (with-error-handling + (parameterize ((%store (open-connection))) (parameterize ((%guile-for-build (package-derivation (%store) (if (assoc-ref opts 'bootstrap?) diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 942bf501c5..bc72dc4088 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -194,9 +194,9 @@ Download and deploy the latest version of Guix.\n")) (leave (_ "~A: unexpected argument~%") arg)) %default-options)) - (let ((opts (parse-options)) - (store (open-connection))) - (with-error-handling + (with-error-handling + (let ((opts (parse-options)) + (store (open-connection))) (let ((tarball (download-and-store store))) (unless tarball (leave (_ "failed to download up-to-date source, exiting\n"))) diff --git a/guix/snix.scm b/guix/snix.scm index 3a470b9b8b..0c19fecb28 100644 --- a/guix/snix.scm +++ b/guix/snix.scm @@ -277,7 +277,7 @@ ATTRIBUTE is true, only that attribute is considered." %nix-instantiate "--strict" "--eval-only" "--xml" ;; Pass a dummy `crossSystem' argument so that `buildInputs' and - ;; `buildNativeInputs' are not coalesced. + ;; `nativeBuildInputs' are not coalesced. ;; XXX: This is hacky and has other problems. ;"--arg" "crossSystem" cross-system @@ -423,12 +423,15 @@ location of DERIVATION." (build-system gnu-build-system) ;; When doing a native Nixpkgs build, `buildInputs' is empty and - ;; everything is in `buildNativeInputs'. So we can't distinguish + ;; everything is in `nativeBuildInputs'. So we can't distinguish ;; between both, here. + ;; + ;; Note that `nativeBuildInputs' was renamed from + ;; `buildNativeInputs' in Nixpkgs sometime around March 2013. ,@(maybe-inputs 'inputs - (convert-inputs "buildNativeInputs")) + (convert-inputs "nativeBuildInputs")) ,@(maybe-inputs 'propagated-inputs - (convert-inputs "propagatedBuildNativeInputs")) + (convert-inputs "propagatedNativeBuildInputs")) (home-page ,(and=> (find-attribute-by-name "homepage" meta) attribute-value)) diff --git a/guix/store.scm b/guix/store.scm index 80b36daf93..4d078c5899 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -39,6 +39,9 @@ nix-server-socket &nix-error nix-error? + &nix-connection-error nix-connection-error? + nix-connection-error-file + nix-connection-error-code &nix-protocol-error nix-protocol-error? nix-protocol-error-message nix-protocol-error-status @@ -231,8 +234,19 @@ (define write-store-path-list write-string-list) (define read-store-path-list read-string-list) -(define (write-contents file p) - "Write the contents of FILE to output port P." +(define (write-contents file p size) + "Write SIZE bytes from FILE to output port P." + (define (call-with-binary-input-file file proc) + ;; Open FILE as a binary file. This avoids scan-for-encoding, and thus + ;; avoids any initial buffering. Disable file name canonicalization to + ;; avoid stat'ing like crazy. + (with-fluids ((%file-port-name-canonicalization #f)) + (let ((port (open-file file "rb"))) + (catch #t (cut proc port) + (lambda args + (close-port port) + (apply throw args)))))) + (define (dump in size) (define buf-size 65536) (define buf (make-bytevector buf-size)) @@ -247,13 +261,14 @@ (put-bytevector p buf 0 read) (loop (- left read)))))))) - (let ((size (stat:size (lstat file)))) - (write-string "contents" p) - (write-long-long size p) - (call-with-input-file file - (lambda (p) - (dump p size))) - (write-padding size p))) + (write-string "contents" p) + (write-long-long size p) + (call-with-binary-input-file file + ;; Use `sendfile' when available (Guile 2.0.8+). + (if (compile-time-value (defined? 'sendfile)) + (cut sendfile p <> size 0) + (cut dump <> size))) + (write-padding size p)) (define (write-file f p) (define %archive-version-1 "nix-archive-1") @@ -271,7 +286,7 @@ (begin (write-string "executable" p) (write-string "" p))) - (write-contents f p)) + (write-contents f p (stat:size s))) ((directory) (write-string "type" p) (write-string "directory" p) @@ -373,6 +388,11 @@ (define-condition-type &nix-error &error nix-error?) +(define-condition-type &nix-connection-error &nix-error + nix-connection-error? + (file nix-connection-error-file) + (errno nix-connection-error-code)) + (define-condition-type &nix-protocol-error &nix-error nix-protocol-error? (message nix-protocol-error-message) @@ -392,7 +412,15 @@ operate, should the disk become full. Return a server object." ;; Enlarge the receive buffer. (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024)) - (connect s a) + (catch 'system-error + (cut connect s a) + (lambda args + ;; Translate the error to something user-friendly. + (let ((errno (system-error-errno args))) + (raise (condition (&nix-connection-error + (file file) + (errno errno))))))) + (write-int %worker-magic-1 s) (let ((r (read-int s))) (and (eqv? r %worker-magic-2) diff --git a/guix/ui.scm b/guix/ui.scm index 03d881a428..94f0825a0a 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -111,6 +111,10 @@ General help using GNU software: <http://www.gnu.org/gethelp/>")) (leave (_ "~a:~a:~a: error: package `~a' has an invalid input: ~s~%") file line column (package-full-name package) input))) + ((nix-connection-error? c) + (leave (_ "error: failed to connect to `~a': ~a~%") + (nix-connection-error-file c) + (strerror (nix-connection-error-code c)))) ((nix-protocol-error? c) ;; FIXME: Server-provided error messages aren't i18n'd. (leave (_ "error: build failed: ~a~%") @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +21,21 @@ ;;; tool. ;;; +;; Attempt to use our very own Guix modules. +(eval-when (compile load eval) + + ;; Ignore any available .go, and force recompilation. This is because our + ;; checkout in the store has mtime set to the epoch, and thus .go files look + ;; newer, even though they may not correspond. + (set! %fresh-auto-compile #t) + + (and=> (assoc-ref (current-source-location) 'filename) + (lambda (file) + (let ((dir (dirname file))) + (format (current-error-port) "prepending ~s to the load path~%" + dir) + (set! %load-path (cons dir %load-path)))))) + (use-modules (guix store) (guix packages) ((guix utils) #:select (%current-system)) diff --git a/release.nix b/release.nix index 5aab8600ab..86560ea15a 100644 --- a/release.nix +++ b/release.nix @@ -42,12 +42,23 @@ let if builtins.isAttrs drv then pkgs.lib.overrideDerivation (pythonKludge drv) (args: { __noChroot = true; - buildNativeInputs = map unchroot args.buildNativeInputs; - propagatedBuildNativeInputs = - map unchroot args.propagatedBuildNativeInputs; + nativeBuildInputs = map unchroot args.nativeBuildInputs; + propagatedNativeBuildInputs = + map unchroot args.propagatedNativeBuildInputs; }) else drv; + # Return a Nixpkgs with some derivations "unchrooted". + unchrootedNixpkgs = system: + import nixpkgs { + # XXX: Hack to make sure these ones also get "unchrooted". + config.packageOverrides = pkgs: { + zlib = unchroot pkgs.zlib; + libunistring = unchroot pkgs.libunistring; + }; + inherit system; + }; + # The Guile used to bootstrap the whole thing. It's normally # downloaded by the build system, but here we download it via a # fixed-output derivation and stuff it into the build tree. @@ -67,7 +78,7 @@ let jobs = { tarball = unchroot - (let pkgs = import nixpkgs {}; in + (let pkgs = unchrootedNixpkgs builtins.currentSystem; in pkgs.releaseTools.sourceTarball { name = "guix-tarball"; src = <guix>; @@ -82,7 +93,7 @@ let in [ git_light ] ++ (with pkgs; [ guile sqlite bzip2 libgcrypt ]); - buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ]; + nativeBuildInputs = with pkgs; [ texinfo gettext cvs pkgconfig ]; preAutoconf = ''git config submodule.nix.url "${<nix>}"''; configureFlags = [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}" @@ -94,11 +105,11 @@ let { system ? builtins.currentSystem }: unchroot - (let pkgs = import nixpkgs { inherit system; }; in + (let pkgs = unchrootedNixpkgs system; in pkgs.releaseTools.nixBuild { name = "guix"; buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ]; - buildNativeInputs = [ pkgs.pkgconfig ]; + nativeBuildInputs = [ pkgs.pkgconfig ]; src = jobs.tarball; configureFlags = [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}" @@ -125,7 +136,7 @@ let unchroot (let - pkgs = import nixpkgs { inherit system; }; + pkgs = unchrootedNixpkgs system; build = jobs.build { inherit system; }; in pkgs.lib.overrideDerivation build ({ configureFlags, ... }: { @@ -144,7 +155,7 @@ let { system ? builtins.currentSystem }: let - pkgs = import nixpkgs { inherit system; }; + pkgs = unchrootedNixpkgs system; guix = jobs.build { inherit system; }; in # XXX: We have no way to tell the Nix code to swallow the .drv diff --git a/tests/packages.scm b/tests/packages.scm index f441532d22..2d16f8a03f 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -22,6 +22,7 @@ #:use-module (guix utils) #:use-module (guix derivations) #:use-module (guix packages) + #:use-module (guix build-system) #:use-module (guix build-system trivial) #:use-module (guix build-system gnu) #:use-module (gnu packages) @@ -49,7 +50,7 @@ (package (name name*) (version "0") (source #f) (build-system gnu-build-system) (synopsis #f) (description #f) - (home-page #f) + (home-page #f) (license #f) extra-fields ...)) (test-assert "package-transitive-inputs" @@ -138,6 +139,41 @@ (let ((p (pk 'drv d (derivation-path->output-path d)))) (eq? 'hello (call-with-input-file p read)))))) +(test-assert "search paths" + (let* ((p (make-prompt-tag "return-search-paths")) + (s (build-system + (name "raw") + (description "Raw build system with direct store access") + (build (lambda* (store name source inputs + #:key outputs system search-paths) + search-paths)))) + (x (list (search-path-specification + (variable "GUILE_LOAD_PATH") + (directories '("share/guile/site/2.0"))) + (search-path-specification + (variable "GUILE_LOAD_COMPILED_PATH") + (directories '("share/guile/site/2.0"))))) + (a (package (inherit (dummy-package "guile")) + (build-system s) + (native-search-paths x))) + (b (package (inherit (dummy-package "guile-foo")) + (build-system s) + (inputs `(("guile" ,a))))) + (c (package (inherit (dummy-package "guile-bar")) + (build-system s) + (inputs `(("guile" ,a) + ("guile-foo" ,b)))))) + (let-syntax ((collect (syntax-rules () + ((_ body ...) + (call-with-prompt p + (lambda () + body ...) + (lambda (k search-paths) + search-paths)))))) + (and (null? (collect (package-derivation %store a))) + (equal? x (collect (package-derivation %store b))) + (equal? x (collect (package-derivation %store c))))))) + (unless (false-if-exception (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)) (test-skip 1)) (test-assert "GNU Make, bootstrap" |