]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.0910: Vim is not reproducibly buildable v8.2.0910
authorBram Moolenaar <Bram@vim.org>
Fri, 5 Jun 2020 21:16:29 +0000 (23:16 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 5 Jun 2020 21:16:29 +0000 (23:16 +0200)
Problem:    Vim is not reproducibly buildable.
Solution:   Use the $SOURCE_DATE_EPOCH environment variable in configure.
            (James McCoy, closes #513)  Give a warning about using it.

src/Makefile
src/auto/configure
src/config.h.in
src/config.mk.in
src/configure.ac
src/version.c

index c12481cc7ac57d201e81d0c78af09bb4eedbe39c..354c13faf71f2217f970e0bcdabe7e7a48f411fe 100644 (file)
@@ -2130,6 +2130,7 @@ CCC = $(CCC_NF) $(ALL_CFLAGS)
 # A shell script is used to try linking without unnecessary libraries.
 $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
        $(CCC) version.c -o objects/version.o
+       @$(BUILD_DATE_MSG)
        @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
                -o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
                MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
index 516e45ceea881e4ed05f83ea6506a1767e81b13e..4c3ff325d048bfea9b45f70a0906a364b58604f6 100755 (executable)
@@ -721,6 +721,7 @@ OS_EXTRA_SRC
 XCODE_SELECT
 CPP_MM
 CROSS_COMPILING
+BUILD_DATE_MSG
 STRIP
 AWK
 FGREP
@@ -4455,6 +4456,17 @@ See \`config.log' for more details" "$LINENO" 5; }
   fi
 fi
 
+if test -n "$SOURCE_DATE_EPOCH"; then
+  DATE_FMT="%b %d %Y %H:%M:%S"
+  BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT")
+  cat >>confdefs.h <<_ACEOF
+#define BUILD_DATE "$BUILD_DATE"
+_ACEOF
+
+  BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
+
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
 $as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
index 5c8c7e55619e5bda12851e7dc0a72b0522721fa8..7055b6f005f50bf25c35bdfcb29bbea7e89c8534 100644 (file)
@@ -30,6 +30,9 @@
 /* Define when __DATE__ " " __TIME__ can be used */
 #undef HAVE_DATE_TIME
 
+/* Defined from $SOURCE_DATE_EPOCH, used as the build date */
+#undef BUILD_DATE
+
 /* Define when __attribute__((unused)) can be used */
 #undef HAVE_ATTRIBUTE_UNUSED
 
index 1b5175b9e72e1658c4632bf011234ee9d434cfd1..f55bea6f73cca582bc5c1500a26566dee8bf6e0c 100644 (file)
@@ -169,6 +169,10 @@ MAKEMO             = @MAKEMO@
 MSGFMT         = @MSGFMT@
 MSGFMT_DESKTOP = @MSGFMT_DESKTOP@
 
+### set if $SOURCE_DATE_EPOCH was set when running configure
+BUILD_DATE_MSG = @BUILD_DATE_MSG@
+
+
 # Make sure that "make first" will run "make all" once configure has done its
 # work.  This is needed when using the Makefile in the top directory.
 first: all
index 67851802bf3ed15787d51100d3bfad57526f0a62..dccf3dce85941bfd43151861becc69d52938bbe2 100644 (file)
@@ -62,6 +62,18 @@ if test x"$ac_cv_prog_cc_c99" != xno; then
   fi
 fi
 
+dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
+dnl "compiled" timestamp in :version's output.  Attempt to get the formatted
+dnl date using GNU date syntax, BSD date syntax, and finally falling back to
+dnl just using the current time.
+if test -n "$SOURCE_DATE_EPOCH"; then
+  DATE_FMT="%b %d %Y %H:%M:%S"
+  BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT")
+  AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
+  BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
+  AC_SUBST(BUILD_DATE_MSG)
+fi
+
 dnl Check for the flag that fails if stuff are missing.
 
 AC_MSG_CHECKING(--enable-fail-if-missing argument)
index 5fca34bf29c26c16416b5b1968005eb9530f7403..e761c5dc4abb91a3421d8bccfbccbc2f0f497dc3 100644 (file)
@@ -44,9 +44,13 @@ init_longVersion(void)
      * VAX C can't concatenate strings in the preprocessor.
      */
     strcpy(longVersion, VIM_VERSION_LONG_DATE);
+#ifdef BUILD_DATE
+    strcat(longVersion, BUILD_DATE);
+#else
     strcat(longVersion, __DATE__);
     strcat(longVersion, " ");
     strcat(longVersion, __TIME__);
+#endif
     strcat(longVersion, ")");
 }
 
@@ -56,7 +60,15 @@ init_longVersion(void)
 {
     if (longVersion == NULL)
     {
+#ifdef BUILD_DATE
+       char *date_time = BUILD_DATE;
+#else
+#ifdef BUILD_DATE
+       char *date_time = BUILD_DATE;
+#else
        char *date_time = __DATE__ " " __TIME__;
+#endif
+#endif
        char *msg = _("%s (%s, compiled %s)");
        size_t len = strlen(msg)
                    + strlen(VIM_VERSION_LONG_ONLY)