diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000000..f04fdc6fc7 --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,16 @@ +;; Per-directory local variables for GNU Emacs 23 and later. + +((nil . ((fill-column . 72) + (tab-width . 8))) + (c-mode . ((c-file-style . "gnu"))) + (scheme-mode + . + ((indent-tabs-mode . nil) + (eval . (put 'lambda* 'scheme-indent-function 1)) + (eval . (put 'substitute* 'scheme-indent-function 1)) + (eval . (put 'with-directory-excursion 'scheme-indent-function 1)) + (eval . (put 'package 'scheme-indent-function 1)) + (eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1)))) + (emacs-lisp-mode . ((indent-tabs-mode . nil))) + (texinfo-mode . ((indent-tabs-mode . nil) + (fill-column . 72)))) diff --git a/Makefile.am b/Makefile.am index 88f3d87796..1c27516a4d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,7 +36,10 @@ MODULES = \ guix.scm \ distro.scm \ distro/packages/base.scm \ - distro/packages/ld-wrapper.scm + distro/packages/databases.scm \ + distro/packages/guile.scm \ + distro/packages/ld-wrapper.scm \ + distro/packages/typesetting.scm GOBJECTS = $(MODULES:%.scm=%.go) @@ -78,6 +81,7 @@ LOG_COMPILER = \ $(GUILE) --no-auto-compile -L "$(top_srcdir)" EXTRA_DIST = \ + .dir-locals.el \ srfi/srfi-64.scm \ srfi/srfi-64.upstream.scm \ tests/test.drv \ diff --git a/distro.scm b/distro.scm index 79e09a3cc6..fc48285bbf 100644 --- a/distro.scm +++ b/distro.scm @@ -53,7 +53,7 @@ (define (package-files) "Return the list of files that implement distro modules." (define prefix-len - (string-length (dirname %distro-module-directory))) + (string-length (dirname (search-path %load-path "distro.scm")))) (file-system-fold (const #t) ; enter? (lambda (path stat result) ; leaf diff --git a/distro/packages/base.scm b/distro/packages/base.scm index 67b8b1c602..cbe53999e5 100644 --- a/distro/packages/base.scm +++ b/distro/packages/base.scm @@ -30,7 +30,7 @@ ;;; Commentary: ;;; -;;; A Guix-based distribution. +;;; Base packages of the Guix-based GNU user-land software distribution. ;;; ;;; Code: @@ -1049,34 +1049,6 @@ internal in-memory representation.") (home-page "http://www.gnu.org/software/libunistring/") (license "LGPLv3+"))) -(define-public recutils - (package - (name "recutils") - (version "1.5") - (source (origin - (method http-fetch) - (uri (string-append "http://ftp.gnu.org/gnu/recutils/recutils-" - version ".tar.gz")) - (sha256 - (base32 - "1v2xzwwwhc5j5kmvg4sv6baxjpsfqh8ln7ilv4mgb1408rs7xmky")))) - (build-system gnu-build-system) - (inputs `(("curl" ,(nixpkgs-derivation* "curl")) - ("emacs" ,(nixpkgs-derivation* "emacs")) - ("check" ,(nixpkgs-derivation* "check")) - ("bc" ,(nixpkgs-derivation* "bc")) - ("patch/gets" - ,(search-patch "diffutils-gets-undeclared.patch")))) - (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets")))) - (description "GNU recutils, tools and libraries to access human-editable, -text-based databases") - (long-description - "GNU recutils is a set of tools and libraries to access human-editable, -text-based databases called recfiles. The data is stored as a sequence of -records, each record containing an arbitrary number of named fields.") - (license "GPLv3+") - (home-page "http://www.gnu.org/software/recutils/"))) - (define-public guile-1.8 (package (name "guile") @@ -1763,164 +1735,4 @@ store.") ("gcc" ,gcc-final) ("libc" ,glibc-final)))) - -;;; -;;; Apps & libs --- TODO: move to separate module. -;;; - -(define (guile-reader guile) - "Build Guile-Reader against GUILE, a package of some version of Guile 1.8 -or 2.0." - (package - (name (string-append "guile-reader-for-guile-" (package-version guile))) - (version "0.6") - (source (origin - (method http-fetch) - (uri (string-append - "http://download-mirror.savannah.gnu.org/releases/guile-reader/guile-reader-" - version ".tar.gz")) - (sha256 - (base32 - "1svlyk5pm4fsdp2g7n6qffdl6fdggxnlicj0jn9s4lxd63gzxy1n")))) - (build-system gnu-build-system) - (native-inputs `(("pkgconfig" ,(nixpkgs-derivation* "pkgconfig")) - ("gperf" ,(nixpkgs-derivation* "gperf")))) - (inputs `(("guile" ,guile))) - (description "Guile-Reader, a simple framework for building readers for -GNU Guile") - (long-description -"Guile-Reader is a simple framework for building readers for GNU Guile. - -The idea is to make it easy to build procedures that extend Guile’s read -procedure. Readers supporting various syntax variants can easily be written, -possibly by re-using existing “token readers” of a standard Scheme -readers. For example, it is used to implement Skribilo’s R5RS-derived -document syntax. - -Guile-Reader’s approach is similar to Common Lisp’s “read table”, but -hopefully more powerful and flexible (for instance, one may instantiate as -many readers as needed).") - (home-page "http://www.nongnu.org/guile-reader/") - (license "GPLv3+"))) - -(define-public guile-reader/guile-1.8 - ;; Guile-Reader built against Guile 1.8. - (guile-reader guile-1.8)) - -(define-public guile-reader/guile-2.0 - ;; Guile-Reader built against Guile 2.0. - (guile-reader guile-2.0)) - -(define-public lout - ;; This one is a bit tricky, because it doesn't follow the GNU Build System - ;; rules. Instead, it has a makefile that has to be patched to set the - ;; prefix, etc., and it has no makefile rules to build its doc. - (let ((configure-phase - '(lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (doc (assoc-ref outputs "doc"))) - (substitute* "makefile" - (("^PREFIX[[:blank:]]*=.*$") - (string-append "PREFIX = " out "\n")) - (("^LOUTLIBDIR[[:blank:]]*=.*$") - (string-append "LOUTLIBDIR = " out "/lib/lout\n")) - (("^LOUTDOCDIR[[:blank:]]*=.*$") - (string-append "LOUTDOCDIR = " doc "/doc/lout\n")) - (("^MANDIR[[:blank:]]*=.*$") - (string-append "MANDIR = " out "/man\n"))) - (mkdir out) - (mkdir (string-append out "/bin")) ; TODO: use `mkdir-p' - (mkdir (string-append out "/lib")) - (mkdir (string-append out "/man")) - (mkdir doc) - (mkdir (string-append doc "/doc")) - (mkdir (string-append doc "/doc/lout"))))) - (install-man-phase - '(lambda* (#:key outputs #:allow-other-keys) - (zero? (system* "make" "installman")))) - (doc-phase - '(lambda* (#:key outputs #:allow-other-keys) - (define out - (assoc-ref outputs "doc")) - - (setenv "PATH" - (string-append (assoc-ref outputs "out") - "/bin:" (getenv "PATH"))) - (chdir "doc") - (every (lambda (doc) - (format #t "doc: building `~a'...~%" doc) - (with-directory-excursion doc - (let ((file (string-append out "/doc/lout/" - doc ".ps"))) - (and (or (file-exists? "outfile.ps") - (zero? (system* "lout" "-r4" "-o" - "outfile.ps" "all"))) - (begin - (copy-file "outfile.ps" file) - #t) - (zero? (system* "ps2pdf" - "-dPDFSETTINGS=/prepress" - "-sPAPERSIZE=a4" - file - (string-append out "/doc/lout/" - doc ".pdf"))))))) - '("design" "expert" "slides" "user"))))) - (package - (name "lout") - (version "3.39") - (source (origin - (method http-fetch) - ;; FIXME: `http-get' doesn't follow redirects, hence the URL. - (uri (string-append - "http://download-mirror.savannah.gnu.org/releases/lout/lout-" - version ".tar.gz")) - (sha256 - (base32 - "12gkyqrn0kaa8xq7sc7v3wm407pz2fxg9ngc75aybhi5z825b9vq")))) - (build-system gnu-build-system) ; actually, just a makefile - (outputs '("out" "doc")) - (inputs `(("ghostscript" ,(nixpkgs-derivation* "ghostscript")))) - (arguments `(#:modules ((guix build utils) - (guix build gnu-build-system) - (srfi srfi-1)) ; we need SRFI-1 - #:tests? #f ; no "check" target - - ;; Customize the build phases. - #:phases (alist-replace - 'configure ,configure-phase - - (alist-cons-after - 'install 'install-man-pages - ,install-man-phase - - (alist-cons-after - 'install 'install-doc - ,doc-phase - %standard-phases))))) - (description "Lout, a document layout system similar in style to LaTeX") - (long-description -"The Lout document formatting system is now reads a high-level description of -a document similar in style to LaTeX and produces a PostScript or plain text -output file. - -Lout offers an unprecedented range of advanced features, including optimal -paragraph and page breaking, automatic hyphenation, PostScript EPS file -inclusion and generation, equation formatting, tables, diagrams, rotation and -scaling, sorted indexes, bibliographic databases, running headers and -odd-even pages, automatic cross referencing, multilingual documents including -hyphenation (most European languages are supported), formatting of computer -programs, and much more, all ready to use. Furthermore, Lout is easily -extended with definitions which are very much easier to write than troff of -TeX macros because Lout is a high-level, purely functional language, the -outcome of an eight-year research project that went back to the -beginning.") - (license "GPLv3+") - (home-page "http://savannah.nongnu.org/projects/lout/")))) - -;;; Local Variables: -;;; eval: (put 'lambda* 'scheme-indent-function 1) -;;; eval: (put 'substitute* 'scheme-indent-function 1) -;;; eval: (put 'with-directory-excursion 'scheme-indent-function 1) -;;; eval: (put 'package 'scheme-indent-function 1) -;;; eval: (put 'substitute-keyword-arguments 'scheme-indent-function 1) -;;; End: +;;; base.scm ends here diff --git a/distro/packages/databases.scm b/distro/packages/databases.scm new file mode 100644 index 0000000000..5c42ef142b --- /dev/null +++ b/distro/packages/databases.scm @@ -0,0 +1,60 @@ +;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +;;; Copyright (C) 2012 Ludovic Courtès +;;; +;;; This file is part of Guix. +;;; +;;; 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. +;;; +;;; 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 Guix. If not, see . + +(define-module (distro packages databases) + #:use-module (distro) + #:use-module (guix packages) + #:use-module (guix http) + #:use-module (guix utils) + #:use-module (guix build-system gnu)) + +;;; Commentary: +;;; +;;; Database management software and related packages. +;;; +;;; Code: + +(define-public recutils + (package + (name "recutils") + (version "1.5") + (source (origin + (method http-fetch) + (uri (string-append "http://ftp.gnu.org/gnu/recutils/recutils-" + version ".tar.gz")) + (sha256 + (base32 + "1v2xzwwwhc5j5kmvg4sv6baxjpsfqh8ln7ilv4mgb1408rs7xmky")))) + (build-system gnu-build-system) + (inputs `(("curl" ,(nixpkgs-derivation* "curl")) + ("emacs" ,(nixpkgs-derivation* "emacs")) + ("check" ,(nixpkgs-derivation* "check")) + ("bc" ,(nixpkgs-derivation* "bc")) + ("patch/gets" + ,(search-patch "diffutils-gets-undeclared.patch")))) + (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets")))) + (description "GNU recutils, tools and libraries to access human-editable, +text-based databases") + (long-description + "GNU recutils is a set of tools and libraries to access human-editable, +text-based databases called recfiles. The data is stored as a sequence of +records, each record containing an arbitrary number of named fields.") + (license "GPLv3+") + (home-page "http://www.gnu.org/software/recutils/"))) + +;;; databases.scm ends here diff --git a/distro/packages/guile.scm b/distro/packages/guile.scm new file mode 100644 index 0000000000..c72bd3b41d --- /dev/null +++ b/distro/packages/guile.scm @@ -0,0 +1,75 @@ +;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +;;; Copyright (C) 2012 Ludovic Courtès +;;; +;;; This file is part of Guix. +;;; +;;; 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. +;;; +;;; 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 Guix. If not, see . + +(define-module (distro packages guile) + #:use-module (distro packages base) + #:use-module (guix packages) + #:use-module (guix http) + #:use-module (guix utils) + #:use-module (guix build-system gnu)) + +;;; Commentary: +;;; +;;; Modules and extensions for GNU Guile. +;;; +;;; Code: + +(define (guile-reader guile) + "Build Guile-Reader against GUILE, a package of some version of Guile 1.8 +or 2.0." + (package + (name (string-append "guile-reader-for-guile-" (package-version guile))) + (version "0.6") + (source (origin + (method http-fetch) + (uri (string-append + "http://download-mirror.savannah.gnu.org/releases/guile-reader/guile-reader-" + version ".tar.gz")) + (sha256 + (base32 + "1svlyk5pm4fsdp2g7n6qffdl6fdggxnlicj0jn9s4lxd63gzxy1n")))) + (build-system gnu-build-system) + (native-inputs `(("pkgconfig" ,(nixpkgs-derivation* "pkgconfig")) + ("gperf" ,(nixpkgs-derivation* "gperf")))) + (inputs `(("guile" ,guile))) + (description "Guile-Reader, a simple framework for building readers for +GNU Guile") + (long-description +"Guile-Reader is a simple framework for building readers for GNU Guile. + +The idea is to make it easy to build procedures that extend Guile’s read +procedure. Readers supporting various syntax variants can easily be written, +possibly by re-using existing “token readers” of a standard Scheme +readers. For example, it is used to implement Skribilo’s R5RS-derived +document syntax. + +Guile-Reader’s approach is similar to Common Lisp’s “read table”, but +hopefully more powerful and flexible (for instance, one may instantiate as +many readers as needed).") + (home-page "http://www.nongnu.org/guile-reader/") + (license "GPLv3+"))) + +(define-public guile-reader/guile-1.8 + ;; Guile-Reader built against Guile 1.8. + (guile-reader guile-1.8)) + +(define-public guile-reader/guile-2.0 + ;; Guile-Reader built against Guile 2.0. + (guile-reader guile-2.0)) + +;;; guile.scm ends here diff --git a/distro/packages/typesetting.scm b/distro/packages/typesetting.scm new file mode 100644 index 0000000000..cd0eae1187 --- /dev/null +++ b/distro/packages/typesetting.scm @@ -0,0 +1,137 @@ +;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +;;; Copyright (C) 2012 Ludovic Courtès +;;; +;;; This file is part of Guix. +;;; +;;; 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. +;;; +;;; 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 Guix. If not, see . + +(define-module (distro packages typesetting) + #:use-module (guix packages) + #:use-module (guix http) + #:use-module (guix utils) + #:use-module (guix build-system gnu)) + +;;; Commentary: +;;; +;;; Typesetting-related packages. +;;; +;;; Code: + +(define-public lout + ;; This one is a bit tricky, because it doesn't follow the GNU Build System + ;; rules. Instead, it has a makefile that has to be patched to set the + ;; prefix, etc., and it has no makefile rules to build its doc. + (let ((configure-phase + '(lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (substitute* "makefile" + (("^PREFIX[[:blank:]]*=.*$") + (string-append "PREFIX = " out "\n")) + (("^LOUTLIBDIR[[:blank:]]*=.*$") + (string-append "LOUTLIBDIR = " out "/lib/lout\n")) + (("^LOUTDOCDIR[[:blank:]]*=.*$") + (string-append "LOUTDOCDIR = " doc "/doc/lout\n")) + (("^MANDIR[[:blank:]]*=.*$") + (string-append "MANDIR = " out "/man\n"))) + (mkdir out) + (mkdir (string-append out "/bin")) ; TODO: use `mkdir-p' + (mkdir (string-append out "/lib")) + (mkdir (string-append out "/man")) + (mkdir doc) + (mkdir (string-append doc "/doc")) + (mkdir (string-append doc "/doc/lout"))))) + (install-man-phase + '(lambda* (#:key outputs #:allow-other-keys) + (zero? (system* "make" "installman")))) + (doc-phase + '(lambda* (#:key outputs #:allow-other-keys) + (define out + (assoc-ref outputs "doc")) + + (setenv "PATH" + (string-append (assoc-ref outputs "out") + "/bin:" (getenv "PATH"))) + (chdir "doc") + (every (lambda (doc) + (format #t "doc: building `~a'...~%" doc) + (with-directory-excursion doc + (let ((file (string-append out "/doc/lout/" + doc ".ps"))) + (and (or (file-exists? "outfile.ps") + (zero? (system* "lout" "-r4" "-o" + "outfile.ps" "all"))) + (begin + (copy-file "outfile.ps" file) + #t) + (zero? (system* "ps2pdf" + "-dPDFSETTINGS=/prepress" + "-sPAPERSIZE=a4" + file + (string-append out "/doc/lout/" + doc ".pdf"))))))) + '("design" "expert" "slides" "user"))))) + (package + (name "lout") + (version "3.39") + (source (origin + (method http-fetch) + ;; FIXME: `http-get' doesn't follow redirects, hence the URL. + (uri (string-append + "http://download-mirror.savannah.gnu.org/releases/lout/lout-" + version ".tar.gz")) + (sha256 + (base32 + "12gkyqrn0kaa8xq7sc7v3wm407pz2fxg9ngc75aybhi5z825b9vq")))) + (build-system gnu-build-system) ; actually, just a makefile + (outputs '("out" "doc")) + (inputs `(("ghostscript" ,(nixpkgs-derivation* "ghostscript")))) + (arguments `(#:modules ((guix build utils) + (guix build gnu-build-system) + (srfi srfi-1)) ; we need SRFI-1 + #:tests? #f ; no "check" target + + ;; Customize the build phases. + #:phases (alist-replace + 'configure ,configure-phase + + (alist-cons-after + 'install 'install-man-pages + ,install-man-phase + + (alist-cons-after + 'install 'install-doc + ,doc-phase + %standard-phases))))) + (description "Lout, a document layout system similar in style to LaTeX") + (long-description +"The Lout document formatting system is now reads a high-level description of +a document similar in style to LaTeX and produces a PostScript or plain text +output file. + +Lout offers an unprecedented range of advanced features, including optimal +paragraph and page breaking, automatic hyphenation, PostScript EPS file +inclusion and generation, equation formatting, tables, diagrams, rotation and +scaling, sorted indexes, bibliographic databases, running headers and +odd-even pages, automatic cross referencing, multilingual documents including +hyphenation (most European languages are supported), formatting of computer +programs, and much more, all ready to use. Furthermore, Lout is easily +extended with definitions which are very much easier to write than troff of +TeX macros because Lout is a high-level, purely functional language, the +outcome of an eight-year research project that went back to the +beginning.") + (license "GPLv3+") + (home-page "http://savannah.nongnu.org/projects/lout/")))) + +;;; typesetting.scm ends here