From fe12c3458c1b1df56227800f27db777936a90971 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 24 Aug 2013 17:17:06 +0200 Subject: build-system/gnu: Add `dist-package'. * guix/build/gnu-dist.scm: New file. * Makefile.am (MODULES): Add it. * guix/build-system/gnu.scm (%default-modules): New variable. (gnu-build): Use it. (dist-package): New procedure. --- guix/build/gnu-dist.scm | 95 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 guix/build/gnu-dist.scm (limited to 'guix/build') diff --git a/guix/build/gnu-dist.scm b/guix/build/gnu-dist.scm new file mode 100644 index 0000000000..562056b5f6 --- /dev/null +++ b/guix/build/gnu-dist.scm @@ -0,0 +1,95 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès +;;; +;;; 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 . + +(define-module (guix build gnu-dist) + #:use-module (guix build utils) + #:use-module (guix build gnu-build-system) + #:use-module (srfi srfi-1) + #:export (%dist-phases)) + +;;; Commentary: +;;; +;;; Build phases to build a source tarball with the GNU build system, as with +;;; "make distcheck". +;;; +;;; Code: + +(define* (copy-source #:key source #:allow-other-keys) + (copy-recursively source ".")) + +(define* (autoreconf #:rest args) + (letrec-syntax ((try-files (syntax-rules (else) + ((_ (else fallback ...)) + (begin fallback ...)) + ((_ file files ... (else fallback ...)) + (if (file-exists? file) + (begin + (format #t "bootstrapping with `~a'...~%" + file) + (zero? + (system* (string-append "./" file)))) + (try-files files ... + (else fallback ...))))))) + (try-files "bootstrap" "bootstrap.sh" "autogen" "autogen.sh" + (else + (format #t "bootstrapping with `autoreconf'...~%") + (zero? (system* "autoreconf" "-vfi")))))) + +(define* (build #:key build-before-dist? make-flags (dist-target "distcheck") + #:allow-other-keys + #:rest args) + (and (or (not build-before-dist?) + (let ((build (assq-ref %standard-phases 'build))) + (apply build args))) + (begin + (format #t "building target `~a'~%" dist-target) + (zero? (apply system* "make" dist-target make-flags))))) + +(define* (install-dist #:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (meta (string-append out "/nix-support")) ; Hydra meta-data + (tarballs (find-files "." "\\.tar\\."))) + (mkdir out) + (for-each (lambda (tarball) + (copy-file tarball (string-append out "/" tarball))) + out) + + (mkdir meta) + (call-with-output-file (string-append out "/hydra-build-products") + (lambda (port) + (for-each (lambda (tarball) + ;; This tells Hydra's what kind of build products we have, + ;; so it can represent them nicely. See `product-list.tt' + ;; in Hydra for details. + (format port "file source-dist ~a/~a~%" out tarball)) + tarballs))) + #t)) + +(define %dist-phases + ;; Phases for building a source tarball. + (alist-replace + 'unpack copy-source + (alist-cons-before + 'configure 'autoreconf autoreconf + (alist-replace + 'build build + (alist-replace + 'install install-dist + (alist-delete 'strip %standard-phases)))))) + +;;; gnu-dist.scm ends here -- cgit v1.2.3