checkpointedBuild: add checkpointed build test based on pkgs hello
This commit is contained in:
parent
1cd6b7fdc3
commit
17e88c2890
@ -113,6 +113,8 @@ with pkgs;
|
||||
|
||||
install-shell-files = callPackage ./install-shell-files {};
|
||||
|
||||
incremental-build = callPackage ./incrementalBuild {};
|
||||
|
||||
kernel-config = callPackage ./kernel.nix {};
|
||||
|
||||
ld-library-path = callPackage ./ld-library-path {};
|
||||
|
57
pkgs/test/incrementalBuild/default.nix
Normal file
57
pkgs/test/incrementalBuild/default.nix
Normal file
@ -0,0 +1,57 @@
|
||||
{ hello, buildIncremental, runCommandNoCC, texinfo, stdenv, rsync }:
|
||||
let
|
||||
baseHello = buildIncremental.prepareIncrementalBuild hello;
|
||||
patchedHello = hello.overrideAttrs (old: {
|
||||
buildInputs = [ texinfo ];
|
||||
src = runCommandNoCC "patch-hello-src" { } ''
|
||||
mkdir -p $out
|
||||
cd $out
|
||||
tar xf ${hello.src} --strip-components=1
|
||||
patch -p1 < ${./hello.patch}
|
||||
'';
|
||||
});
|
||||
incrementalBuiltHello = buildIncremental.mkIncrementalBuild patchedHello baseHello.incrementalBuildArtifacts;
|
||||
|
||||
incrementalBuiltHelloWithCheck = incrementalBuiltHello.overrideAttrs (old: {
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
echo "checking if unchanged source file is not recompiled"
|
||||
[ "$(stat --format="%Y" lib/exitfail.o)" = "$(stat --format="%Y" ${baseHello.incrementalBuildArtifacts}/lib/exitfail.o)" ]
|
||||
'';
|
||||
});
|
||||
|
||||
baseHelloRemoveFile = buildIncremental.prepareIncrementalBuild (hello.overrideAttrs (old: {
|
||||
patches = [ ./hello-additionalFile.patch ];
|
||||
}));
|
||||
|
||||
preparedHelloRemoveFileSrc = runCommandNoCC "patch-hello-src" { } ''
|
||||
mkdir -p $out
|
||||
cd $out
|
||||
tar xf ${hello.src} --strip-components=1
|
||||
patch -p1 < ${./hello-additionalFile.patch}
|
||||
'';
|
||||
|
||||
patchedHelloRemoveFile = hello.overrideAttrs (old: {
|
||||
buildInputs = [ texinfo ];
|
||||
src = runCommandNoCC "patch-hello-src" { } ''
|
||||
mkdir -p $out
|
||||
cd $out
|
||||
${rsync}/bin/rsync -cutU --chown=$USER:$USER --chmod=+w -r ${preparedHelloRemoveFileSrc}/* .
|
||||
patch -p1 < ${./hello-removeFile.patch}
|
||||
'';
|
||||
});
|
||||
|
||||
incrementalBuiltHelloWithRemovedFile = buildIncremental.mkIncrementalBuild patchedHelloRemoveFile baseHelloRemoveFile.incrementalBuildArtifacts;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "patched-hello-returns-correct-output";
|
||||
buildCommand = ''
|
||||
touch $out
|
||||
|
||||
echo "testing output of hello binary"
|
||||
[ "$(${incrementalBuiltHelloWithCheck}/bin/hello)" = "Hello, incremental world!" ]
|
||||
echo "testing output of hello with removed file"
|
||||
[ "$(${incrementalBuiltHelloWithRemovedFile}/bin/hello)" = "Hello, incremental world!" ]
|
||||
'';
|
||||
}
|
||||
|
62
pkgs/test/incrementalBuild/hello-additionalFile.patch
Normal file
62
pkgs/test/incrementalBuild/hello-additionalFile.patch
Normal file
@ -0,0 +1,62 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 0805eda..77b000c 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -227,7 +227,7 @@ am_lib_libhello_a_OBJECTS = lib/c-ctype.$(OBJEXT) \
|
||||
lib/quotearg.$(OBJEXT) lib/strnlen1.$(OBJEXT) \
|
||||
lib/unistd.$(OBJEXT) lib/wctype-h.$(OBJEXT) \
|
||||
lib/xmalloc.$(OBJEXT) lib/xalloc-die.$(OBJEXT) \
|
||||
- lib/xstrndup.$(OBJEXT)
|
||||
+ lib/xstrndup.$(OBJEXT) src/additionalFile.$(OBJEXT)
|
||||
lib_libhello_a_OBJECTS = $(am_lib_libhello_a_OBJECTS)
|
||||
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
|
||||
"$(DESTDIR)$(man1dir)"
|
||||
@@ -1380,7 +1380,7 @@ lib_libhello_a_SOURCES = lib/c-ctype.h lib/c-ctype.c lib/c-strcase.h \
|
||||
lib/gettext.h lib/localcharset.h lib/localcharset.c \
|
||||
lib/progname.h lib/progname.c lib/quotearg.c lib/strnlen1.h \
|
||||
lib/strnlen1.c lib/unistd.c lib/wctype-h.c lib/xmalloc.c \
|
||||
- lib/xalloc-die.c lib/xstrndup.h lib/xstrndup.c
|
||||
+ lib/xalloc-die.c lib/xstrndup.h lib/xstrndup.c src/additionalFile.c
|
||||
lib_libhello_a_LIBADD = $(gl_LIBOBJS)
|
||||
lib_libhello_a_DEPENDENCIES = $(gl_LIBOBJS)
|
||||
EXTRA_lib_libhello_a_SOURCES = lib/stripslash.c lib/error.c \
|
||||
diff --git a/src/additionalFile.c b/src/additionalFile.c
|
||||
new file mode 100644
|
||||
index 0000000..34d683d
|
||||
--- /dev/null
|
||||
+++ b/src/additionalFile.c
|
||||
@@ -0,0 +1,6 @@
|
||||
+#include "config.h"
|
||||
+#include "system.h"
|
||||
+
|
||||
+int somefunc() {
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/src/hello.c b/src/hello.c
|
||||
index 453962f..df67de2 100644
|
||||
--- a/src/hello.c
|
||||
+++ b/src/hello.c
|
||||
@@ -57,7 +57,11 @@ main (int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
/* Having initialized gettext, get the default message. */
|
||||
- greeting_msg = _("Hello, world!");
|
||||
+ if (somefunc() == 0) {
|
||||
+ greeting_msg = _("Hello, world!");
|
||||
+ } else {
|
||||
+ greeting_msg = _("Hello, incremental world!");
|
||||
+ }
|
||||
|
||||
/* Even exiting has subtleties. On exit, if any writes failed, change
|
||||
the exit status. The /dev/full device on GNU/Linux can be used for
|
||||
diff --git a/src/system.h b/src/system.h
|
||||
index d1acac2..935b955 100644
|
||||
--- a/src/system.h
|
||||
+++ b/src/system.h
|
||||
@@ -42,4 +42,6 @@
|
||||
/* Check for errors on write. */
|
||||
# include "closeout.h"
|
||||
|
||||
+int somefunc();
|
||||
+
|
||||
#endif /* HELLO_SYSTEM_H */
|
62
pkgs/test/incrementalBuild/hello-removeFile.patch
Normal file
62
pkgs/test/incrementalBuild/hello-removeFile.patch
Normal file
@ -0,0 +1,62 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 77b000c..0805eda 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -227,7 +227,7 @@ am_lib_libhello_a_OBJECTS = lib/c-ctype.$(OBJEXT) \
|
||||
lib/quotearg.$(OBJEXT) lib/strnlen1.$(OBJEXT) \
|
||||
lib/unistd.$(OBJEXT) lib/wctype-h.$(OBJEXT) \
|
||||
lib/xmalloc.$(OBJEXT) lib/xalloc-die.$(OBJEXT) \
|
||||
- lib/xstrndup.$(OBJEXT) src/additionalFile.$(OBJEXT)
|
||||
+ lib/xstrndup.$(OBJEXT)
|
||||
lib_libhello_a_OBJECTS = $(am_lib_libhello_a_OBJECTS)
|
||||
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
|
||||
"$(DESTDIR)$(man1dir)"
|
||||
@@ -1380,7 +1380,7 @@ lib_libhello_a_SOURCES = lib/c-ctype.h lib/c-ctype.c lib/c-strcase.h \
|
||||
lib/gettext.h lib/localcharset.h lib/localcharset.c \
|
||||
lib/progname.h lib/progname.c lib/quotearg.c lib/strnlen1.h \
|
||||
lib/strnlen1.c lib/unistd.c lib/wctype-h.c lib/xmalloc.c \
|
||||
- lib/xalloc-die.c lib/xstrndup.h lib/xstrndup.c src/additionalFile.c
|
||||
+ lib/xalloc-die.c lib/xstrndup.h lib/xstrndup.c
|
||||
lib_libhello_a_LIBADD = $(gl_LIBOBJS)
|
||||
lib_libhello_a_DEPENDENCIES = $(gl_LIBOBJS)
|
||||
EXTRA_lib_libhello_a_SOURCES = lib/stripslash.c lib/error.c \
|
||||
diff --git a/src/additionalFile.c b/src/additionalFile.c
|
||||
deleted file mode 100644
|
||||
index 34d683d..0000000
|
||||
--- a/src/additionalFile.c
|
||||
+++ /dev/null
|
||||
@@ -1,6 +0,0 @@
|
||||
-#include "config.h"
|
||||
-#include "system.h"
|
||||
-
|
||||
-int somefunc() {
|
||||
- return 0;
|
||||
-}
|
||||
diff --git a/src/hello.c b/src/hello.c
|
||||
index df67de2..768285a 100644
|
||||
--- a/src/hello.c
|
||||
+++ b/src/hello.c
|
||||
@@ -36,6 +36,10 @@ static const struct option longopts[] = {
|
||||
static void print_help (void);
|
||||
static void print_version (void);
|
||||
|
||||
+int somefunc() {
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
diff --git a/tests/hello-1 b/tests/hello-1
|
||||
index e15fa95..3b7a815 100755
|
||||
--- a/tests/hello-1
|
||||
+++ b/tests/hello-1
|
||||
@@ -21,7 +21,7 @@ export LANGUAGE LC_ALL LC_MESSAGES LANG
|
||||
|
||||
tmpfiles="hello-test1.ok"
|
||||
cat <<EOF > hello-test1.ok
|
||||
-Hello, world!
|
||||
+Hello, incremental world!
|
||||
EOF
|
||||
|
||||
tmpfiles="$tmpfiles hello-test1.out"
|
26
pkgs/test/incrementalBuild/hello.patch
Normal file
26
pkgs/test/incrementalBuild/hello.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff --git a/src/hello.c b/src/hello.c
|
||||
index 182303c..453962f 100644
|
||||
--- a/src/hello.c
|
||||
+++ b/src/hello.c
|
||||
@@ -57,7 +57,7 @@ main (int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
/* Having initialized gettext, get the default message. */
|
||||
- greeting_msg = _("Hello, world!");
|
||||
+ greeting_msg = _("Hello, incremental world!");
|
||||
|
||||
/* Even exiting has subtleties. On exit, if any writes failed, change
|
||||
the exit status. The /dev/full device on GNU/Linux can be used for
|
||||
diff --git a/tests/hello-1 b/tests/hello-1
|
||||
index 3b7a815..e15fa95 100755
|
||||
--- a/tests/hello-1
|
||||
+++ b/tests/hello-1
|
||||
@@ -21,7 +21,7 @@ export LANGUAGE LC_ALL LC_MESSAGES LANG
|
||||
|
||||
tmpfiles="hello-test1.ok"
|
||||
cat <<EOF > hello-test1.ok
|
||||
-Hello, world!
|
||||
+Hello, incremental world!
|
||||
EOF
|
||||
|
||||
tmpfiles="$tmpfiles hello-test1.out"
|
Loading…
Reference in New Issue
Block a user