Skip to content

Commit

Permalink
man: Use SOURCE_EPOCH to make manpage dates reproducible
Browse files Browse the repository at this point in the history
Also add build-aux/update-copyright.sh to keep header file
copyright lines up-to-date.

All code taken from knet
  • Loading branch information
chrissie-c committed Sep 9, 2020
1 parent 46336fb commit 4ea13bb
Show file tree
Hide file tree
Showing 16 changed files with 221 additions and 12 deletions.
1 change: 1 addition & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ BUILT_SOURCES = .version

# untaint configure.ac when modified upon obtaining the "yanked" snapshot form
dist-hook: gen-ChangeLog
echo $(SOURCE_EPOCH) > $(distdir)/source_epoch
echo $(VERSION) | tee $(distdir)/.tarball-version | grep -Eqv '\-yank' \
|| sed "s/\(.*git-version-gen[^']*[']\)[^']*/\1\$$Format:%h??%D\$$/" \
$(distdir)/configure.ac > $(builddir)/configure.ac-t
Expand Down
29 changes: 29 additions & 0 deletions build-aux/update-copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/sh
#
# Copyright (C) 2017-2019 Red Hat, Inc. All rights reserved.
#
# Author: Fabio M. Di Nitto <[email protected]>
#
# This software licensed under GPL-2.0+
#

# script to update copyright dates across the tree

enddate=$(date +%Y)

input=$(grep -ril -e "Copyright.*Red Hat" |grep -v .swp |grep -v update-copyright |grep -v doxyxml.c)
for i in $input; do
startdate=$(git log --follow "" | grep ^Date: | tail -n 1 | awk '{print $6}')
if [ "$startdate" != "$enddate" ]; then
sed -i -e 's#Copyright (C).*Red Hat#Copyright (C) '$startdate'-'$enddate' Red Hat#g' $i
else
sed -i -e 's#Copyright (C).*Red Hat#Copyright (C) '$startdate' Red Hat#g' $i
fi
done

input=$(find . -type f |grep -v ".git")
for i in $input; do
if [ -z "$(grep -i "Copyright" $i)" ]; then
echo "WARNING: $i appears to be missing Copyright information"
fi
done
41 changes: 41 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -803,6 +803,47 @@ AC_DEFINE_UNQUOTED([QB_VER_REST],
-e t -e 's|.*|""|')],
[libqb patch version])

AX_PROG_DATE
AS_IF([test "$ax_cv_prog_date_gnu_date:$ax_cv_prog_date_gnu_utc" = yes:yes],
[UTC_DATE_AT="date -u -d@"],
[AS_IF([test "x$ax_cv_prog_date_bsd_date" = xyes],
[UTC_DATE_AT="date -u -r"],
[AC_MSG_ERROR([date utility unable to convert epoch to UTC])])])
AC_SUBST([UTC_DATE_AT])

AC_ARG_VAR([SOURCE_EPOCH],[last modification date of the source])
AC_MSG_NOTICE([trying to determine source epoch])
AC_MSG_CHECKING([for source epoch in \$SOURCE_EPOCH])
AS_IF([test -n "$SOURCE_EPOCH"],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_CHECKING([for source epoch in source_epoch file])
AS_IF([test -e "$srcdir/source_epoch"],
[read SOURCE_EPOCH <"$srcdir/source_epoch"
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_CHECKING([for source epoch baked in by gitattributes export-subst])
SOURCE_EPOCH='$Format:%at$' # template for rewriting by git-archive
AS_CASE([$SOURCE_EPOCH],
[?Format:*], # was not rewritten
[AC_MSG_RESULT([no])
AC_MSG_CHECKING([for source epoch in \$SOURCE_DATE_EPOCH])
AS_IF([test "x$SOURCE_DATE_EPOCH" != x],
[SOURCE_EPOCH="$SOURCE_DATE_EPOCH"
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_CHECKING([whether git log can provide a source epoch])
SOURCE_EPOCH=f${SOURCE_EPOCH#\$F} # convert into git log --pretty format
SOURCE_EPOCH=$(cd "$srcdir" && git log -1 --pretty=${SOURCE_EPOCH%$} 2>/dev/null)

This comment has been minimized.

Copy link
@bmwiedemann

bmwiedemann Sep 9, 2020

I would have used git log -1 --pretty=%ct here

This comment has been minimized.

Copy link
@wferi

wferi Sep 9, 2020

Contributor

format (as used currently) vs tformat (implied by leaving it out) does not make a difference in this context. So stripping the full prefix of SOURCE_EPOCH (#*:) would indeed work. I guess it wasn't done originally to make the --pretty argument fully explicit. Whether to use author date (%at) or committer date (%ct) -- well, the latter is more monotonous, but the former is more meaningful to me.

This comment has been minimized.

Copy link
@chrissie-c

chrissie-c Sep 9, 2020

Author Contributor

Thanks for clarifying

AS_IF([test -n "$SOURCE_EPOCH"],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no, using current time and breaking reproducibility])
SOURCE_EPOCH=$(date +%s)])])],
[AC_MSG_RESULT([yes])]
)])
])
AC_MSG_NOTICE([using source epoch $($UTC_DATE_AT$SOURCE_EPOCH +'%F %T %Z')])

AC_CONFIG_FILES([Makefile
include/Makefile
include/qb/Makefile
Expand Down
3 changes: 2 additions & 1 deletion docs/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ dist_man_MANS = man8/qb-blackbox.8
if HAVE_DOXYGEN
if BUILD_MAN

doxygen2man_flags = -q -i qb/ -o man3/ -m -g -P -H "libqb Programmer's Manual" -p LIBQB -c -O ../include/qb
doxygen2man_flags = -q -i qb/ -o man3/ -m -g -P -H "libqb Programmer's Manual" $$($(UTC_DATE_AT)$(SOURCE_EPOCH) +"-D %F -Y %Y") \
-p LIBQB -c -O ../include/qb -Y $(SOURCE_EPOCH)

man3_MANS = \
man3/qb_array_create_2.3 \
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbarray.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbconfig.h.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2011 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* All rights reserved.
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbdefs.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbhdb.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Steven Dake <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbipcc.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2007, 2009 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Steven Dake <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbipcs.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2009 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Steven Dake <[email protected]>,
* Angus Salkeld <[email protected]>
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qblist.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2010, 2009 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Steven Dake <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbloop.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbmap.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2011 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbrb.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
2 changes: 1 addition & 1 deletion include/qb/qbutil.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010-2020 Red Hat, Inc.
*
* Author: Angus Salkeld <[email protected]>
*
Expand Down
137 changes: 137 additions & 0 deletions m4/ax_prog_date.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_prog_date.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_PROG_DATE()
#
# DESCRIPTION
#
# This macro tries to determine the type of the date (1) command and some
# of its non-standard capabilities.
#
# The type is determined as follow:
#
# * If the version string contains "GNU", then:
# - The variable ax_cv_prog_date_gnu is set to "yes".
# - The variable ax_cv_prog_date_type is set to "gnu".
#
# * If date supports the "-v 1d" option, then:
# - The variable ax_cv_prog_date_bsd is set to "yes".
# - The variable ax_cv_prog_date_type is set to "bsd".
#
# * If both previous checks fail, then:
# - The variable ax_cv_prog_date_type is set to "unknown".
#
# The following capabilities of GNU date are checked:
#
# * If date supports the --date arg option, then:
# - The variable ax_cv_prog_date_gnu_date is set to "yes".
#
# * If date supports the --utc arg option, then:
# - The variable ax_cv_prog_date_gnu_utc is set to "yes".
#
# The following capabilities of BSD date are checked:
#
# * If date supports the -v 1d option, then:
# - The variable ax_cv_prog_date_bsd_adjust is set to "yes".
#
# * If date supports the -r arg option, then:
# - The variable ax_cv_prog_date_bsd_date is set to "yes".
#
# All the aforementioned variables are set to "no" before a check is
# performed.
#
# LICENSE
#
# Copyright (c) 2017 Enrico M. Crisostomo <[email protected]>
#
# 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/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.

#serial 3

AC_DEFUN([AX_PROG_DATE], [dnl
AC_CACHE_CHECK([for GNU date], [ax_cv_prog_date_gnu], [
ax_cv_prog_date_gnu=no
if date --version 2>/dev/null | head -1 | grep -q GNU
then
ax_cv_prog_date_gnu=yes
fi
])
AC_CACHE_CHECK([for BSD date], [ax_cv_prog_date_bsd], [
ax_cv_prog_date_bsd=no
if date -v 1d > /dev/null 2>&1
then
ax_cv_prog_date_bsd=yes
fi
])
AC_CACHE_CHECK([for date type], [ax_cv_prog_date_type], [
ax_cv_prog_date_type=unknown
if test "x${ax_cv_prog_date_gnu}" = "xyes"
then
ax_cv_prog_date_type=gnu
elif test "x${ax_cv_prog_date_bsd}" = "xyes"
then
ax_cv_prog_date_type=bsd
fi
])
AS_VAR_IF([ax_cv_prog_date_gnu], [yes], [
AC_CACHE_CHECK([whether GNU date supports --date], [ax_cv_prog_date_gnu_date], [
ax_cv_prog_date_gnu_date=no
if date --date=@1512031231 > /dev/null 2>&1
then
ax_cv_prog_date_gnu_date=yes
fi
])
AC_CACHE_CHECK([whether GNU date supports --utc], [ax_cv_prog_date_gnu_utc], [
ax_cv_prog_date_gnu_utc=no
if date --utc > /dev/null 2>&1
then
ax_cv_prog_date_gnu_utc=yes
fi
])
])
AS_VAR_IF([ax_cv_prog_date_bsd], [yes], [
AC_CACHE_CHECK([whether BSD date supports -r], [ax_cv_prog_date_bsd_date], [
ax_cv_prog_date_bsd_date=no
if date -r 1512031231 > /dev/null 2>&1
then
ax_cv_prog_date_bsd_date=yes
fi
])
])
AS_VAR_IF([ax_cv_prog_date_bsd], [yes], [
AC_CACHE_CHECK([whether BSD date supports -v], [ax_cv_prog_date_bsd_adjust], [
ax_cv_prog_date_bsd_adjust=no
if date -v 1d > /dev/null 2>&1
then
ax_cv_prog_date_bsd_adjust=yes
fi
])
])
])dnl AX_PROG_DATE

0 comments on commit 4ea13bb

Please sign in to comment.