mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
build: Generate 'AUTHORS'.
* build-aux/generate-authors.scm: New file. * Makefile.am (gen-AUTHORS): New target. (dist-hook, .PHONY): Add it.
This commit is contained in:
parent
f2820e0763
commit
a8ac45b19e
2 changed files with 130 additions and 2 deletions
12
Makefile.am
12
Makefile.am
|
@ -1,6 +1,7 @@
|
||||||
# GNU Guix --- Functional package management for GNU
|
# GNU Guix --- Functional package management for GNU
|
||||||
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||||
|
# Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -363,7 +364,9 @@ guix-binary.%.tar.xz:
|
||||||
"$(top_srcdir)/build-aux/make-binary-tarball.scm" "$*" "$@"
|
"$(top_srcdir)/build-aux/make-binary-tarball.scm" "$*" "$@"
|
||||||
|
|
||||||
|
|
||||||
dist-hook: sync-descriptions gen-ChangeLog assert-no-store-file-names
|
dist-hook: sync-descriptions gen-ChangeLog gen-AUTHORS
|
||||||
|
dist-hook: assert-no-store-file-names
|
||||||
|
|
||||||
distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
|
distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
|
||||||
|
|
||||||
sync-descriptions:
|
sync-descriptions:
|
||||||
|
@ -378,6 +381,11 @@ gen-ChangeLog:
|
||||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
gen-AUTHORS:
|
||||||
|
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||||
|
"$(top_srcdir)/build-aux/generate-authors.scm" \
|
||||||
|
"$(top_srcdir)" "$(distdir)/AUTHORS"
|
||||||
|
|
||||||
# Make sure we're not shipping a file that embeds a local /gnu/store file name.
|
# Make sure we're not shipping a file that embeds a local /gnu/store file name.
|
||||||
assert-no-store-file-names:
|
assert-no-store-file-names:
|
||||||
if grep -r --exclude=*.texi --exclude=*.info \
|
if grep -r --exclude=*.texi --exclude=*.info \
|
||||||
|
@ -397,6 +405,6 @@ assert-final-inputs-self-contained:
|
||||||
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||||
"$(top_srcdir)/build-aux/check-final-inputs-self-contained.scm"
|
"$(top_srcdir)/build-aux/check-final-inputs-self-contained.scm"
|
||||||
|
|
||||||
.PHONY: sync-descriptions gen-ChangeLog clean-go
|
.PHONY: sync-descriptions gen-ChangeLog gen-AUTHORS clean-go
|
||||||
.PHONY: assert-no-store-file-names assert-binaries-available
|
.PHONY: assert-no-store-file-names assert-binaries-available
|
||||||
.PHONY: assert-final-inputs-self-contained
|
.PHONY: assert-final-inputs-self-contained
|
||||||
|
|
120
build-aux/generate-authors.scm
Normal file
120
build-aux/generate-authors.scm
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
|
;;; Copyright © 2015 Alex Kost <alezost@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/>.
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Generate AUTHORS file for directory with the Guix git repository.
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(use-modules
|
||||||
|
(ice-9 popen)
|
||||||
|
(ice-9 rdelim)
|
||||||
|
(ice-9 match)
|
||||||
|
(srfi srfi-1)
|
||||||
|
(guix config)
|
||||||
|
(guix utils)
|
||||||
|
(guix build utils))
|
||||||
|
|
||||||
|
(define %guix-dir
|
||||||
|
(make-parameter #f))
|
||||||
|
|
||||||
|
(define-syntax-rule (append-maybe init-lst (test add-lst) ...)
|
||||||
|
(let* ((lst init-lst)
|
||||||
|
(lst (if test
|
||||||
|
(append lst add-lst)
|
||||||
|
lst))
|
||||||
|
...)
|
||||||
|
lst))
|
||||||
|
|
||||||
|
(define (command-output cmd . args)
|
||||||
|
"Execute CMD with ARGS and return its output without trailing newspace."
|
||||||
|
(let* ((port (apply open-pipe* OPEN_READ cmd args))
|
||||||
|
(output (read-string port)))
|
||||||
|
(close-port port)
|
||||||
|
(string-trim-right output #\newline)))
|
||||||
|
|
||||||
|
(define (git-output . args)
|
||||||
|
"Execute git command with ARGS and return its output without trailing
|
||||||
|
newspace."
|
||||||
|
(with-directory-excursion (%guix-dir)
|
||||||
|
(apply command-output "git" args)))
|
||||||
|
|
||||||
|
(define* (contributors-string #:optional (range "HEAD"))
|
||||||
|
"Return a string with names of people contributed to commit RANGE."
|
||||||
|
(git-output "shortlog" "--numbered" "--summary" "--email" range))
|
||||||
|
|
||||||
|
(define* (tags #:key pattern sort)
|
||||||
|
"Return a list of the git repository tags.
|
||||||
|
PATTERN is passed to '--list' and SORT is passed to '--sort' options of
|
||||||
|
'git tag' command."
|
||||||
|
(let* ((args (append-maybe
|
||||||
|
'("tag")
|
||||||
|
(pattern (list "--list" pattern))
|
||||||
|
(sort (list "--sort" sort))))
|
||||||
|
(output (apply git-output args)))
|
||||||
|
(string-split output #\newline)))
|
||||||
|
|
||||||
|
(define (version-tags)
|
||||||
|
"Return only version tags (v0.8, etc.) sorted from the biggest version
|
||||||
|
to the smallest one."
|
||||||
|
(tags #:pattern "v*"
|
||||||
|
#:sort "-version:refname"))
|
||||||
|
|
||||||
|
(define (generate-authors-file file)
|
||||||
|
"Generate authors FILE."
|
||||||
|
(define previous-release-tag
|
||||||
|
(find (lambda (tag)
|
||||||
|
(version>? %guix-version
|
||||||
|
(substring tag 1))) ; remove leading 'v'
|
||||||
|
(version-tags)))
|
||||||
|
|
||||||
|
(define release-range
|
||||||
|
(string-append previous-release-tag "..HEAD"))
|
||||||
|
|
||||||
|
(with-output-to-file file
|
||||||
|
(lambda ()
|
||||||
|
(display "\
|
||||||
|
GNU Guix consists of Scheme code that implements the deployment model
|
||||||
|
of the Nix package management tool. In fact, it currently talks to a
|
||||||
|
build daemon whose code comes from Nix (see the manual for details.)
|
||||||
|
|
||||||
|
Nix was initially written by Eelco Dolstra; other people have been
|
||||||
|
contributing to it. See `nix/AUTHORS' for details.\n\n")
|
||||||
|
(format #t "Contributors to GNU Guix ~a:\n\n"
|
||||||
|
%guix-version)
|
||||||
|
(display (contributors-string release-range))
|
||||||
|
(newline) (newline)
|
||||||
|
(display "Overall contributors:\n\n")
|
||||||
|
(display (contributors-string))
|
||||||
|
(newline))))
|
||||||
|
|
||||||
|
(define (show-help)
|
||||||
|
(match (command-line)
|
||||||
|
((me _ ...)
|
||||||
|
(format #t "Usage: guile ~a DIRECTORY AUTHORS
|
||||||
|
Generate AUTHORS file for DIRECTORY with the Guix git repository.\n"
|
||||||
|
me))))
|
||||||
|
|
||||||
|
(match (command-line)
|
||||||
|
((_ guix-dir authors-file)
|
||||||
|
(parameterize ((%guix-dir guix-dir))
|
||||||
|
(generate-authors-file authors-file)))
|
||||||
|
(_
|
||||||
|
(show-help)
|
||||||
|
(exit 1)))
|
||||||
|
|
||||||
|
;;; generate-authors.scm ends here
|
Loading…
Reference in a new issue