Bug 1298328 - Fix dependency between buildid.h and libxul, do not re-generate buildid.h for every developer build.
For automation builds, force buildid.h to be regenerated, and always
#include buildid.h in nsAppRunner.cpp. This will eliminate the mismatch at the
cost of re-linking libxul on every build.
For developer builds, always #include buildid.h in nsAppRunner.cpp, but do not
force buildid.h to be re-generated for incremental builds. This means we will
never have a mismatch between platform and application buildids, although
subsequent builds are no longer guaranteed to have a new buildid.
MozReview-Commit-ID: 19hvu8AQXgN
--- a/Makefile.in
+++ b/Makefile.in
@@ -26,18 +26,23 @@ include $(topsrcdir)/config/config.mk
GARBAGE_DIRS += _javagen _profile staticlib
DIST_GARBAGE = config.cache config.log config.status* config-defs.h \
config/autoconf.mk \
mozilla-config.h \
netwerk/necko-config.h xpcom/xpcom-config.h xpcom/xpcom-private.h \
.mozconfig.mk
ifndef MOZ_PROFILE_USE
+# Automation builds should always have a new buildid, but for the sake of not
+# re-linking libxul on every incremental build we do not enforce this for
+# developer builds.
+ifneq (,$(MOZ_AUTOMATION)$(MOZ_BUILD_DATE))
buildid.h source-repo.h: FORCE
endif
+endif
ifdef JS_STANDALONE
configure_dir = $(topsrcdir)/js/src
else
configure_dir = $(topsrcdir)
endif
BUILD_BACKEND_FILES := $(addprefix backend.,$(addsuffix Backend,$(BUILD_BACKENDS)))
deleted file mode 100644
--- a/toolkit/xre/Makefile.in
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-milestone_txt = $(topsrcdir)/config/milestone.txt
-
-include $(topsrcdir)/config/rules.mk
-
-MOZ_BUILDID := $(shell awk '{print $$3}' $(DEPTH)/buildid.h)
-$(call errorIfEmpty,GRE_MILESTONE MOZ_BUILDID)
-
-MK_COMPILE_DEFINES = -DMOZ_BUILDID=$(MOZ_BUILDID)
-
-# Note these dependencies are broken because the target is *not* the cpp file.
-# BUT, actually fixing it would make libxul rebuilt on every single incremental
-# build because of the automatic buildid change. This is why we can't actually
-# include buildid.h there, because it would add the dependency.
-$(srcdir)/nsAppRunner.cpp: $(DEPTH)/buildid.h $(milestone_txt)
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
@@ -234,16 +234,18 @@ extern uint32_t gRestartMode;
extern void InstallSignalHandlers(const char *ProgramName);
#define FILE_COMPATIBILITY_INFO NS_LITERAL_CSTRING("compatibility.ini")
#define FILE_INVALIDATE_CACHES NS_LITERAL_CSTRING(".purgecaches")
int gArgc;
char **gArgv;
+#include "buildid.h"
+
static const char gToolkitVersion[] = NS_STRINGIFY(GRE_MILESTONE);
static const char gToolkitBuildID[] = NS_STRINGIFY(MOZ_BUILDID);
static nsIProfileLock* gProfileLock;
int gRestartArgc;
char **gRestartArgv;
@@ -264,22 +266,16 @@ nsString gAbsoluteArgv0Path;
#endif
#ifdef MOZ_X11
#include <gdk/gdkx.h>
#endif /* MOZ_X11 */
#include "nsGTKToolkit.h"
#include <fontconfig/fontconfig.h>
#endif
#include "BinaryPath.h"
-#ifndef MOZ_BUILDID
-// See comment in Makefile.in why we want to avoid including buildid.h.
-// Still include it when MOZ_BUILDID is not set, which can happen with some
-// build backends.
-#include "buildid.h"
-#endif
#ifdef MOZ_LINKER
extern "C" MFBT_API bool IsSignalHandlingBroken();
#endif
#ifdef FUZZING
#include "FuzzerRunner.h"