Skip to content

Commit

Permalink
use filterdiff tool if available to strip timestamps from example
Browse files Browse the repository at this point in the history
The diff tool will emit a timestamp along with the diff. This
timestamps prevents build output from being consistent between
builds.

If the filterdiff tool is detected, use it to strip the timestamp
and allow for reproducible build output.

git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@1224 64e312b2-a51f-0410-8e61-82d0ca0eb02a
  • Loading branch information
brarcher committed Sep 13, 2015
1 parent a283cef commit f21438f
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 9 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ Contributors:
Sebastian Dröge (Kill running tests if SIGTERM or SIGINT are caught in test runner)
Matt Clarkson (Fix CMake checks using time.h for MinGW and MSVC)
Mario Sanchez Prada (configure.ac cleanup)
Tobias Frost (strip timestamps from examples to enable reproducible builds)

Anybody who has contributed code to Check or Check's build system is
considered an author. Send patches to this file to
Expand Down
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ In Development:
* Add LGPL header to files where it was missing; update FSF address in LGPL headers
Bug #110

* Strip timestamps from examples using filterdiff if available. This
allow build output to be reproducible.
Bug #112

Sun Aug 2, 2015: Released Check 0.10.0
based on r1217 (2015-08-02 19:21:14 +0000)

Expand Down
9 changes: 9 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,15 @@ if test "$TEX" = "false"; then
# anyway.
AC_MSG_WARN(tex not installed: cannot rebuild HTML documentation.)
fi
AC_CHECK_PROGS(FILTERDIFF, filterdiff, false)
if test "$FILTERDIFF" = "false"; then
# Make it [somewhat] clear to maintainers that filterdiff is missing.
# This is not an error, but will prevent builds from being
# reproducible.
AC_MSG_WARN(filterdiff not installed; build will not be reproducible.)
fi

AM_CONDITIONAL(USE_FILTERDIFF, [test x"$FILTERDIFF" = x"filterdiff"])

# Checks for pthread implementation.
ACX_PTHREAD
Expand Down
27 changes: 18 additions & 9 deletions doc/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -26,54 +26,63 @@ eg_root = $(top_srcdir)/doc/example
eg_src = $(eg_root)/src
eg_tests = $(eg_root)/tests

# If the filterdiff tool is available, use it to filter timestamps
# from diff files. Otherwise, the timestamps change between builds
# and the built output will not be reproducible
if USE_FILTERDIFF
filter_timestapms = | filterdiff --remove-timestamps
else
filter_timestapms =
endif

## now a rule for each diff. the redundancy here can probably be
## parameterized, but I don't know how. if you know, please tell us!

# diff returns 1 if there is a difference, but we don't want make to
# think that means there is an error
money.1-2.h.diff: $(eg_src)/money.1.h $(eg_src)/money.2.h
cd $(eg_root); \
diff -U 100 src/money.1.h src/money.2.h > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 src/money.1.h src/money.2.h ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

money.1-3.c.diff: $(eg_src)/money.1.c $(eg_src)/money.3.c
cd $(eg_root); \
diff -U 100 src/money.1.c src/money.3.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 src/money.1.c src/money.3.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

money.3-4.c.diff: $(eg_src)/money.3.c $(eg_src)/money.4.c
cd $(eg_root); \
diff -U 100 src/money.3.c src/money.4.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 src/money.3.c src/money.4.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

money.4-5.c.diff: $(eg_src)/money.4.c $(eg_src)/money.5.c
cd $(eg_root); \
diff -U 100 src/money.4.c src/money.5.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 src/money.4.c src/money.5.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

money.5-6.c.diff: $(eg_src)/money.5.c $(eg_src)/money.6.c
cd $(eg_root); \
diff -U 100 src/money.5.c src/money.6.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 src/money.5.c src/money.6.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

check_money.1-2.c.diff: $(eg_tests)/check_money.1.c $(eg_tests)/check_money.2.c
cd $(eg_root); \
diff -U 100 tests/check_money.1.c tests/check_money.2.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 tests/check_money.1.c tests/check_money.2.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

check_money.2-3.c.diff: $(eg_tests)/check_money.2.c $(eg_tests)/check_money.3.c
cd $(eg_root); \
diff -U 100 tests/check_money.2.c tests/check_money.3.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 tests/check_money.2.c tests/check_money.3.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

check_money.3-6.c.diff: $(eg_tests)/check_money.3.c $(eg_tests)/check_money.6.c
cd $(eg_root); \
diff -U 100 tests/check_money.3.c tests/check_money.6.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 tests/check_money.3.c tests/check_money.6.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

check_money.6-7.c.diff: $(eg_tests)/check_money.6.c $(eg_tests)/check_money.7.c
cd $(eg_root); \
diff -U 100 tests/check_money.6.c tests/check_money.7.c > @abs_builddir@/$@ || test $$? -eq 1; \
diff -U 100 tests/check_money.6.c tests/check_money.7.c ${filter_timestapms} > @abs_builddir@/$@ || test $$? -eq 1; \
cd -;

# explicitly list every file in the example.
Expand Down

0 comments on commit f21438f

Please sign in to comment.