Bug 1027890 - Remove all sorts of build system code dedicated to pymake. r=gps
☠☠ backed out by 59b0072d64aa ☠ ☠
authorMike Hommey <mh+mozilla@glandium.org>
Wed, 25 Jun 2014 08:38:28 +0900
changeset 190626 bcd694f0e95dad42f9d355c2f8c8a99715b714ad
parent 190625 49cadfcde709e64b3f31476fb1370ee8d8ca1403
child 190627 5b1b527abe473a64fa9dedf7b487d453eb2e078a
push id7449
push usercbook@mozilla.com
push dateWed, 25 Jun 2014 13:49:09 +0000
treeherderfx-team@21331c695f14 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgps
bugs1027890
milestone33.0a1
Bug 1027890 - Remove all sorts of build system code dedicated to pymake. r=gps
Makefile.in
b2g/gaia/Makefile.in
build/autoconf/compiler-opts.m4
build/docs/slow.rst
client.mk
config/config.mk
config/makefiles/functions.mk
config/rules.mk
config/tests/makefiles/autodeps/Makefile.in
intl/icu/Makefile.in
js/src/Makefile.in
python/mozbuild/mozbuild/base.py
security/build/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,22 +1,20 @@
 #
 # 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 .PYMAKE
 ifeq (,$(MAKE_VERSION))
 $(error GNU Make is required)
 endif
 make_min_ver := 3.81
 ifneq ($(make_min_ver),$(firstword $(sort $(make_min_ver) $(MAKE_VERSION))))
 $(error GNU Make $(make_min_ver) or higher is required)
 endif
-endif
 
 export TOPLEVEL_BUILD := 1
 
 default::
 
 ifdef MOZ_BUILD_APP
 include $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk
 endif
--- a/b2g/gaia/Makefile.in
+++ b/b2g/gaia/Makefile.in
@@ -1,24 +1,17 @@
 # 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/.
 
 GAIA_PATH := gaia/profile
 
-ifdef .PYMAKE
-# For use of GNU make in pymake builds.
-GAIA_MAKE=$(GMAKE)
-else
-GAIA_MAKE=$(MAKE)
-endif
-
 # This is needed to avoid making run-b2g depend on mozglue
 WRAP_LDFLAGS :=
 
 GENERATED_DIRS += $(DIST)/bin/$(GAIA_PATH)
 
 include $(topsrcdir)/config/rules.mk
 
 libs::
-	+$(GAIA_MAKE) -j1 -C $(GAIADIR) clean
-	+$(GAIA_MAKE) -j1 -C $(GAIADIR) profile
+	+$(MAKE) -j1 -C $(GAIADIR) clean
+	+$(MAKE) -j1 -C $(GAIADIR) profile
 	(cd $(GAIADIR)/profile && tar $(TAR_CREATE_FLAGS) - .) | (cd $(abspath $(DIST))/bin/$(GAIA_PATH) && tar -xf -)
--- a/build/autoconf/compiler-opts.m4
+++ b/build/autoconf/compiler-opts.m4
@@ -179,22 +179,16 @@ if test -n "$MOZ_DEBUG" -o -n "$MOZ_DEBU
     export MOZ_DEBUG_SYMBOLS
 fi
 
 ])
 
 dnl A high level macro for selecting compiler options.
 AC_DEFUN([MOZ_COMPILER_OPTS],
 [
-  if test "${MOZ_PSEUDO_DERECURSE-unset}" = unset; then
-    dnl Don't enable on pymake, because of bug 918652. Bug 912979 is an annoyance
-    dnl with pymake, too.
-    MOZ_PSEUDO_DERECURSE=no-pymake
-  fi
-
   MOZ_DEBUGGING_OPTS
   MOZ_RTTI
 if test "$CLANG_CXX"; then
     ## We disable return-type-c-linkage because jsval is defined as a C++ type but is
     ## returned by C functions. This is possible because we use knowledge about the ABI
     ## to typedef it to a C type with the same layout when the headers are included
     ## from C.
     _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-unknown-warning-option -Wno-return-type-c-linkage"
--- a/build/docs/slow.rst
+++ b/build/docs/slow.rst
@@ -83,32 +83,19 @@ the build system.
 
 **We recommend building with no less than 8 GB of system memory.** As
 always, the more memory you have, the better. For a bare bones machine
 doing nothing more than building the source tree, anything more than 16
 GB is likely entering the point of diminishing returns.
 
 This cause impacts both clobber and incremental builds.
 
-You are building with pymake
-============================
-
-Pymake is slower than GNU make. One reason is Python is generally slower
-than C. The build system maintainers are consistently looking at
-optimizing pymake. However, it is death by a thousand cuts.
-
-This cause impacts both clobber and incremental builds.
-
 You are building on Windows
 ===========================
 
-Builds on Windows are slow for a few reasons. First, Windows builds use
-pymake, not GNU make (because of compatibility issues with GNU make).
-But, there are other sources of slowness.
-
 New processes on Windows are about a magnitude slower to spawn than on
 UNIX-y systems such as Linux. This is because Windows has optimized new
 threads while the \*NIX platforms typically optimize new processes.
 Anyway, the build system spawns thousands of new processes during a
 build. Parts of the build that rely on rapid spawning of new processes
 are slow on Windows as a result. This is most pronounced when running
 *configure*. The configure file is a giant shell script and shell
 scripts rely heavily on new processes. This is why configure on Windows
--- a/client.mk
+++ b/client.mk
@@ -139,23 +139,16 @@ endif
 ifeq (,$(findstring -j,$(MOZ_MAKE_FLAGS)))
   cores=$(shell $(PYTHON) -c 'import multiprocessing; print(multiprocessing.cpu_count())')
   MOZ_MAKE_FLAGS += -j$(cores)
 endif
 
 
 ifndef MOZ_OBJDIR
   MOZ_OBJDIR = obj-$(CONFIG_GUESS)
-else
-# On Windows Pymake builds check MOZ_OBJDIR doesn't start with "/"
-  ifneq (,$(findstring mingw,$(CONFIG_GUESS)))
-  ifeq (1_a,$(.PYMAKE)_$(firstword a$(subst /, ,$(MOZ_OBJDIR))))
-  $(error For Windows Pymake builds, MOZ_OBJDIR must be a Windows [and not MSYS] style path.)
-  endif
-  endif
 endif
 
 ifdef MOZ_BUILD_PROJECTS
 
 ifdef MOZ_CURRENT_PROJECT
   OBJDIR = $(MOZ_OBJDIR)/$(MOZ_CURRENT_PROJECT)
   MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
   BUILD_PROJECT_ARG = MOZ_BUILD_APP=$(MOZ_CURRENT_PROJECT)
--- a/config/config.mk
+++ b/config/config.mk
@@ -189,26 +189,16 @@ BUILD_TOOLS	= $(WIN_TOP_SRC)/build/unix
 else
 win_srcdir	:= $(srcdir)
 BUILD_TOOLS	= $(topsrcdir)/build/unix
 endif
 
 CONFIG_TOOLS	= $(MOZ_BUILD_ROOT)/config
 AUTOCONF_TOOLS	= $(topsrcdir)/build/autoconf
 
-# Disable MOZ_PSEUDO_DERECURSE when it contains no-pymake and we're running
-# pymake. This can be removed when no-pymake is removed from the default in
-# build/autoconf/compiler-opts.m4.
-ifdef .PYMAKE
-comma = ,
-ifneq (,$(filter no-pymake,$(subst $(comma), ,$(MOZ_PSEUDO_DERECURSE))))
-MOZ_PSEUDO_DERECURSE :=
-endif
-endif
-
 # Disable MOZ_PSEUDO_DERECURSE on PGO builds until it's fixed.
 ifneq (,$(MOZ_PROFILE_USE)$(MOZ_PROFILE_GENERATE))
 MOZ_PSEUDO_DERECURSE :=
 endif
 
 #
 # Strip off the excessively long version numbers on these platforms,
 # but save the version to allow multiple versions of the same base
@@ -233,20 +223,16 @@ CXX_WRAPPER ?= $(call py_action,cl)
 endif # _MSC_VER
 
 CC := $(CC_WRAPPER) $(CC)
 CXX := $(CXX_WRAPPER) $(CXX)
 MKDIR ?= mkdir
 SLEEP ?= sleep
 TOUCH ?= touch
 
-ifdef .PYMAKE
-PYCOMMANDPATH += $(PYTHON_SITE_PACKAGES)
-endif
-
 PYTHON_PATH = $(PYTHON) $(topsrcdir)/config/pythonpath.py
 
 # determine debug-related options
 _DEBUG_ASFLAGS :=
 _DEBUG_CFLAGS :=
 _DEBUG_LDFLAGS :=
 
 ifdef MOZ_DEBUG
@@ -715,19 +701,16 @@ NSINSTALL = $(NSINSTALL_PY)
 else
 NSINSTALL = $(DIST)/bin/nsinstall$(HOST_BIN_SUFFIX)
 endif # WINNT
 endif # NSINSTALL_BIN
 
 
 ifeq (,$(CROSS_COMPILE)$(filter-out WINNT, $(OS_ARCH)))
 INSTALL = $(NSINSTALL) -t
-ifdef .PYMAKE
-install_cmd = $(NSINSTALL_NATIVECMD) -t $(1)
-endif # .PYMAKE
 
 else
 
 # This isn't laid out as conditional directives so that NSDISTMODE can be
 # target-specific.
 INSTALL         = $(if $(filter copy, $(NSDISTMODE)), $(NSINSTALL) -t, $(if $(filter absolute_symlink, $(NSDISTMODE)), $(NSINSTALL) -L $(PWD), $(NSINSTALL) -R))
 
 endif # WINNT
--- a/config/makefiles/functions.mk
+++ b/config/makefiles/functions.mk
@@ -22,13 +22,9 @@ core_realpath = $(error core_realpath is
 core_winabspath = $(error core_winabspath is unsupported)
 
 # Run a named Python build action. The first argument is the name of the build
 # action. The second argument are the arguments to pass to the action (space
 # delimited arguments). e.g.
 #
 #   libs::
 #       $(call py_action,purge_manifests,_build_manifests/purge/foo.manifest)
-ifdef .PYMAKE
-py_action = %mozbuild.action.$(1) main $(2)
-else
 py_action = $(PYTHON) -m mozbuild.action.$(1) $(2)
-endif
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -30,56 +30,37 @@ endif
 
 ifndef INCLUDED_VERSION_MK
 include $(topsrcdir)/config/version.mk
 endif
 
 USE_AUTOTARGETS_MK = 1
 include $(topsrcdir)/config/makefiles/makeutils.mk
 
-# Only build with Pymake (not GNU make) on Windows.
-ifeq ($(HOST_OS_ARCH),WINNT)
-ifndef L10NBASEDIR
-ifndef .PYMAKE
-$(error Pymake is required to build on Windows. Run |./mach build| to \
-automatically use pymake or invoke pymake directly via \
-|python build/pymake/make.py|.)
-endif
-endif
-endif
-
 ifdef REBUILD_CHECK
-ifdef .PYMAKE
-REPORT_BUILD = @%rebuild_check rebuild_check $@ $^
-else
 REPORT_BUILD = $(info $(shell $(PYTHON) $(MOZILLA_DIR)/config/rebuild_check.py $@ $^))
-endif
 else
 REPORT_BUILD = $(info $(notdir $@))
 endif
 
 EXEC			= exec
 
 # Don't copy xulrunner files at install time, when using system xulrunner
 ifdef SYSTEM_LIBXUL
   SKIP_COPY_XULRUNNER=1
 endif
 
 # ELOG prints out failed command when building silently (gmake -s). Pymake
 # prints out failed commands anyway, so ELOG just makes things worse by
 # forcing shell invocations.
-ifndef .PYMAKE
 ifneq (,$(findstring s, $(filter-out --%, $(MAKEFLAGS))))
   ELOG := $(EXEC) sh $(BUILD_TOOLS)/print-failed-commands.sh
 else
   ELOG :=
 endif # -s
-else
-  ELOG :=
-endif # ifndef .PYMAKE
 
 _VPATH_SRCS = $(abspath $<)
 
 ################################################################################
 # Testing frameworks support
 ################################################################################
 
 testxpcobjdir = $(DEPTH)/_tests/xpcshell
@@ -1137,19 +1118,17 @@ endif
 	@echo Creating Resource file: $@
 ifdef GNU_CC
 	$(RC) $(RCFLAGS) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) $(OUTOPTION)$@ $(_VPATH_SRCS)
 else
 	$(RC) $(RCFLAGS) -r $(DEFINES) $(INCLUDES) $(OUTOPTION)$@ $(_VPATH_SRCS)
 endif
 
 # Cancel GNU make built-in implicit rules
-ifndef .PYMAKE
 MAKEFLAGS += -r
-endif
 
 ifneq (,$(filter WINNT,$(OS_ARCH)))
 SEP := ;
 else
 SEP := :
 endif
 
 EMPTY :=
--- a/config/tests/makefiles/autodeps/Makefile.in
+++ b/config/tests/makefiles/autodeps/Makefile.in
@@ -17,17 +17,16 @@ include $(topsrcdir)/config/rules.mk
 autotgt_tests = .deps/autotargets.mk.ts
 
 tgts =\
   .deps/.mkdir.done\
   $(autotgt_tests)
   $(NULL)
 
 export MAKE
-export .PYMAKE
 
 ##------------------_##
 ##---]  TARGETS  [---##
 ##------------------_##
 all::
 
 check:: $(tgts)
 
--- a/intl/icu/Makefile.in
+++ b/intl/icu/Makefile.in
@@ -39,37 +39,29 @@ ifdef ENABLE_INTL_API
     endif # MOZ_SHARED_ICU
   endif # !MOZ_NATIVE_ICU
 endif # ENABLE_INTL_API
 
 include $(topsrcdir)/config/rules.mk
 
 ifdef ENABLE_INTL_API
 ifndef MOZ_NATIVE_ICU
-ifdef .PYMAKE
-ICU_MAKE = $(GMAKE)
-else
-ICU_MAKE = $(MAKE)
-endif
-
 default:: buildicu
 
-# - ICU requires GNU make according to its readme.html. pymake can't be used
-#   because it doesn't support order only dependencies.
 # - Force ICU to use the standard suffix for object files because expandlibs
 #   will discard all files with a non-standard suffix (bug 857450).
 # - Options for genrb: -k strict parsing; -R omit collation tailoring rules.
 buildicu::
 # ICU's build system is full of races, so force non-parallel build.
 ifdef CROSS_COMPILE
-	+$(ICU_MAKE) -j1 -C host STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R -C'
+	+$(MAKE) -j1 -C host STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R -C'
 endif
-	+$(ICU_MAKE) -j1 -C target STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R'
+	+$(MAKE) -j1 -C target STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R'
 	$(ICU_LIB_RENAME)
 
 distclean clean::
 ifdef CROSS_COMPILE
-	+$(ICU_MAKE) -C host $@ STATIC_O=$(OBJ_SUFFIX)
+	+$(MAKE) -C host $@ STATIC_O=$(OBJ_SUFFIX)
 endif
-	+$(ICU_MAKE) -C target $@ STATIC_O=$(OBJ_SUFFIX)
+	+$(MAKE) -C target $@ STATIC_O=$(OBJ_SUFFIX)
 
 endif
 endif
--- a/js/src/Makefile.in
+++ b/js/src/Makefile.in
@@ -1,23 +1,21 @@
 # -*- Mode: makefile -*-
 #
 # 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 .PYMAKE
 ifeq (,$(MAKE_VERSION))
 $(error GNU Make is required)
 endif
 make_min_ver := 3.81
 ifneq ($(make_min_ver),$(firstword $(sort $(make_min_ver) $(MAKE_VERSION))))
 $(error GNU Make $(make_min_ver) or higher is required)
 endif
-endif
 
 TOPLEVEL_BUILD := 1
 
 run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
 STATIC_LIBRARY_NAME = js_static
 LIBS		= $(NSPR_LIBS)
 
 DIST_INSTALL = 1
--- a/python/mozbuild/mozbuild/base.py
+++ b/python/mozbuild/mozbuild/base.py
@@ -429,19 +429,17 @@ class MozbuildObject(ProcessExecutionMix
 
         if ignore_errors:
             args.append('-k')
 
         if silent:
             args.append('-s')
 
         # Print entering/leaving directory messages. Some consumers look at
-        # these to measure progress. Ideally, we'd do everything with pymake
-        # and use hooks in its API. Unfortunately, it doesn't provide that
-        # feature... yet.
+        # these to measure progress.
         if print_directory:
             args.append('-w')
 
         if isinstance(target, list):
             args.extend(target)
         elif target:
             args.append(target)
 
--- a/security/build/Makefile.in
+++ b/security/build/Makefile.in
@@ -455,21 +455,16 @@ DEFAULT_GMAKE_FLAGS += $(EXTRA_GMAKE_FLA
 $(addprefix libs-,$(NSS_DIRS)): libs-%:
 # Work around NSS's export rule being racy when recursing for private_export
 # See bug #836220.
 $(addprefix export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS = PRIVATE_EXPORTS=
 $(addprefix export-,$(NSS_DIRS)): export-%: private_export-%
 $(addprefix private_export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS =
 $(addprefix private_export-,$(NSS_DIRS)): private_export-%:
 
-# Work around bug #836228 in pymake
-ifdef .PYMAKE
-$(foreach p,libs export private_export,$(addprefix $(p)-,$(NSS_DIRS))): *=$(subst $(NULL) $(NULL),-,$(wordlist 2,$(words $(subst -, ,$@)),$(subst -, ,$@)))
-endif
-
 $(foreach p,libs export private_export,$(addprefix $(p)-,$(NSS_DIRS))):
 	$(DEFAULT_GMAKE_ENV) $(MAKE) -C $(NSS_SRCDIR)/security/$* $(@:-$*=) $(DEFAULT_GMAKE_FLAGS)
 
 export:: $(addprefix export-,$(NSS_DIRS))
 
 $(addprefix clean-,$(NSS_DIRS)): clean-%:
 	$(MAKE) -C $(NSS_SRCDIR)/security/$* $(DEFAULT_GMAKE_FLAGS) clean