author | Brian O'Keefe <bokeefe@alum.wpi.edu> |
Fri, 27 Mar 2015 15:39:34 -0400 | |
changeset 269796 | 7f73bbf6df768b8bef39ac406fe883b9d4ca5c87 |
parent 269795 | 84d9ae40699e0d604fe49066e0799e74ae466aea |
child 269797 | 6f7d0ef4912a562dda8557109fb2fa981ff1dc01 |
push id | 863 |
push user | raliiev@mozilla.com |
push date | Mon, 03 Aug 2015 13:22:43 +0000 |
treeherder | mozilla-release@f6321b14228d [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | gps |
bugs | 852814 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/config/baseconfig.mk +++ b/config/baseconfig.mk @@ -48,93 +48,16 @@ endif endif endif # WINNT include_deps = $(eval $(if $(2),,-)include $(1)) ifndef INCLUDED_AUTOCONF_MK default:: else - -# Integrate with mozbuild-generated make files. We first verify that no -# variables provided by the automatically generated .mk files are -# present. If they are, this is a violation of the separation of -# responsibility between Makefile.in and mozbuild files. -_MOZBUILD_EXTERNAL_VARIABLES := \ - ANDROID_GENERATED_RESFILES \ - ANDROID_RES_DIRS \ - CMSRCS \ - CMMSRCS \ - CPP_UNIT_TESTS \ - DIRS \ - EXTRA_DSO_LDOPTS \ - EXTRA_JS_MODULES \ - EXTRA_PP_COMPONENTS \ - EXTRA_PP_JS_MODULES \ - FORCE_SHARED_LIB \ - FORCE_STATIC_LIB \ - FINAL_LIBRARY \ - HOST_CSRCS \ - HOST_CMMSRCS \ - HOST_EXTRA_LIBS \ - HOST_LIBRARY_NAME \ - HOST_PROGRAM \ - HOST_SIMPLE_PROGRAMS \ - IS_COMPONENT \ - JAR_MANIFEST \ - JAVA_JAR_TARGETS \ - LD_VERSION_SCRIPT \ - LIBRARY_NAME \ - LIBS \ - MAKE_FRAMEWORK \ - MODULE \ - MSVC_ENABLE_PGO \ - NO_DIST_INSTALL \ - OS_LIBS \ - PARALLEL_DIRS \ - PREF_JS_EXPORTS \ - PROGRAM \ - PYTHON_UNIT_TESTS \ - RESOURCE_FILES \ - SDK_HEADERS \ - SDK_LIBRARY \ - SHARED_LIBRARY_LIBS \ - SHARED_LIBRARY_NAME \ - SIMPLE_PROGRAMS \ - SONAME \ - STATIC_LIBRARY_NAME \ - TEST_DIRS \ - TOOL_DIRS \ - XPCSHELL_TESTS \ - XPIDL_MODULE \ - $(NULL) - -_DEPRECATED_VARIABLES := \ - ANDROID_RESFILES \ - EXPORT_LIBRARY \ - EXTRA_LIBS \ - HOST_LIBS \ - LIBXUL_LIBRARY \ - MOCHITEST_A11Y_FILES \ - MOCHITEST_BROWSER_FILES \ - MOCHITEST_BROWSER_FILES_PARTS \ - MOCHITEST_CHROME_FILES \ - MOCHITEST_FILES \ - MOCHITEST_FILES_PARTS \ - MOCHITEST_METRO_FILES \ - MOCHITEST_ROBOCOP_FILES \ - SHORT_LIBNAME \ - TESTING_JS_MODULES \ - TESTING_JS_MODULE_DIR \ - $(NULL) - -# Freeze the values specified by moz.build to catch them if they fail. - -$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES) $(_DEPRECATED_VARIABLES),$(eval $(var)_FROZEN := '$($(var))')) - TIERS := export $(if $(COMPILE_ENVIRONMENT),compile )misc libs tools endif # These defines are used to support the twin-topsrcdir model for comm-central. ifdef MOZILLA_SRCDIR MOZILLA_DIR = $(MOZILLA_SRCDIR) else MOZILLA_DIR = $(topsrcdir)
--- a/config/config.mk +++ b/config/config.mk @@ -29,38 +29,24 @@ endif -include $(DEPTH)/.mozconfig.mk ifndef EXTERNALLY_MANAGED_MAKE_FILE # Using $(firstword) may not be perfect. But it should be good enough for most # scenarios. _current_makefile = $(CURDIR)/$(firstword $(MAKEFILE_LIST)) -CHECK_MOZBUILD_VARIABLES = $(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES), \ - $(if $(subst $($(var)_FROZEN),,'$($(var))'), \ - $(error Variable $(var) is defined in $(_current_makefile). It should only be defined in moz.build files),\ - )) $(foreach var,$(_DEPRECATED_VARIABLES), \ - $(if $(subst $($(var)_FROZEN),,'$($(var))'), \ - $(error Variable $(var) is defined in $(_current_makefile). This variable has been deprecated. It does nothing. It must be removed in order to build),\ - )) - -# Check variables set after autoconf.mk (included at the top of Makefiles) is -# included and before config.mk is included. -_eval_for_side_effects := $(CHECK_MOZBUILD_VARIABLES) - # Import the automatically generated backend file. If this file doesn't exist, # the backend hasn't been properly configured. We want this to be a fatal # error, hence not using "-include". ifndef STANDALONE_MAKEFILE GLOBAL_DEPS += backend.mk include backend.mk endif -# Freeze the values specified by moz.build to catch them if they fail. -$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES) $(_DEPRECATED_VARIABLES),$(eval $(var)_FROZEN := '$($(var))')) endif space = $(NULL) $(NULL) # Include defs.mk files that can be found in $(srcdir)/$(DEPTH), # $(srcdir)/$(DEPTH-1), $(srcdir)/$(DEPTH-2), etc., and $(srcdir) # where $(DEPTH-1) is one level less of depth, $(DEPTH-2), two, etc. # i.e. for DEPTH=../../.., DEPTH-1 is ../.. and DEPTH-2 is .. @@ -692,11 +678,8 @@ PLY_INCLUDE = -I$(MOZILLA_DIR)/other-lic export CL_INCLUDES_PREFIX # Make sure that the build system can handle non-ASCII characters # in environment variables to prevent it from breking silently on # non-English systems. export NONASCII DEFINES += -DNO_NSPR_10_SUPPORT - -# Freeze the values specified by moz.build to catch them if they fail. -$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES) $(_DEPRECATED_VARIABLES),$(eval $(var)_FROZEN := '$($(var))'))
--- a/config/recurse.mk +++ b/config/recurse.mk @@ -1,20 +1,16 @@ # 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/. ifndef INCLUDED_RULES_MK include $(topsrcdir)/config/rules.mk endif -# Make sure that anything that needs to be defined in moz.build wasn't -# overwritten after including rules.mk. -_eval_for_side_effects := $(CHECK_MOZBUILD_VARIABLES) - # The traditional model of directory traversal with make is as follows: # make -C foo # Entering foo # make -C bar # Entering foo/bar # make -C baz # Entering foo/baz # make -C qux
--- a/config/rules.mk +++ b/config/rules.mk @@ -11,20 +11,16 @@ ifndef topsrcdir endif # Define an include-at-most-once flag ifdef INCLUDED_RULES_MK $(error Do not include rules.mk twice!) endif INCLUDED_RULES_MK = 1 -# Make sure that anything that needs to be defined in moz.build wasn't -# overwritten after including config.mk. -_eval_for_side_effects := $(CHECK_MOZBUILD_VARIABLES) - ifndef INCLUDED_CONFIG_MK include $(topsrcdir)/config/config.mk endif ifndef INCLUDED_VERSION_MK include $(MOZILLA_DIR)/config/version.mk endif @@ -1630,15 +1626,8 @@ default all:: $(PURGECACHES_FILES) include $(MOZILLA_DIR)/config/makefiles/autotargets.mk ifneq ($(NULL),$(AUTO_DEPS)) default all libs tools export:: $(AUTO_DEPS) endif export:: $(GENERATED_FILES) GARBAGE += $(GENERATED_FILES) - -# We may have modified "frozen" variables in rules.mk (we do that), but we don't -# want Makefile.in doing that, so collect the possibly modified variables here, -# and check them again in recurse.mk, which is always included after Makefile.in -# contents. -$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES),$(eval $(var)_FROZEN := '$($(var))')) -$(foreach var,$(_DEPRECATED_VARIABLES),$(eval $(var)_FROZEN := '$($(var))'))
--- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py @@ -63,16 +63,84 @@ from ..frontend.data import ( XPIDLFile, ) from ..util import ( ensureParentDir, FileAvoidWrite, ) from ..makeutil import Makefile +MOZBUILD_VARIABLES = [ + 'ANDROID_GENERATED_RESFILES', + 'ANDROID_RES_DIRS', + 'CMSRCS', + 'CMMSRCS', + 'CPP_UNIT_TESTS', + 'DIRS', + 'EXTRA_DSO_LDOPTS', + 'EXTRA_JS_MODULES', + 'EXTRA_PP_COMPONENTS', + 'EXTRA_PP_JS_MODULES', + 'FORCE_SHARED_LIB', + 'FORCE_STATIC_LIB', + 'FINAL_LIBRARY', + 'HOST_CSRCS', + 'HOST_CMMSRCS', + 'HOST_EXTRA_LIBS', + 'HOST_LIBRARY_NAME', + 'HOST_PROGRAM', + 'HOST_SIMPLE_PROGRAMS', + 'IS_COMPONENT', + 'JAR_MANIFEST', + 'JAVA_JAR_TARGETS', + 'LD_VERSION_SCRIPT', + 'LIBRARY_NAME', + 'LIBS', + 'MAKE_FRAMEWORK', + 'MODULE', + 'MSVC_ENABLE_PGO', + 'NO_DIST_INSTALL', + 'OS_LIBS', + 'PARALLEL_DIRS', + 'PREF_JS_EXPORTS', + 'PROGRAM', + 'PYTHON_UNIT_TESTS', + 'RESOURCE_FILES', + 'SDK_HEADERS', + 'SDK_LIBRARY', + 'SHARED_LIBRARY_LIBS', + 'SHARED_LIBRARY_NAME', + 'SIMPLE_PROGRAMS', + 'SONAME', + 'STATIC_LIBRARY_NAME', + 'TEST_DIRS', + 'TOOL_DIRS', + 'XPCSHELL_TESTS', + 'XPIDL_MODULE', +] + +DEPRECATED_VARIABLES = [ + 'ANDROID_RESFILES', + 'EXPORT_LIBRARY', + 'EXTRA_LIBS', + 'HOST_LIBS', + 'LIBXUL_LIBRARY', + 'MOCHITEST_A11Y_FILES', + 'MOCHITEST_BROWSER_FILES', + 'MOCHITEST_BROWSER_FILES_PARTS', + 'MOCHITEST_CHROME_FILES', + 'MOCHITEST_FILES', + 'MOCHITEST_FILES_PARTS', + 'MOCHITEST_METRO_FILES', + 'MOCHITEST_ROBOCOP_FILES', + 'SHORT_LIBNAME', + 'TESTING_JS_MODULES', + 'TESTING_JS_MODULE_DIR', +] + class BackendMakeFile(object): """Represents a generated backend.mk file. This is both a wrapper around a file handle as well as a container that holds accumulated state. It's worth taking a moment to explain the make dependencies. The generated backend.mk as well as the Makefile.in (if it exists) are in the @@ -618,16 +686,28 @@ class RecursiveMakeBackend(CommonBackend '# Make sometimes gets confused between "foo" and "$(CURDIR)/foo".\n' '# Help it out by explicitly specifiying dependencies.') makefile.add_statement('all_absolute_unified_files := \\\n' ' $(addprefix $(CURDIR)/,$(%s))' % unified_files_makefile_variable) rule = makefile.create_rule(['$(all_absolute_unified_files)']) rule.add_dependencies(['$(CURDIR)/%: %']) + def _check_blacklisted_variables(self, makefile_in, makefile_content): + for x in MOZBUILD_VARIABLES: + if re.search(r'[^#]\b%s\s*[:?+]?=' % x, makefile_content, re.M): + raise Exception('Variable %s is defined in %s. It should ' + 'only be defined in moz.build files.' % (x, makefile_in)) + + for x in DEPRECATED_VARIABLES: + if re.search(r'[^#]\b%s\s*[:?+]?=' % x, makefile_content, re.M): + raise Exception('Variable %s is defined in %s. This variable ' + 'has been deprecated. It does nothing. It must be removed ' + 'in order to build.' % (x, makefile_in)) + def consume_finished(self): CommonBackend.consume_finished(self) for objdir, backend_file in sorted(self._backend_files.items()): srcdir = backend_file.srcdir with self._write_file(fh=backend_file) as bf: makefile_in = mozpath.join(srcdir, 'Makefile.in') makefile = mozpath.join(objdir, 'Makefile') @@ -665,16 +745,20 @@ class RecursiveMakeBackend(CommonBackend continue if t == b'tools' and not re.search('(?:^|\s)tools.*::', content, re.M): continue if objdir == self.environment.topobjdir: continue self._no_skip['tools'].add(mozpath.relpath(objdir, self.environment.topobjdir)) + # Detect any Makefile.ins that contain variables on the + # moz.build-only list + self._check_blacklisted_variables(makefile_in, content) + self._fill_root_mk() # Write out a dependency file used to determine whether a config.status # re-run is needed. inputs = sorted(p.replace(os.sep, '/') for p in self.backend_input_files) # We need to use $(DEPTH) so the target here matches what's in # rules.mk. If they are different, the dependencies don't get pulled in