* build-aux/xgettext.scm: Move setting of environment variables to shell header. (main): Use SOURCE_DATE_EPOCH as fallback for timestamp. This fixes running from a tarball. * Makefile.am (EXTRA_DIST): Add it. Change-Id: Ic487587b22495868fd2a21545a13dc9e3458299c
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Scheme
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Scheme
		
	
	
		
			Executable file
		
	
	
	
	
#! /bin/sh
 | 
						||
# -*-scheme-*-
 | 
						||
build_aux=$(dirname $0)
 | 
						||
srcdir=$build_aux/..
 | 
						||
export LC_ALL=en_US.UTF-8
 | 
						||
export TZ=UTC0
 | 
						||
exec guile --no-auto-compile -L $srcdir -C $srcdir -e main -s "$0" "$@"
 | 
						||
!#
 | 
						||
 | 
						||
;;; GNU Guix --- Functional package management for GNU
 | 
						||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 | 
						||
;;;
 | 
						||
;;; This file is part of GNU Guix.
 | 
						||
;;;
 | 
						||
;;; This program 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.
 | 
						||
;;;
 | 
						||
;;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						||
 | 
						||
;;;; Commentary:
 | 
						||
;;;
 | 
						||
;;; This script provides an xgettext wrapper to (re)set POT-Creation-Date from
 | 
						||
;;; a Git timestamp.  Test doing something like:
 | 
						||
;;;
 | 
						||
;;; build-aux/xgettext.scm --files-from=po/guix/POTFILES.in --default-domain=test
 | 
						||
;;;
 | 
						||
;;;; Code:
 | 
						||
 | 
						||
(use-modules (srfi srfi-1)
 | 
						||
             (srfi srfi-26)
 | 
						||
             (ice-9 curried-definitions)
 | 
						||
             (ice-9 match)
 | 
						||
             (ice-9 popen)
 | 
						||
             (ice-9 rdelim)
 | 
						||
             (guix build utils))
 | 
						||
 | 
						||
(define ((option? name) option)
 | 
						||
  (string-prefix? name option))
 | 
						||
 | 
						||
(define (get-option args name)
 | 
						||
  (let ((option (find (option? name) args)))
 | 
						||
    (and option
 | 
						||
         (substring option (string-length name)))))
 | 
						||
 | 
						||
(define (pipe-command command)
 | 
						||
  (let* ((port (apply open-pipe* OPEN_READ command))
 | 
						||
         (output (read-string port)))
 | 
						||
    (close-port port)
 | 
						||
    output))
 | 
						||
 | 
						||
 | 
						||
;;;
 | 
						||
;;; Entry point.
 | 
						||
;;;
 | 
						||
(define (main args)
 | 
						||
  (fluid-set! %default-port-encoding #f)
 | 
						||
  (let* ((files-from (get-option args "--files-from="))
 | 
						||
         (default-domain (get-option args "--default-domain="))
 | 
						||
         (directory (or (get-option args "--directory=") "."))
 | 
						||
         (xgettext (or (get-option args "--xgettext=") "xgettext"))
 | 
						||
         (xgettext-args (filter (negate (option? "--xgettext=")) args))
 | 
						||
         (command (match xgettext-args
 | 
						||
                    ((xgettext.scm args ...)
 | 
						||
                     `(,xgettext ,@args))))
 | 
						||
         (result (apply system* command))
 | 
						||
         (status (/ result 256)))
 | 
						||
    (if (or (not (zero? status))
 | 
						||
            (not files-from))
 | 
						||
        (exit status)
 | 
						||
        (let* ((text (with-input-from-file files-from read-string))
 | 
						||
               (lines (string-split text #\newline))
 | 
						||
               (files (filter (negate (cute string-prefix? "#" <>)) lines))
 | 
						||
               (files (map (cute string-append directory "/" <>) files))
 | 
						||
               (git-command `("git" "log" "--pretty=format:%ci" "-n1" ,@files))
 | 
						||
               (timestamp (pipe-command git-command))
 | 
						||
               (source-date-epoch (or (getenv "SOURCE_DATE_EPOCH") "1"))
 | 
						||
               (timestamp (if (string-null? timestamp) source-date-epoch
 | 
						||
                              timestamp))
 | 
						||
               (po-file (string-append default-domain ".po")))
 | 
						||
          (substitute* po-file
 | 
						||
            (("(\"POT-Creation-Date: )[^\\]*" all header)
 | 
						||
             (string-append header timestamp)))))))
 |