Browse Source

import changes from `dev' branch of rmottola/Arctic-Fox and mozilla:

- Bug 1156628 - Don't limit the number of unused dirty pages kept by jemalloc on B2G desktop. r=gsvelto, r=glandium (7b9878b36)
- Bug 1172632 - Don't guess malloc_usable_size type of argument based on ANDROID_VERSION in mozjemalloc, but use the result of the configure test instead. r=njn (1f57d41d4)
- bug 1172632 - Move some allocator related configure checks in a common location for both top-level and js/src to use. r=mshal (moz-hg: 5c0acaf8f)
- Fixup for bug 1172632 on a CLOSED TREE. r=me (moz-hg: a1ea87558)
- Bug 1186444 - part 1 - move uses of MODULE_OPTIMIZE_FLAGS to moz.build's CFLAGS; r=mshal (1b1e4e8cf)
- Bug 1153566 - Incorrect re in _check_blacklisted_variables did not ignore comment. r=gps (ab563eb51)
- goanna->gecko (034340741)
- Bug 1162191 - Add |mach artifact| for installing downloaded Fennec binaries. r=gps (059a6ac32)
- Bug 1185671 - Use BytesIO instead of StringIO as backing store for FileAvoidWrite, and handle writing unicode to it explicitly. r=gps (3381f4912)
- Bug 1142127 - Fix typo in exception for "IDL already registered"; r=gps Bug 924187 - Deal with interfaces.manifest from the backend. r=mshal (32bf6ebbf)
- goanna->gecko (7c91fd334)
- Bug 1166538 - Make dozip.py a py_action. r=gps (828cdf7a1)
- Bug 1166538 - Make it more straightforward, path-wise, to change $(ZIP) uses to the zip py_action. r=gps (b85adce8e)
- Bug 1172800 - Move moz.build template handling in a separate class. r=gps (23a2d77bf)
- Bug 1172800 - Avoid using inspect.getsourcelines() and inspect.getfile(). r=gps (13021cdf2)
- Bug 1162826 - Display a proper error when a moz.build tries to set a "reserved keyword". r=mshal (6e0f1ca3c)
- Bug 1172800 - Create actual functions to execute moz.build templates. r=gps (305c886e4)
- Bug 1168607 - Add get method to finders; r=glandium (50f6c588b)
- Bug 1168231 - Normalize file mode in jars. r=gps (456678caa)
- Bug 1168607 - Add a read() method to File; r=glandium (8d3e3e066)
- Bug 1168607 - Implement a finder that reads from a Mercurial repo; r=glandium (327d542a1)
- Bug 1168607 - Use mozpack Finders for reading moz.build files; r=glandium (44e1b4cf2)
- Bug 1168607 - Add mode to MercurialFileFinder to support non-relative paths; r=glandium (ba30a87e8)
- Bug 1168607 - Add a native Mercurial finder; r=glandium (081934656)
- Bug 1176642 - Use absolute_import in mozbuild; r=glandium (8aaf8d221)
- Bug 1154687 - Restore EXTERNALLY_MANAGED_MAKE_FILE handling to the moz.build blacklist check. r=gps (099b2c496)
- Bug 1191575 - Optimize the RecursiveMakeBackend._check_blacklisted_variables test. r=gps (3e1a9a03c)
- Bug 1186444 - part 2 - remove MODULE_OPTIMIZE_FLAGS from config.mk; r=mshal (2576e322a)
- Bug 1226907 - Part 2: Fix warnings in mozjemalloc and remove ALLOW_COMPILER_WARNINGS. r=glandium (154d35b0c)
- Bug 1127618 (prereq) - Fix compile errors caused by files moving from one unified file to another. r=mcmanus (629aa7d47)
- Bug 1185616 - remove optimization-related hacks in sqlite's Makefile.in; r=glandium (d445dd291)
media-works
roytam1 1 year ago
parent
commit
3a88130789
  1. 8
      Makefile.in
  2. 1
      aclocal.m4
  3. 53
      build/autoconf/alloc.m4
  4. 4
      config/Makefile.in
  5. 12
      config/config.mk
  6. 12
      config/makefiles/xpidl/Makefile.in
  7. 3
      config/moz.build
  8. 15
      config/rules.mk
  9. 48
      configure.in
  10. 12
      db/sqlite3/src/Makefile.in
  11. 6
      gfx/cairo/cairo/src/Makefile.in
  12. 5
      gfx/cairo/cairo/src/moz.build
  13. 4
      gfx/cairo/libpixman/src/Makefile.in
  14. 4
      gfx/cairo/libpixman/src/moz.build
  15. 1
      js/src/aclocal.m4
  16. 13
      js/src/configure.in
  17. 2
      memory/build/jemalloc_config.c
  18. 6
      memory/mozjemalloc/Makefile.in
  19. 7
      memory/mozjemalloc/jemalloc.c
  20. 7
      memory/mozjemalloc/moz.build
  21. 3
      netwerk/base/nsIncrementalDownload.cpp
  22. 2
      netwerk/base/nsSimpleNestedURI.cpp
  23. 7
      netwerk/test/httpserver/Makefile.in
  24. 3
      netwerk/test/httpserver/moz.build
  25. 2
      python/mozbuild/dumbmake/dumbmake.py
  26. 2
      python/mozbuild/mozbuild/action/buildlist.py
  27. 2
      python/mozbuild/mozbuild/action/cl.py
  28. 2
      python/mozbuild/mozbuild/action/convert_def_file.py
  29. 3
      python/mozbuild/mozbuild/action/file_generate.py
  30. 1
      python/mozbuild/mozbuild/action/generate_browsersearch.py
  31. 2
      python/mozbuild/mozbuild/action/generate_suggestedsites.py
  32. 2
      python/mozbuild/mozbuild/action/jar_maker.py
  33. 2
      python/mozbuild/mozbuild/action/package_geckolibs_aar.py
  34. 2
      python/mozbuild/mozbuild/action/preprocessor.py
  35. 2
      python/mozbuild/mozbuild/action/process_install_manifest.py
  36. 2
      python/mozbuild/mozbuild/action/webidl.py
  37. 4
      python/mozbuild/mozbuild/action/xpccheck.py
  38. 2
      python/mozbuild/mozbuild/action/xpidl-process.py
  39. 19
      python/mozbuild/mozbuild/action/zip.py
  40. 398
      python/mozbuild/mozbuild/artifacts.py
  41. 2
      python/mozbuild/mozbuild/backend/android_eclipse.py
  42. 2
      python/mozbuild/mozbuild/backend/base.py
  43. 27
      python/mozbuild/mozbuild/backend/common.py
  44. 2
      python/mozbuild/mozbuild/backend/configenvironment.py
  45. 2
      python/mozbuild/mozbuild/backend/cpp_eclipse.py
  46. 197
      python/mozbuild/mozbuild/backend/recursivemake.py
  47. 2
      python/mozbuild/mozbuild/backend/visualstudio.py
  48. 18
      python/mozbuild/mozbuild/base.py
  49. 2
      python/mozbuild/mozbuild/codecoverage/packager.py
  50. 2
      python/mozbuild/mozbuild/compilation/warnings.py
  51. 2
      python/mozbuild/mozbuild/config_status.py
  52. 2
      python/mozbuild/mozbuild/configure/check_debug_ranges.py
  53. 2
      python/mozbuild/mozbuild/configure/libstdcxx.py
  54. 2
      python/mozbuild/mozbuild/controller/building.py
  55. 2
      python/mozbuild/mozbuild/controller/clobber.py
  56. 2
      python/mozbuild/mozbuild/doctor.py
  57. 3
      python/mozbuild/mozbuild/dotproperties.py
  58. 10
      python/mozbuild/mozbuild/frontend/context.py
  59. 6
      python/mozbuild/mozbuild/frontend/data.py
  60. 4
      python/mozbuild/mozbuild/frontend/emitter.py
  61. 4
      python/mozbuild/mozbuild/frontend/gyp_reader.py
  62. 196
      python/mozbuild/mozbuild/frontend/reader.py
  63. 64
      python/mozbuild/mozbuild/frontend/sandbox.py
  64. 2
      python/mozbuild/mozbuild/html_build_viewer.py
  65. 2
      python/mozbuild/mozbuild/jar.py
  66. 2
      python/mozbuild/mozbuild/makeutil.py
  67. 2
      python/mozbuild/mozbuild/milestone.py
  68. 2
      python/mozbuild/mozbuild/mozconfig.py
  69. 2
      python/mozbuild/mozbuild/mozinfo.py
  70. 2
      python/mozbuild/mozbuild/pythonutil.py
  71. 1
      python/mozbuild/mozbuild/test/backend/test_recursivemake.py
  72. 2
      python/mozbuild/mozbuild/testing.py
  73. 24
      python/mozbuild/mozbuild/util.py
  74. 2
      python/mozbuild/mozbuild/virtualenv.py
  75. 181
      python/mozbuild/mozpack/files.py
  76. 93
      python/mozbuild/mozpack/hg.py
  77. 117
      python/mozbuild/mozpack/test/test_files.py
  78. 1464
      recursivemake.py
  79. 109
      toolkit/mozapps/installer/upload-files.mk
  80. 3
      xpcom/tests/Makefile.in
  81. 3
      xpcom/tests/moz.build

8
Makefile.in

@ -21,7 +21,7 @@ endif
include $(topsrcdir)/config/config.mk
GARBAGE_DIRS += dist _javagen _profile staticlib
GARBAGE_DIRS += _javagen _profile staticlib
DIST_GARBAGE = config.cache config.log config.status* config-defs.h \
config/autoconf.mk \
mozilla-config.h \
@ -141,10 +141,10 @@ install-tests: install-_tests
include $(topsrcdir)/build/moz-automation.mk
# _tests should be purged during cleaning. However, we don't want it purged
# during PGO builds because it contains some auto-generated files.
# dist and _tests should be purged during cleaning. However, we don't want them
# purged during PGO builds because they contain some auto-generated files.
ifneq ($(filter-out maybe_clobber_profiledbuild,$(MAKECMDGOALS)),)
GARBAGE_DIRS += _tests
GARBAGE_DIRS += dist _tests
endif
# Windows PGO builds don't perform a clean before the 2nd pass. So, we want

1
aclocal.m4 vendored

@ -32,6 +32,7 @@ builtin(include, build/autoconf/winsdk.m4)dnl
builtin(include, build/autoconf/icu.m4)dnl
builtin(include, build/autoconf/ffi.m4)dnl
builtin(include, build/autoconf/clang-plugin.m4)dnl
builtin(include, build/autoconf/alloc.m4)dnl
MOZ_PROG_CHECKMSYS()

53
build/autoconf/alloc.m4

@ -0,0 +1,53 @@
dnl This Source Code Form is subject to the terms of the Mozilla Public
dnl License, v. 2.0. If a copy of the MPL was not distributed with this
dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
dnl Check for the existence of various allocation headers/functions
AC_DEFUN([MOZ_CHECK_ALLOCATOR],[
MALLOC_HEADERS="malloc.h malloc_np.h malloc/malloc.h sys/malloc.h"
MALLOC_H=
for file in $MALLOC_HEADERS; do
MOZ_CHECK_HEADER($file, [MALLOC_H=$file])
if test "$MALLOC_H" != ""; then
AC_DEFINE_UNQUOTED(MALLOC_H, <$MALLOC_H>)
break
fi
done
MOZ_CHECK_HEADERS(alloca.h)
AC_CHECK_FUNCS(strndup posix_memalign memalign)
AC_CHECK_FUNCS(malloc_usable_size)
MALLOC_USABLE_SIZE_CONST_PTR=const
MOZ_CHECK_HEADERS([malloc.h], [
AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument])
AC_TRY_COMPILE([#include <malloc.h>
#include <stddef.h>
size_t malloc_usable_size(const void *ptr);],
[return malloc_usable_size(0);],
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no])
MALLOC_USABLE_SIZE_CONST_PTR=)
])
AC_DEFINE_UNQUOTED([MALLOC_USABLE_SIZE_CONST_PTR],[$MALLOC_USABLE_SIZE_CONST_PTR])
dnl In newer bionic headers, valloc is built but not defined,
dnl so we check more carefully here.
AC_MSG_CHECKING([for valloc in malloc.h])
AC_EGREP_HEADER(valloc, malloc.h,
AC_DEFINE(HAVE_VALLOC)
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]))
AC_MSG_CHECKING([for valloc in unistd.h])
AC_EGREP_HEADER(valloc, unistd.h,
AC_DEFINE(HAVE_VALLOC)
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]))
])

4
config/Makefile.in

@ -10,10 +10,6 @@ ifdef NSBUILDROOT
override NSBUILDROOT :=
endif
ifdef GNU_CC
MODULE_OPTIMIZE_FLAGS = -O3
endif
include $(topsrcdir)/config/config.mk
# L10n jobs are doing make -C config manually before anything else,

12
config/config.mk

@ -351,15 +351,8 @@ CFLAGS = $(OS_CPPFLAGS) $(OS_CFLAGS)
CXXFLAGS = $(OS_CPPFLAGS) $(OS_CXXFLAGS)
LDFLAGS = $(OS_LDFLAGS) $(MOZBUILD_LDFLAGS) $(MOZ_FIX_LINK_PATHS)
# Allow each module to override the *default* optimization settings
# by setting MODULE_OPTIMIZE_FLAGS if the developer has not given
# arguments to --enable-optimize
ifdef MOZ_OPTIMIZE
ifeq (1,$(MOZ_OPTIMIZE))
ifdef MODULE_OPTIMIZE_FLAGS
CFLAGS += $(MODULE_OPTIMIZE_FLAGS)
CXXFLAGS += $(MODULE_OPTIMIZE_FLAGS)
else
ifneq (,$(if $(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE),$(MOZ_PGO_OPTIMIZE_FLAGS)))
CFLAGS += $(MOZ_PGO_OPTIMIZE_FLAGS)
CXXFLAGS += $(MOZ_PGO_OPTIMIZE_FLAGS)
@ -367,7 +360,6 @@ else
CFLAGS += $(MOZ_OPTIMIZE_FLAGS)
CXXFLAGS += $(MOZ_OPTIMIZE_FLAGS)
endif # neq (,$(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE))
endif # MODULE_OPTIMIZE_FLAGS
else
CFLAGS += $(MOZ_OPTIMIZE_FLAGS)
CXXFLAGS += $(MOZ_OPTIMIZE_FLAGS)
@ -380,11 +372,7 @@ HOST_CFLAGS += $(HOST_OPTIMIZE_FLAGS)
else
ifdef MOZ_OPTIMIZE
ifeq (1,$(MOZ_OPTIMIZE))
ifdef MODULE_OPTIMIZE_FLAGS
HOST_CFLAGS += $(MODULE_OPTIMIZE_FLAGS)
else
HOST_CFLAGS += $(MOZ_OPTIMIZE_FLAGS)
endif # MODULE_OPTIMIZE_FLAGS
else
HOST_CFLAGS += $(MOZ_OPTIMIZE_FLAGS)
endif # MOZ_OPTIMIZE == 1

12
config/makefiles/xpidl/Makefile.in

@ -43,6 +43,16 @@ endif
$(dist_include_dir) $(@D) $(idl_deps_dir) $(libxul_sdk_includes) \
$(basename $(notdir $@)) $($(basename $(notdir $@))_deps)
# Chrome manifests may be written from several Makefiles at various times during
# the build. The 'buildlist' action adds to the file if it already exists, but
# if it does exist, make considers it to be up-to-date (as we have no inputs to
# depend on). We use FORCE to ensure that we always add the interface manifest,
# whether or not the chrome manifest already exists.
%/chrome.manifest: FORCE
$(call py_action,buildlist,$@ 'manifest components/interfaces.manifest')
chrome_manifests := @chrome_manifests@
xpidl_modules := @xpidl_modules@
xpt_files := @xpt_files@
@ -52,7 +62,7 @@ depends_files := $(foreach root,$(xpidl_modules),$(idl_deps_dir)/$(root).pp)
GARBAGE += $(xpt_files) $(depends_files)
xpidl:: $(xpt_files)
xpidl:: $(xpt_files) $(chrome_manifests)
$(xpt_files): $(process_py) $(call mkdir_deps,$(idl_deps_dir) $(dist_include_dir))

3
config/moz.build

@ -42,3 +42,6 @@ PYTHON_UNIT_TESTS += [
'tests/unit-nsinstall.py',
'tests/unit-printprereleasesuffix.py',
]
if CONFIG['GNU_CC'] and CONFIG['MOZ_OPTIMIZE']:
CFLAGS += ['-O3']

15
config/rules.mk

@ -1157,21 +1157,6 @@ INSTALL_TARGETS += AUTOCFG_JS_EXPORTS
endif
endif
################################################################################
# Install a linked .xpt into the appropriate place.
# This should ideally be performed by the non-recursive idl make file. Some day.
ifdef XPT_NAME #{
ifndef NO_DIST_INSTALL
ifndef NO_INTERFACES_MANIFEST
export:: $(call mkdir_deps,$(FINAL_TARGET)/components)
$(call py_action,buildlist,$(FINAL_TARGET)/components/interfaces.manifest 'interfaces $(XPT_NAME)')
$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest components/interfaces.manifest')
endif
endif
endif #} XPT_NAME
################################################################################
# Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
ifneq (,$(filter %.js,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS)))

48
configure.in

@ -3343,52 +3343,6 @@ if test -n "$MOZ_LINKER" -a "$OS_TARGET" = "Android"; then
fi
fi
dnl Check for the existence of various allocation headers/functions
MALLOC_HEADERS="malloc.h malloc_np.h malloc/malloc.h sys/malloc.h"
MALLOC_H=
for file in $MALLOC_HEADERS; do
MOZ_CHECK_HEADER($file, [MALLOC_H=$file])
if test "$MALLOC_H" != ""; then
AC_DEFINE_UNQUOTED(MALLOC_H, <$MALLOC_H>)
break
fi
done
MOZ_CHECK_HEADERS(alloca.h)
AC_CHECK_FUNCS(strndup posix_memalign memalign)
AC_CHECK_FUNCS(malloc_usable_size)
MALLOC_USABLE_SIZE_CONST_PTR=const
MOZ_CHECK_HEADERS([malloc.h], [
AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument])
AC_TRY_COMPILE([#include <malloc.h>
#include <stddef.h>
size_t malloc_usable_size(const void *ptr);],
[return malloc_usable_size(0);],
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no])
MALLOC_USABLE_SIZE_CONST_PTR=)
])
AC_DEFINE_UNQUOTED([MALLOC_USABLE_SIZE_CONST_PTR],[$MALLOC_USABLE_SIZE_CONST_PTR])
dnl In newer bionic headers, valloc is built but not defined,
dnl so we check more carefully here.
AC_MSG_CHECKING([for valloc in malloc.h])
AC_EGREP_HEADER(valloc, malloc.h,
AC_DEFINE(HAVE_VALLOC)
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]))
AC_MSG_CHECKING([for valloc in unistd.h])
AC_EGREP_HEADER(valloc, unistd.h,
AC_DEFINE(HAVE_VALLOC)
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]))
dnl See if compiler supports some gcc-style attributes
AC_CACHE_CHECK(for __attribute__((always_inline)),
@ -3423,6 +3377,8 @@ fi
AC_HAVE_FUNCS(localeconv)
fi # ! SKIP_COMPILER_CHECKS
MOZ_CHECK_ALLOCATOR
TARGET_XPCOM_ABI=
if test -n "${CPU_ARCH}" -a -n "${TARGET_COMPILER_ABI}"; then
TARGET_XPCOM_ABI="${CPU_ARCH}-${TARGET_COMPILER_ABI}"

12
db/sqlite3/src/Makefile.in

@ -18,15 +18,3 @@ $(DEFFILE): sqlite.def
@$(call py_action,preprocessor,$(DEFINES) $(XULPPFLAGS) \
$(srcdir)/sqlite.def -o $(DEFFILE))
endif
# XXX Force -O2 optimisation on Mac because using the default -O3 causes
# crashes. See bug 676499.
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
MODULE_OPTIMIZE_FLAGS = -O2
endif
# Force /O2 optimisation on Windows because using the default /O1 causes
# crashes with MSVC2005 and PGO. See bug 719584.
ifeq ($(OS_ARCH),WINNT)
MODULE_OPTIMIZE_FLAGS = -O2
endif

6
gfx/cairo/cairo/src/Makefile.in

@ -2,12 +2,6 @@
# 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/.
ifdef GNU_CC
ifeq ($(OS_TARGET),Android)
MODULE_OPTIMIZE_FLAGS = -O2
endif
endif
INSTALL_TARGETS += cairo_features
cairo_features_FILES := cairo-features.h
cairo_features_DEST = $(DIST)/include/cairo

5
gfx/cairo/cairo/src/moz.build

@ -222,6 +222,11 @@ if CONFIG['CLANG_CXX']:
'-Wno-error=uninitialized',
]
# See bug 386897.
if CONFIG['GNU_CC'] and CONFIG['OS_TARGET'] == 'Android' and CONFIG['MOZ_OPTIMIZE']:
CFLAGS += ['-O2']
CXXFLAGS += ['-O2']
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt':
CFLAGS += CONFIG['MOZ_QT_CFLAGS']
CXXFLAGS += CONFIG['MOZ_QT_CFLAGS']

4
gfx/cairo/libpixman/src/Makefile.in

@ -2,10 +2,6 @@
# 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/.
ifeq ($(OS_TARGET),Android)
MODULE_OPTIMIZE_FLAGS = -O2
endif
include $(topsrcdir)/config/rules.mk
# The ARM asm functions here don't appreciate being called by functions

4
gfx/cairo/libpixman/src/moz.build

@ -146,3 +146,7 @@ if CONFIG['CLANG_CXX']:
'-Wno-tautological-compare',
'-Wno-tautological-constant-out-of-range-compare',
]
# See bug 386897.
if CONFIG['OS_TARGET'] == 'Android' and CONFIG['MOZ_OPTIMIZE']:
CFLAGS += ['-O2']

1
js/src/aclocal.m4 vendored

@ -31,6 +31,7 @@ builtin(include, ../../build/autoconf/winsdk.m4)dnl
builtin(include, ../../build/autoconf/icu.m4)dnl
builtin(include, ../../build/autoconf/ffi.m4)dnl
builtin(include, ../../build/autoconf/clang-plugin.m4)dnl
builtin(include, ../../build/autoconf/alloc.m4)dnl
define([__MOZ_AC_INIT_PREPARE], defn([AC_INIT_PREPARE]))
define([AC_INIT_PREPARE],

13
js/src/configure.in

@ -3837,18 +3837,9 @@ dnl ========================================================
dnl JavaScript shell
dnl ========================================================
MALLOC_HEADERS="malloc.h malloc_np.h malloc/malloc.h sys/malloc.h"
MALLOC_H=
for file in $MALLOC_HEADERS; do
MOZ_CHECK_HEADER($file, [MALLOC_H=$file])
if test "$MALLOC_H" != ""; then
AC_DEFINE_UNQUOTED(MALLOC_H, <$MALLOC_H>)
break
fi
done
MOZ_CHECK_ALLOCATOR
AC_CHECK_FUNCS(setlocale localeconv malloc_size malloc_usable_size)
AC_CHECK_FUNCS(setlocale localeconv)
AC_SUBST(MOZILLA_VERSION)

2
memory/build/jemalloc_config.c

@ -10,7 +10,7 @@
#include "mozilla/Types.h"
/* Override some jemalloc defaults */
#ifdef MOZ_B2G
#ifdef MOZ_WIDGET_GONK
/* we tolerate around 4MiB of dirty pages on most platforms, except for B2G,
* where our limit is 1MiB
*/

6
memory/mozjemalloc/Makefile.in

@ -9,11 +9,5 @@ ifndef MOZ_JEMALLOC3
# broken when compiling without optimization, while avoiding to add yet another
# configure test.
MOZ_OPTIMIZE = 1
ifeq ($(OS_ARCH),SunOS)
ifndef GNU_CC
MODULE_OPTIMIZE_FLAGS = -xO5
endif
endif
endif

7
memory/mozjemalloc/jemalloc.c

@ -6446,13 +6446,8 @@ malloc_good_size_impl(size_t size)
}
#if defined(MOZ_MEMORY_ANDROID) && (ANDROID_VERSION < 19)
MOZ_MEMORY_API size_t
malloc_usable_size_impl(void *ptr)
#else
MOZ_MEMORY_API size_t
malloc_usable_size_impl(const void *ptr)
#endif
malloc_usable_size_impl(MALLOC_USABLE_SIZE_CONST_PTR void *ptr)
{
#ifdef MALLOC_VALIDATE
return (isalloc_validate(ptr));

7
memory/mozjemalloc/moz.build

@ -16,6 +16,11 @@ if not CONFIG['MOZ_JEMALLOC3']:
STATIC_LIBRARY_NAME = 'jemalloc'
FORCE_STATIC_LIB = True
# See bug 422055.
if CONFIG['OS_ARCH'] == 'SunOS' and not CONFIG['GNU_CC'] \
and CONFIG['MOZ_OPTIMIZE']:
CFLAGS += ['-xO5']
# For non release/esr builds, enable (some) fatal jemalloc assertions. This
# helps us catch memory errors.
if CONFIG['MOZ_UPDATE_CHANNEL'] not in ('release', 'esr'):
@ -37,3 +42,5 @@ LOCAL_INCLUDES += [
'/memory/build',
]
if CONFIG['_MSC_VER']:
CFLAGS += ['-wd4273'] # inconsistent dll linkage (bug 558163)

3
netwerk/base/nsIncrementalDownload.cpp

@ -14,8 +14,11 @@
#include "nsIInterfaceRequestor.h"
#include "nsIObserverService.h"
#include "nsIObserver.h"
#include "nsIStreamListener.h"
#include "nsIFile.h"
#include "nsITimer.h"
#include "nsIURI.h"
#include "nsIInputStream.h"
#include "nsNetUtil.h"
#include "nsAutoPtr.h"
#include "nsWeakReference.h"

2
netwerk/base/nsSimpleNestedURI.cpp

@ -5,6 +5,8 @@
#include "base/basictypes.h"
#include "nsNetCID.h"
#include "nsNetUtil.h"
#include "nsSimpleNestedURI.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"

7
netwerk/test/httpserver/Makefile.in

@ -1,7 +0,0 @@
# vim: noexpandtab ts=8 sw=8
#
# 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/.
NO_INTERFACES_MANIFEST = 1

3
netwerk/test/httpserver/moz.build

@ -10,6 +10,9 @@ XPIDL_SOURCES += [
XPIDL_MODULE = 'test_necko'
# Don't add our test-only .xpt files to the normal manifests
XPIDL_NO_MANIFEST = True
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
EXTRA_COMPONENTS += [

2
python/mozbuild/dumbmake/dumbmake.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import unicode_literals
from __future__ import absolute_import, unicode_literals
from collections import OrderedDict
from itertools import groupby

2
python/mozbuild/mozbuild/action/buildlist.py

@ -7,7 +7,7 @@ if the entry does not already exist.
Usage: buildlist.py <filename> <entry> [<entry> ...]
'''
from __future__ import print_function
from __future__ import absolute_import, print_function
import sys
import os

2
python/mozbuild/mozbuild/action/cl.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import ctypes
import os
import sys

2
python/mozbuild/mozbuild/action/convert_def_file.py

@ -5,6 +5,8 @@
# Convert Windows-style export files into a single Unix-style linker
# script, applying any necessary preprocessing.
from __future__ import absolute_import
import itertools
import re
import sys

3
python/mozbuild/mozbuild/action/file_generate.py

@ -6,7 +6,8 @@
# the arguments that can be used to generate the output file, call the
# script's |main| method with appropriate arguments.
from __future__ import print_function
from __future__ import absolute_import, print_function
import argparse
import imp
import os

1
python/mozbuild/mozbuild/action/generate_browsersearch.py

@ -31,6 +31,7 @@ e.g. raw/browsersearch.json, raw-pt-rBR/browsersearch.json.
'''
from __future__ import (
absolute_import,
print_function,
unicode_literals,
)

2
python/mozbuild/mozbuild/action/generate_suggestedsites.py

@ -25,7 +25,7 @@ write the result to suggestedsites.json on the locale-specific raw resource
directory e.g. raw/suggestedsites.json, raw-pt-rBR/suggestedsites.json.
'''
from __future__ import print_function
from __future__ import absolute_import, print_function
import argparse
import json

2
python/mozbuild/mozbuild/action/jar_maker.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import sys
import mozbuild.jar

2
python/mozbuild/mozbuild/action/package_goannalibs_aar.py → python/mozbuild/mozbuild/action/package_geckolibs_aar.py

@ -8,7 +8,7 @@ Gecko library binaries. The AAR file is intended for use by local
developers using Gradle.
'''
from __future__ import print_function
from __future__ import absolute_import, print_function
import argparse
import hashlib

2
python/mozbuild/mozbuild/action/preprocessor.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import sys
from mozbuild.preprocessor import Preprocessor

2
python/mozbuild/mozbuild/action/process_install_manifest.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import print_function, unicode_literals
from __future__ import absolute_import, print_function, unicode_literals
import argparse
import sys

2
python/mozbuild/mozbuild/action/webidl.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import sys
from mozwebidlcodegen import BuildSystemWebIDL

4
python/mozbuild/mozbuild/action/xpccheck.py

@ -2,12 +2,14 @@
# 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/.
'''A generic script to verify all test files are in the
'''A generic script to verify all test files are in the
corresponding .ini file.
Usage: xpccheck.py <directory> [<directory> ...]
'''
from __future__ import absolute_import
import sys
import os
from glob import glob

2
python/mozbuild/mozbuild/action/xpidl-process.py

@ -7,6 +7,8 @@
# input IDL file(s). It's purpose is to directly support the build
# system. The API will change to meet the needs of the build system.
from __future__ import absolute_import
import argparse
import os
import sys

19
toolkit/mozapps/installer/dozip.py → python/mozbuild/mozbuild/action/zip.py

@ -5,23 +5,21 @@
# This script creates a zip file, but will also strip any binaries
# it finds before adding them to the zip.
from __future__ import absolute_import
from mozpack.files import FileFinder
from mozpack.copier import Jarrer
from mozpack.errors import errors
import argparse
import buildconfig
import mozpack.path as mozpath
import os
import sys
import tempfile
def main(args):
parser = argparse.ArgumentParser()
parser.add_argument("--base-dir",
default=os.path.join(buildconfig.topobjdir,
"dist", "bin"),
help="Store paths relative to this directory")
parser.add_argument("-C", metavar='DIR', default=".",
help="Change to given directory before considering "
"other paths")
parser.add_argument("zip", help="Path to zip file to write")
parser.add_argument("input", nargs="+",
help="Path to files to add to zip")
@ -30,12 +28,11 @@ def main(args):
jarrer = Jarrer(optimize=False)
with errors.accumulate():
finder = FileFinder(args.base_dir)
for i in args.input:
path = mozpath.relpath(i, args.base_dir)
finder = FileFinder(args.C)
for path in args.input:
for p, f in finder.find(path):
jarrer.add(p, f)
jarrer.copy(args.zip)
jarrer.copy(mozpath.join(args.C, args.zip))
if __name__ == '__main__':

398
python/mozbuild/mozbuild/artifacts.py

@ -0,0 +1,398 @@
# 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/.
'''
Fetch build artifacts from a Firefox tree.
This provides an (at-the-moment special purpose) interface to download Android
artifacts from Mozilla's Task Cluster.
This module performs the following steps:
* find a candidate hg parent revision using the local pushlog. The local
pushlog is maintained by mozext locally and updated on every pull.
* map the candidate parent to candidate Task Cluster tasks and artifact
locations. Pushlog entries might not correspond to tasks (yet), and those
tasks might not produce the desired class of artifacts.
* fetch fresh Task Cluster artifacts and purge old artifacts, using a simple
Least Recently Used cache.
The bulk of the complexity is in managing and persisting several caches. If
we found a Python LRU cache that pickled cleanly, we could remove a lot of
this code! Sadly, I found no such candidate implementations, so we pickle
pylru caches manually.
None of the instances (or the underlying caches) are safe for concurrent use.
A future need, perhaps.
This module requires certain modules be importable from the ambient Python
environment. |mach artifact| ensures these modules are available, but other
consumers will need to arrange this themselves.
'''
from __future__ import absolute_import, print_function, unicode_literals
import functools
import logging
import operator
import os
import pickle
import re
import shutil
import subprocess
import urlparse
import zipfile
import pylru
import taskcluster
from mozbuild.util import (
ensureParentDir,
FileAvoidWrite,
)
MAX_CACHED_PARENTS = 100 # Number of parent changesets to cache candidate pushheads for.
NUM_PUSHHEADS_TO_QUERY_PER_PARENT = 50 # Number of candidate pushheads to cache per parent changeset.
MAX_CACHED_TASKS = 400 # Number of pushheads to cache Task Cluster task data for.
# Number of downloaded artifacts to cache. Each artifact can be very large,
# so don't make this to large! TODO: make this a size (like 500 megs) rather than an artifact count.
MAX_CACHED_ARTIFACTS = 6
# TODO: handle multiple artifacts with the same filename.
# TODO: handle installing binaries from different types of artifacts (.tar.bz2, .dmg, etc).
# Keep the keys of this map in sync with the |mach artifact| --job options.
JOB_DETAILS = {
# 'android-api-9': {'re': re.compile('public/build/fennec-(.*)\.android-arm\.apk')},
'android-api-11': {'re': re.compile('public/build/geckolibs-(.*)\.aar')},
# 'linux': {'re': re.compile('public/build/firefox-(.*)\.linux-i686\.tar\.bz2')},
# 'linux64': {'re': re.compile('public/build/firefox-(.*)\.linux-x86_64\.tar\.bz2')},
# 'macosx64': {'re': re.compile('public/build/firefox-(.*)\.mac\.dmg')},
}
def cachedmethod(cachefunc):
'''Decorator to wrap a class or instance method with a memoizing callable that
saves results in a (possibly shared) cache.
'''
def decorator(method):
def wrapper(self, *args, **kwargs):
mapping = cachefunc(self)
if mapping is None:
return method(self, *args, **kwargs)
key = (method.__name__, args, tuple(sorted(kwargs.items())))
try:
value = mapping[key]
return value
except KeyError:
pass
result = method(self, *args, **kwargs)
mapping[key] = result
return result
return functools.update_wrapper(wrapper, method)
return decorator
class CacheManager(object):
'''Maintain an LRU cache. Provide simple persistence, including support for
loading and saving the state using a "with" block. Allow clearing the cache
and printing the cache for debugging.
Provide simple logging.
'''
def __init__(self, cache_dir, cache_name, cache_size, cache_callback=None, log=None):
self._cache = pylru.lrucache(cache_size, callback=cache_callback)
self._cache_filename = os.path.join(cache_dir, cache_name + '-cache.pickle')
self._log = log
def log(self, *args, **kwargs):
if self._log:
self._log(*args, **kwargs)
def load_cache(self):
try:
items = pickle.load(open(self._cache_filename, 'rb'))
for key, value in items:
self._cache[key] = value
except Exception as e:
# Corrupt cache, perhaps? Sadly, pickle raises many different
# exceptions, so it's not worth trying to be fine grained here.
# We ignore any exception, so the cache is effectively dropped.
self.log(logging.INFO, 'artifact',
{'filename': self._cache_filename, 'exception': repr(e)},
'Ignoring exception unpickling cache file {filename}: {exception}')
pass
def dump_cache(self):
ensureParentDir(self._cache_filename)
pickle.dump(list(reversed(list(self._cache.items()))), open(self._cache_filename, 'wb'), -1)
def clear_cache(self):
with self:
self._cache.clear()
def print_cache(self):
with self:
for item in self._cache.items():
self.log(logging.INFO, 'artifact',
{'item': item},
'{item}')
def print_last_item(self, args, sorted_kwargs, result):
# By default, show nothing.
pass
def print_last(self):
# We use the persisted LRU caches to our advantage. The first item is
# most recent.
with self:
item = next(self._cache.items(), None)
if item is not None:
(name, args, sorted_kwargs), result = item
self.print_last_item(args, sorted_kwargs, result)
else:
self.log(logging.WARN, 'artifact',
{},
'No last cached item found.')
def __enter__(self):
self.load_cache()
return self
def __exit__(self, type, value, traceback):
self.dump_cache()
class PushHeadCache(CacheManager):
'''Map parent hg revisions to candidate pushheads.'''
def __init__(self, hg, cache_dir, log=None):
# It's not unusual to pull hundreds of changesets at once, and perhaps
# |hg up| back and forth a few times.
CacheManager.__init__(self, cache_dir, 'pushheads', MAX_CACHED_PARENTS, log=log)
self._hg = hg
@cachedmethod(operator.attrgetter('_cache'))
def pushheads(self, tree, parent):
pushheads = subprocess.check_output([self._hg, 'log',
'--template', '{node}\n',
'-r', 'last(pushhead("{tree}") & ::"{parent}", {num})'.format(
tree=tree, parent=parent, num=NUM_PUSHHEADS_TO_QUERY_PER_PARENT)])
pushheads = pushheads.strip().split('\n')
return pushheads
class TaskCache(CacheManager):
'''Map candidate pushheads to Task Cluster task IDs and artifact URLs.'''
def __init__(self, cache_dir, log=None):
CacheManager.__init__(self, cache_dir, 'artifact_url', MAX_CACHED_TASKS, log=log)
self._index = taskcluster.Index()
self._queue = taskcluster.Queue()
@cachedmethod(operator.attrgetter('_cache'))
def artifact_url(self, tree, job, rev):
try:
artifact_re = JOB_DETAILS[job]['re']
except KeyError:
self.log(logging.INFO, 'artifact',
{'job': job},
'Unknown job {job}')
raise KeyError("Unknown job")
# Bug 1175655: it appears that the Task Cluster index only takes
# 12-char hex hashes.
key = '{rev}.{tree}.{job}'.format(rev=rev[:12], tree=tree, job=job)
try:
namespace = 'buildbot.revisions.{key}'.format(key=key)
task = self._index.findTask(namespace)
except Exception:
# Not all revisions correspond to pushes that produce the job we
# care about; and even those that do may not have completed yet.
raise ValueError('Task for {key} does not exist (yet)!'.format(key=key))
taskId = task['taskId']
# TODO: Make this not Android-only by matching a regular expression.
artifacts = self._queue.listLatestArtifacts(taskId)['artifacts']
def names():
for artifact in artifacts:
name = artifact['name']
if artifact_re.match(name):
yield name
# TODO: Handle multiple artifacts, taking the latest one.
for name in names():
# We can easily extract the task ID and the build ID from the URL.
url = self._queue.buildUrl('getLatestArtifact', taskId, name)
return url
raise ValueError('Task for {key} existed, but no artifacts found!'.format(key=key))
def print_last_item(self, args, sorted_kwargs, result):
tree, job, rev = args
self.log(logging.INFO, 'artifact',
{'rev': rev},
'Last installed binaries from hg parent revision {rev}')
class ArtifactCache(CacheManager):
'''Fetch Task Cluster artifact URLs and purge least recently used artifacts from disk.'''
def __init__(self, cache_dir, log=None):
# TODO: instead of storing N artifact packages, store M megabytes.
CacheManager.__init__(self, cache_dir, 'fetch', MAX_CACHED_ARTIFACTS, cache_callback=self.delete_file, log=log)
self._cache_dir = cache_dir
def delete_file(self, key, value):
try:
os.remove(value)
self.log(logging.INFO, 'artifact',
{'filename': value},
'Purged artifact {filename}')
except IOError:
pass
@cachedmethod(operator.attrgetter('_cache'))
def fetch(self, url, force=False):
args = ['wget', url]
if not force:
args[1:1] = ['--timestamping']
proc = subprocess.Popen(args, cwd=self._cache_dir)
status = None
# Leave it to the subprocess to handle Ctrl+C. If it terminates as
# a result of Ctrl+C, proc.wait() will return a status code, and,
# we get out of the loop. If it doesn't, like e.g. gdb, we continue
# waiting.
while status is None:
try:
status = proc.wait()
except KeyboardInterrupt:
pass
if status != 0:
raise Exception('Process executed with non-0 exit code: %s' % args)
return os.path.abspath(os.path.join(self._cache_dir, os.path.basename(url)))
def print_last_item(self, args, sorted_kwargs, result):
url, = args
self.log(logging.INFO, 'artifact',
{'url': url},
'Last installed binaries from url {url}')
self.log(logging.INFO, 'artifact',
{'filename': result},
'Last installed binaries from local file {filename}')
class Artifacts(object):
'''Maintain state to efficiently fetch build artifacts from a Firefox tree.'''
def __init__(self, tree, job, log=None, cache_dir='.', hg='hg'):
self._tree = tree
self._job = job
self._log = log
self._hg = hg
self._cache_dir = cache_dir
self._pushhead_cache = PushHeadCache(self._hg, self._cache_dir, log=self._log)
self._task_cache = TaskCache(self._cache_dir, log=self._log)
self._artifact_cache = ArtifactCache(self._cache_dir, log=self._log)
def log(self, *args, **kwargs):
if self._log:
self._log(*args, **kwargs)
def install_from_file(self, filename, distdir):
self.log(logging.INFO, 'artifact',
{'filename': filename},
'Installing from {filename}')
# Copy all .so files to dist/bin, avoiding modification where possible.
ensureParentDir(os.path.join(distdir, 'bin', '.dummy'))
with zipfile.ZipFile(filename) as zf:
for info in zf.infolist():
if not info.filename.endswith('.so'):
continue
n = os.path.join(distdir, 'bin', os.path.basename(info.filename))
fh = FileAvoidWrite(n, mode='r')
shutil.copyfileobj(zf.open(info), fh)
fh.write(zf.open(info).read())
file_existed, file_updated = fh.close()
self.log(logging.INFO, 'artifact',
{'updating': 'Updating' if file_updated else 'Not updating', 'filename': n},
'{updating} {filename}')
return 0
def install_from_url(self, url, distdir):
self.log(logging.INFO, 'artifact',
{'url': url},
'Installing from {url}')
with self._artifact_cache as artifact_cache: # The with block handles persistence.
filename = artifact_cache.fetch(url)
return self.install_from_file(filename, distdir)
def install_from_hg(self, revset, distdir):
if not revset:
revset = '.'
if len(revset) != 40:
revset = subprocess.check_output([self._hg, 'log', '--template', '{node}\n', '-r', revset]).strip()
if len(revset.split('\n')) != 1:
raise ValueError('hg revision specification must resolve to exactly one commit')
self.log(logging.INFO, 'artifact',
{'revset': revset},
'Installing from {revset}')
url = None
with self._task_cache as task_cache, self._pushhead_cache as pushhead_cache:
# with blocks handle handle persistence.
for pushhead in pushhead_cache.pushheads(self._tree, revset):
try:
url = task_cache.artifact_url(self._tree, self._job, pushhead)
break
except ValueError:
pass
if url:
return self.install_from_url(url, distdir)
return 1
def install_from(self, source, distdir):
if source and os.path.isfile(source):
return self.install_from_file(source, distdir)
elif source and urlparse.urlparse(source).scheme:
return self.install_from_url(source, distdir)
else:
return self.install_from_hg(source, distdir)
def print_last(self):
self.log(logging.INFO, 'artifact',
{},
'Printing last used artifact details.')
self._pushhead_cache.print_last()
self._task_cache.print_last()
self._artifact_cache.print_last()
def clear_cache(self):
self.log(logging.INFO, 'artifact',
{},
'Deleting cached artifacts and caches.')
self._pushhead_cache.clear_cache()
self._task_cache.clear_cache()
self._artifact_cache.clear_cache()
def print_cache(self):
self.log(logging.INFO, 'artifact',
{},
'Printing cached artifacts and caches.')
self._pushhead_cache.print_cache()
self._task_cache.print_cache()
self._artifact_cache.print_cache()

2
python/mozbuild/mozbuild/backend/android_eclipse.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import unicode_literals
from __future__ import absolute_import, unicode_literals
import itertools
import os

2
python/mozbuild/mozbuild/backend/base.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import unicode_literals
from __future__ import absolute_import, unicode_literals
from abc import (
ABCMeta,

27
python/mozbuild/mozbuild/backend/common.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import unicode_literals
from __future__ import absolute_import, unicode_literals
import itertools
import json
@ -45,29 +45,39 @@ class XPIDLManager(object):
self.idls = {}
self.modules = {}
self.interface_manifests = {}
self.chrome_manifests = set()
def register_idl(self, source, module, install_target, allow_existing=False):
def register_idl(self, idl, allow_existing=False):
"""Registers an IDL file with this instance.
The IDL file will be built, installed, etc.
"""
basename = mozpath.basename(source)
basename = mozpath.basename(idl.source_path)
root = mozpath.splitext(basename)[0]
xpt = '%s.xpt' % idl.module
manifest = mozpath.join(idl.install_target, 'components', 'interfaces.manifest')
chrome_manifest = mozpath.join(idl.install_target, 'chrome.manifest')
entry = {
'source': source,
'module': module,
'source': idl.source_path,
'module': idl.module,
'basename': basename,
'root': root,
'manifest': manifest,
}
if not allow_existing and entry['basename'] in self.idls:
raise Exception('IDL already registered: %' % entry['basename'])
raise Exception('IDL already registered: %s' % entry['basename'])
self.idls[entry['basename']] = entry
t = self.modules.setdefault(entry['module'], (install_target, set()))
t = self.modules.setdefault(entry['module'], (idl.install_target, set()))
t[1].add(entry['root'])
if idl.add_to_manifest:
self.interface_manifests.setdefault(manifest, set()).add(xpt)
self.chrome_manifests.add(chrome_manifest)
class WebIDLCollection(object):
"""Collects WebIDL info referenced during the build."""
@ -190,8 +200,7 @@ class CommonBackend(BuildBackend):
topsrcdir=obj.topsrcdir)
elif isinstance(obj, XPIDLFile):
self._idl_manager.register_idl(obj.source_path, obj.module,
obj.install_target)
self._idl_manager.register_idl(obj)
elif isinstance(obj, ConfigFileSubstitution):
# Do not handle ConfigFileSubstitution for Makefiles. Leave that

2
python/mozbuild/mozbuild/backend/configenvironment.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import os
import sys

2
python/mozbuild/mozbuild/backend/cpp_eclipse.py

@ -2,6 +2,8 @@
# 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/.
from __future__ import absolute_import
import errno
import random
import os

197
python/mozbuild/mozbuild/backend/recursivemake.py

@ -2,7 +2,7 @@
# 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/.
from __future__ import unicode_literals
from __future__ import absolute_import, unicode_literals
import logging
import os
@ -14,6 +14,7 @@ from collections import (
namedtuple,
)
from StringIO import StringIO
from itertools import chain
from reftest import ReftestManifest
@ -69,79 +70,89 @@ from ..util import (
from ..makeutil import Makefile
MOZBUILD_VARIABLES = [
'ANDROID_GENERATED_RESFILES',