diff --git a/browser/base/moz.build b/browser/base/moz.build index e81e45c23f..d2903798bb 100644 --- a/browser/base/moz.build +++ b/browser/base/moz.build @@ -4,6 +4,10 @@ # 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/. +BROWSER_CHROME_MANIFESTS += [ + 'content/test/referrer/browser.ini', +] + DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR @@ -17,4 +21,4 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'): if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'): DEFINES['MENUBAR_CAN_AUTOHIDE'] = 1 -JAR_MANIFESTS += ['jar.mn'] \ No newline at end of file +JAR_MANIFESTS += ['jar.mn'] diff --git a/build/stlport/Makefile.in b/build/stlport/Makefile.in index bf071bfbf3..ca11f30788 100644 --- a/build/stlport/Makefile.in +++ b/build/stlport/Makefile.in @@ -4,10 +4,6 @@ MODULES = stlport -# Force to build a static library, instead of a fake library, without -# installing it in dist/lib. -NO_EXPAND_LIBS = 1 - include $(topsrcdir)/config/rules.mk CXXFLAGS += -fuse-cxa-atexit diff --git a/build/stlport/moz.build b/build/stlport/moz.build index 72c8eb4cd5..be23c3d8e3 100644 --- a/build/stlport/moz.build +++ b/build/stlport/moz.build @@ -65,3 +65,7 @@ if CONFIG['GNU_CXX']: '-Wno-type-limits', '-Wno-unused-local-typedefs', ] + +# Force to build a static library, instead of a fake library, without +# installing it in dist/lib. +NO_EXPAND_LIBS = True diff --git a/build/unix/elfhack/inject/moz.build b/build/unix/elfhack/inject/moz.build index d0edb3ae77..f13c1e24cb 100644 --- a/build/unix/elfhack/inject/moz.build +++ b/build/unix/elfhack/inject/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['TARGET_CPU'].endswith('86'): cpu = 'x86' diff --git a/build/unix/elfhack/moz.build b/build/unix/elfhack/moz.build index e5cdae5ecb..95b5839196 100644 --- a/build/unix/elfhack/moz.build +++ b/build/unix/elfhack/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False DIRS += ['inject'] if not CONFIG['CROSS_COMPILE']: diff --git a/config/config.mk b/config/config.mk index deb4edbbb2..77675cc512 100644 --- a/config/config.mk +++ b/config/config.mk @@ -200,7 +200,14 @@ ifneq (,$(MOZ_DEBUG)$(MOZ_DEBUG_SYMBOLS)) _DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS) endif +ifeq ($(YASM),$(AS)) +# yasm doesn't like the GNU as flags we may already have in ASFLAGS, so reset. +ASFLAGS := $(_DEBUG_ASFLAGS) +# yasm doesn't like -c +AS_DASH_C_FLAG= +else ASFLAGS += $(_DEBUG_ASFLAGS) +endif OS_CFLAGS += $(_DEBUG_CFLAGS) OS_CXXFLAGS += $(_DEBUG_CFLAGS) OS_LDFLAGS += $(_DEBUG_LDFLAGS) @@ -448,7 +455,7 @@ COMPILE_CFLAGS = $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO COMPILE_CXXFLAGS = $(if $(DISABLE_STL_WRAPPING),,$(STL_FLAGS)) $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CXXFLAGS) $(CXXFLAGS) $(MOZBUILD_CXXFLAGS) $(EXTRA_COMPILE_FLAGS) COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS) $(EXTRA_COMPILE_FLAGS) COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS) $(EXTRA_COMPILE_FLAGS) -ASFLAGS += $(EXTRA_ASSEMBLER_FLAGS) +ASFLAGS += $(MOZBUILD_ASFLAGS) $(EXTRA_ASSEMBLER_FLAGS) ifndef CROSS_COMPILE HOST_CFLAGS += $(RTL_FLAGS) diff --git a/config/moz.build b/config/moz.build index 76f99bdd6e..dbf819cb98 100644 --- a/config/moz.build +++ b/config/moz.build @@ -7,7 +7,7 @@ with Files('**'): BUG_COMPONENT = ('Core', 'Build Config') -NO_DIST_INSTALL = True +DIST_INSTALL = False # For sanity's sake, we compile nsinstall without the wrapped system # headers, so that we can use it to set up the wrapped system headers. NO_VISIBILITY_FLAGS = True diff --git a/configure.in b/configure.in index ab096ecefd..11b824279c 100644 --- a/configure.in +++ b/configure.in @@ -3866,7 +3866,6 @@ MOZ_WEBSPEECH=1 MOZ_JXR=1 VPX_AS= VPX_ASFLAGS= -VPX_AS_DASH_C_FLAG= VPX_AS_CONVERSION= VPX_ASM_SUFFIX= VPX_X86_ASM= @@ -5124,11 +5123,12 @@ fi; dnl ======================================================== dnl = Apple platform decoder support dnl ======================================================== -if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then - MOZ_APPLEMEDIA=1 -fi +MOZ_ARG_DISABLE_BOOL(applemedia, +[ --disable-applemedia Disable support for AppleMedia (Cocoa only)], + MOZ_APPLEMEDIA=, + MOZ_APPLEMEDIA=1) -if test -n "$MOZ_APPLEMEDIA"; then +if test -n "$MOZ_WIDGET_TOOLKIT" = "cocoa" && test -n "$MOZ_APPLEMEDIA"; then AC_DEFINE(MOZ_APPLEMEDIA) # hack in frameworks for fmp4 - see bug 1029974 # We load VideoToolbox and CoreMedia dynamically, so they don't appear here. @@ -5369,7 +5369,6 @@ if test -n "$MOZ_VPX" -a -z "$MOZ_NATIVE_LIBVPX"; then dnl These flags are a lie; they're just used to enable the requisite dnl opcodes; actual arch detection is done at runtime. VPX_ASFLAGS="-march=armv7-a -mfpu=neon" - VPX_DASH_C_FLAG="-c" VPX_AS_CONVERSION='$(PERL) $(topsrcdir)/media/libvpx/build/make/ads2gas.pl' VPX_ASM_SUFFIX="$ASM_SUFFIX" VPX_ARM_ASM=1 @@ -8540,8 +8539,7 @@ AC_SUBST(MOZ_OMX_PLUGIN) AC_SUBST(MOZ_VPX_ERROR_CONCEALMENT) AC_SUBST(MOZ_VPX) AC_SUBST(VPX_AS) -AC_SUBST(VPX_ASFLAGS) -AC_SUBST(VPX_DASH_C_FLAG) +AC_SUBST_LIST(VPX_ASFLAGS) AC_SUBST(VPX_AS_CONVERSION) AC_SUBST(VPX_ASM_SUFFIX) AC_SUBST(VPX_X86_ASM) @@ -8550,7 +8548,7 @@ AC_SUBST(VPX_NEED_OBJ_INT_EXTRACT) AC_SUBST(MOZ_INSTRUMENT_EVENT_LOOP) AC_SUBST(MOZ_CODE_COVERAGE) AC_SUBST(LIBJPEG_TURBO_AS) -AC_SUBST(LIBJPEG_TURBO_ASFLAGS) +AC_SUBST_LIST(LIBJPEG_TURBO_ASFLAGS) AC_SUBST(LIBJPEG_TURBO_X86_ASM) AC_SUBST(LIBJPEG_TURBO_X64_ASM) AC_SUBST(LIBJPEG_TURBO_ARM_ASM) diff --git a/dom/media/gmp-plugin/moz.build b/dom/media/gmp-plugin/moz.build index 507469f4db..b089c45a3c 100644 --- a/dom/media/gmp-plugin/moz.build +++ b/dom/media/gmp-plugin/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False SOURCES += [ 'gmp-fake.cpp', 'gmp-test-decryptor.cpp', diff --git a/dom/plugins/ipc/interpose/Makefile.in b/dom/plugins/ipc/interpose/Makefile.in index 7e9f1b3706..a54efe4ae1 100644 --- a/dom/plugins/ipc/interpose/Makefile.in +++ b/dom/plugins/ipc/interpose/Makefile.in @@ -2,4 +2,4 @@ # 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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 diff --git a/dom/plugins/ipc/interpose/moz.build b/dom/plugins/ipc/interpose/moz.build index a8b6031655..974dccfd00 100644 --- a/dom/plugins/ipc/interpose/moz.build +++ b/dom/plugins/ipc/interpose/moz.build @@ -15,3 +15,5 @@ UNIFIED_SOURCES += [ OS_LIBS += ['-framework Carbon'] FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/dom/plugins/test/testplugin/testplugin.mozbuild b/dom/plugins/test/testplugin/testplugin.mozbuild index 78d752f275..c99fc6d0a6 100644 --- a/dom/plugins/test/testplugin/testplugin.mozbuild +++ b/dom/plugins/test/testplugin/testplugin.mozbuild @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False UNIFIED_SOURCES += [ '%s/%s' % (relative_path, p) for p in [ 'nptest.cpp', diff --git a/intl/unicharutil/util/Makefile.in b/intl/unicharutil/util/Makefile.in index 1dc01962fb..0ce0c50b55 100644 --- a/intl/unicharutil/util/Makefile.in +++ b/intl/unicharutil/util/Makefile.in @@ -7,4 +7,4 @@ # by frozen (dependent) linkage components. Internal-linkage code should use # unicharutil_s which is built in the internal/ subdirectory. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 diff --git a/intl/unicharutil/util/internal/Makefile.in b/intl/unicharutil/util/internal/Makefile.in index facde1e53e..04a39b16e0 100644 --- a/intl/unicharutil/util/internal/Makefile.in +++ b/intl/unicharutil/util/internal/Makefile.in @@ -3,12 +3,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/. -# This makefile builds the version of unicharutils_s static library which uses -# internal linkage. Components that use frozen (external) linkage should use -# unicharutil_external_s. - ifdef ENABLE_INTL_API LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS) endif - -DIST_INSTALL = 1 diff --git a/intl/unicharutil/util/internal/moz.build b/intl/unicharutil/util/internal/moz.build index dc58fe1840..a7a99d6419 100644 --- a/intl/unicharutil/util/internal/moz.build +++ b/intl/unicharutil/util/internal/moz.build @@ -4,6 +4,10 @@ # 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/. +# This file builds the version of unicharutils_s static library which uses +# internal linkage. Components that use frozen (external) linkage should use +# unicharutil_external_s. + include('../objs.mozbuild') UNIFIED_SOURCES += intl_unicharutil_util_cppsrcs @@ -15,3 +19,5 @@ LOCAL_INCLUDES += [ ] FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/intl/unicharutil/util/moz.build b/intl/unicharutil/util/moz.build index 1c07ef047a..b0cadc629d 100644 --- a/intl/unicharutil/util/moz.build +++ b/intl/unicharutil/util/moz.build @@ -4,6 +4,10 @@ # 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/. +# This file builds the version of unicharutils_s static library which uses +# internal linkage. Components that use frozen (external) linkage should use +# unicharutil_external_s. + DIRS += ['internal'] EXPORTS += [ @@ -40,3 +44,5 @@ if CONFIG['ENABLE_INTL_API']: if CONFIG['GNU_CXX']: FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build index 60d9493bf7..f44b7517e1 100644 --- a/ipc/chromium/moz.build +++ b/ipc/chromium/moz.build @@ -248,7 +248,7 @@ if os_bsd: LOCAL_INCLUDES += ['src/third_party/libevent/bsd'] ost = CONFIG['OS_TEST'] -if ost.find('86') == -1 and ost.find('arm') == -1 and ost.find('mips') == -1: +if '86' not in ost and 'arm' not in ost and 'mips' not in ost: SOURCES += [ 'src/base/atomicops_internals_mutex.cc', ] diff --git a/js/src/Makefile.in b/js/src/Makefile.in index 8a7339ae62..f5c67a31d0 100644 --- a/js/src/Makefile.in +++ b/js/src/Makefile.in @@ -16,9 +16,6 @@ TOPLEVEL_BUILD := 1 run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') -DIST_INSTALL = 1 -NO_EXPAND_LIBS = 1 - ifdef JS_HAS_CTYPES ifdef MOZ_NATIVE_FFI LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) diff --git a/js/src/moz.build b/js/src/moz.build index 173204fa4e..d99a8e0022 100644 --- a/js/src/moz.build +++ b/js/src/moz.build @@ -525,3 +525,7 @@ if CONFIG['OS_ARCH'] == 'SunOS': if CONFIG['GNU_CXX']: FAIL_ON_WARNINGS = True + +NO_EXPAND_LIBS = True + +DIST_INSTALL = True diff --git a/js/xpconnect/tests/components/js/moz.build b/js/xpconnect/tests/components/js/moz.build index b79124b6db..8396314449 100644 --- a/js/xpconnect/tests/components/js/moz.build +++ b/js/xpconnect/tests/components/js/moz.build @@ -3,4 +3,4 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False diff --git a/js/xpconnect/tests/components/native/moz.build b/js/xpconnect/tests/components/native/moz.build index e0a444369c..8a25f97212 100644 --- a/js/xpconnect/tests/components/native/moz.build +++ b/js/xpconnect/tests/components/native/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False UNIFIED_SOURCES += [ 'xpctest_attributes.cpp', diff --git a/media/libjpeg/Makefile.in b/media/libjpeg/Makefile.in index f746487512..fb8451efc4 100644 --- a/media/libjpeg/Makefile.in +++ b/media/libjpeg/Makefile.in @@ -5,12 +5,6 @@ AS=$(LIBJPEG_TURBO_AS) ASM_SUFFIX=asm -ASFLAGS=$(LIBJPEG_TURBO_ASFLAGS) -I$(topsrcdir)/media/libjpeg/simd/ - -ifeq ($(AS),yasm) - # yasm doesn't like -c - AS_DASH_C_FLAG= -endif include $(topsrcdir)/config/rules.mk diff --git a/media/libjpeg/moz.build b/media/libjpeg/moz.build index 7dce7aa01a..d5382454bb 100644 --- a/media/libjpeg/moz.build +++ b/media/libjpeg/moz.build @@ -154,6 +154,9 @@ else: # No SIMD support? MSVC_ENABLE_PGO = True +ASFLAGS += CONFIG['LIBJPEG_TURBO_ASFLAGS'] +ASFLAGS += ['-I%s/media/libjpeg/simd/' % TOPSRCDIR] + if CONFIG['GKMEDIAS_SHARED_LIBRARY']: NO_VISIBILITY_FLAGS = True diff --git a/media/libopus/Makefile.in b/media/libopus/Makefile.in index 8f3be966d0..f3b86990f5 100644 --- a/media/libopus/Makefile.in +++ b/media/libopus/Makefile.in @@ -7,10 +7,6 @@ include $(topsrcdir)/config/rules.mk ifdef GNU_AS ifeq ($(CPU_ARCH),arm) -# These flags are a lie; they're just used to enable the requisite -# opcodes; actual arch detection is done at runtime. -ASFLAGS = -march=armv7-a -mfpu=neon - celt_pitch_xcorr_arm-gnu.$(ASM_SUFFIX): celt/arm/armopts-gnu.S # armopts needs a specific rule, because arm2gnu.pl will always add the .S diff --git a/media/libopus/moz.build b/media/libopus/moz.build index 70c9dd75de..e17a73b93c 100644 --- a/media/libopus/moz.build +++ b/media/libopus/moz.build @@ -92,12 +92,18 @@ if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_AS']: ]] # -Os is significantly slower, enable -O3 unless optimization is disabled if CONFIG['MOZ_OPTIMIZE']: - CFLAGS += [ - '-O3', - ] - CXXFLAGS += [ - '-O3', - ] + CFLAGS += [ + '-O3', + ] + CXXFLAGS += [ + '-O3', + ] + # These flags are a lie; they're just used to enable the requisite + # opcodes; actual arch detection is done at runtime. + ASFLAGS += [ + '-march=armv7-a', + '-mfpu=neon', + ] # Suppress warnings in third-party code. if CONFIG['GNU_CC']: diff --git a/media/libtheora/Makefile.in b/media/libtheora/Makefile.in index a41846f736..623f85f297 100644 --- a/media/libtheora/Makefile.in +++ b/media/libtheora/Makefile.in @@ -6,10 +6,6 @@ ifdef GNU_AS ifeq ($(CPU_ARCH),arm) -# These flags are a lie; they're just used to enable the requisite -# opcodes; actual arch detection is done at runtime. -ASFLAGS = -march=armv7-a -mfpu=neon - armfrag-gnu.$(ASM_SUFFIX): armopts-gnu.S armidct-gnu.$(ASM_SUFFIX): armopts-gnu.S armloop-gnu.$(ASM_SUFFIX): armopts-gnu.S diff --git a/media/libtheora/moz.build b/media/libtheora/moz.build index 855577f4ee..03ea10b32c 100644 --- a/media/libtheora/moz.build +++ b/media/libtheora/moz.build @@ -44,14 +44,6 @@ UNIFIED_SOURCES += [ LOCAL_INCLUDES += ['include'] -if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_AS']: - GENERATED_SOURCES += [ '%s.%s' % (f, CONFIG['ASM_SUFFIX']) for f in [ - 'armbits-gnu', - 'armfrag-gnu', - 'armidct-gnu', - 'armloop-gnu', - ]] - if '86' in CONFIG['OS_TEST']: if CONFIG['OS_ARCH'] != 'SunOS': if CONFIG['OS_ARCH'] != 'WINNT' or CONFIG['OS_TEST'] != 'x86_64': @@ -93,3 +85,16 @@ if CONFIG['GNU_AS']: if CONFIG['OS_TARGET'] == 'Android': DEFINES['__linux__'] = True + GENERATED_SOURCES += [ '%s.%s' % (f, CONFIG['ASM_SUFFIX']) for f in [ + 'armbits-gnu', + 'armfrag-gnu', + 'armidct-gnu', + 'armloop-gnu', + ]] + + # These flags are a lie; they're just used to enable the requisite + # opcodes; actual arch detection is done at runtime. + ASFLAGS += [ + '-march=armv7-a', + '-mfpu=neon', + ] diff --git a/media/libvpx/Makefile.in b/media/libvpx/Makefile.in index 7865c1b2b1..4a236b1ae9 100644 --- a/media/libvpx/Makefile.in +++ b/media/libvpx/Makefile.in @@ -5,19 +5,12 @@ # Set up the libvpx assembler config. AS=$(VPX_AS) -ASFLAGS=$(VPX_ASFLAGS) -I. -I$(topsrcdir)/media/libvpx/ -I$(topsrcdir)/media/libvpx/vpx_ports/ -AS_DASH_C_FLAG=$(VPX_DASH_C_FLAG) ASM_SUFFIX=$(VPX_ASM_SUFFIX) ifdef VPX_ARM_ASM # Building on an ARM platform with a supported assembler, include # the optimized assembly in the build. -ifeq ($(OS_TARGET),Android) -# For cpu-features.h -LOCAL_INCLUDES += -I$(ANDROID_NDK)/sources/android/cpufeatures -endif - ifdef VPX_AS_CONVERSION # The ARM asm is written in ARM RVCT syntax, but we actually build it with # gas using GNU syntax. Add some rules to perform the conversion. diff --git a/media/libvpx/moz.build b/media/libvpx/moz.build index 96efb38b51..e000ad8414 100644 --- a/media/libvpx/moz.build +++ b/media/libvpx/moz.build @@ -84,6 +84,13 @@ if CONFIG['CLANG_CL'] or not CONFIG['_MSC_VER']: if CONFIG['GNU_CC']: CFLAGS += ['-Wno-sign-compare'] +ASFLAGS += CONFIG['VPX_ASFLAGS'] +ASFLAGS += [ + '-I.', + '-I%s/media/libvpx/' % TOPSRCDIR, + '-I%s/media/libvpx/vpx_ports/' % TOPSRCDIR, +] + if CONFIG['OS_TARGET'] == 'Android': # For LIBVPX_RAND ASFLAGS += [ diff --git a/media/omx-plugin/lib/gb/libstagefright/moz.build b/media/omx-plugin/lib/gb/libstagefright/moz.build index b62d07cb45..540afa93c9 100644 --- a/media/omx-plugin/lib/gb/libstagefright/moz.build +++ b/media/omx-plugin/lib/gb/libstagefright/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/gb/libstagefright_color_conversion/moz.build b/media/omx-plugin/lib/gb/libstagefright_color_conversion/moz.build index f33a9a3910..a1b7a2a177 100644 --- a/media/omx-plugin/lib/gb/libstagefright_color_conversion/moz.build +++ b/media/omx-plugin/lib/gb/libstagefright_color_conversion/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/gb/libutils/moz.build b/media/omx-plugin/lib/gb/libutils/moz.build index 92a0da85e9..a35b879c04 100644 --- a/media/omx-plugin/lib/gb/libutils/moz.build +++ b/media/omx-plugin/lib/gb/libutils/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/gb235/libstagefright/moz.build b/media/omx-plugin/lib/gb235/libstagefright/moz.build index b62d07cb45..540afa93c9 100644 --- a/media/omx-plugin/lib/gb235/libstagefright/moz.build +++ b/media/omx-plugin/lib/gb235/libstagefright/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/hc/libstagefright/moz.build b/media/omx-plugin/lib/hc/libstagefright/moz.build index b62d07cb45..540afa93c9 100644 --- a/media/omx-plugin/lib/hc/libstagefright/moz.build +++ b/media/omx-plugin/lib/hc/libstagefright/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/ics/libstagefright/moz.build b/media/omx-plugin/lib/ics/libstagefright/moz.build index 0205f59899..52f5173ab1 100644 --- a/media/omx-plugin/lib/ics/libstagefright/moz.build +++ b/media/omx-plugin/lib/ics/libstagefright/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/ics/libutils/moz.build b/media/omx-plugin/lib/ics/libutils/moz.build index 9db6a88da4..7bea17b137 100644 --- a/media/omx-plugin/lib/ics/libutils/moz.build +++ b/media/omx-plugin/lib/ics/libutils/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/media/omx-plugin/lib/ics/libvideoeditorplayer/moz.build b/media/omx-plugin/lib/ics/libvideoeditorplayer/moz.build index 09eb917907..7b162638fe 100644 --- a/media/omx-plugin/lib/ics/libvideoeditorplayer/moz.build +++ b/media/omx-plugin/lib/ics/libvideoeditorplayer/moz.build @@ -3,7 +3,7 @@ # 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_DIST_INSTALL = True +DIST_INSTALL = False if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk': SOURCES += [ diff --git a/memory/build/Makefile.in b/memory/build/Makefile.in index bf221dcf23..32a2bcac3a 100644 --- a/memory/build/Makefile.in +++ b/memory/build/Makefile.in @@ -3,6 +3,3 @@ # You can obtain one at http://mozilla.org/MPL/2.0/. STLFLAGS = -ifdef MOZ_GLUE_IN_PROGRAM -DIST_INSTALL = 1 -endif diff --git a/memory/build/moz.build b/memory/build/moz.build index 5945470a22..250ccb6af4 100644 --- a/memory/build/moz.build +++ b/memory/build/moz.build @@ -52,6 +52,7 @@ else: if CONFIG['MOZ_GLUE_IN_PROGRAM']: SDK_LIBRARY = True + DIST_INSTALL = True # Keep jemalloc separated when mozglue is statically linked if CONFIG['MOZ_MEMORY'] and (CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android') or diff --git a/memory/mozalloc/Makefile.in b/memory/mozalloc/Makefile.in index 869c3e3fe8..ca8a0fe13e 100644 --- a/memory/mozalloc/Makefile.in +++ b/memory/mozalloc/Makefile.in @@ -3,4 +3,4 @@ # 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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 diff --git a/memory/mozalloc/moz.build b/memory/mozalloc/moz.build index 7ab4ef038f..5e84562cbf 100644 --- a/memory/mozalloc/moz.build +++ b/memory/mozalloc/moz.build @@ -53,3 +53,5 @@ DISABLE_STL_WRAPPING = True if CONFIG['CLANG_CXX'] or CONFIG['_MSC_VER']: FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/mozglue/build/Makefile.in b/mozglue/build/Makefile.in index ff04bcf62c..d864429028 100644 --- a/mozglue/build/Makefile.in +++ b/mozglue/build/Makefile.in @@ -3,8 +3,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/. -DIST_INSTALL = 1 - # For FORCE_SHARED_LIB include $(topsrcdir)/config/config.mk diff --git a/mozglue/build/moz.build b/mozglue/build/moz.build index a75356f38d..ee1caa01d7 100644 --- a/mozglue/build/moz.build +++ b/mozglue/build/moz.build @@ -88,3 +88,5 @@ LDFLAGS += CONFIG['MOZ_GLUE_WRAP_LDFLAGS'] if not CONFIG['_MSC_VER']: FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/mozglue/linker/tests/moz.build b/mozglue/linker/tests/moz.build index a42f3c9505..f0421b33f3 100644 --- a/mozglue/linker/tests/moz.build +++ b/mozglue/linker/tests/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False SimplePrograms([ 'TestZip', diff --git a/python/mozbuild/mozbuild/action/file_generate.py b/python/mozbuild/mozbuild/action/file_generate.py index bddf9dbc53..6708bf1f36 100644 --- a/python/mozbuild/mozbuild/action/file_generate.py +++ b/python/mozbuild/mozbuild/action/file_generate.py @@ -20,6 +20,8 @@ def main(argv): add_help=False) parser.add_argument('python_script', metavar='python-script', type=str, help='The Python script to run') + parser.add_argument('method_name', metavar='method-name', type=str, + help='The method of the script to invoke') parser.add_argument('output_file', metavar='output-file', type=str, help='The file to generate') parser.add_argument('additional_arguments', metavar='arg', nargs='*', @@ -31,15 +33,16 @@ def main(argv): with open(script, 'r') as fh: module = imp.load_module('script', fh, script, ('.py', 'r', imp.PY_SOURCE)) - if not hasattr(module, 'main'): - print('Error: script "{0}" is missing a main method'.format(script), + method = args.method_name + if not hasattr(module, method): + print('Error: script "{0}" is missing a {1} method'.format(script, method), file=sys.stderr) return 1 ret = 1 try: with FileAvoidWrite(args.output_file) as output: - ret = module.main(output, *args.additional_arguments) + ret = module.__dict__[method](output, *args.additional_arguments) except IOError as e: print('Error opening file "{0}"'.format(e.filename), file=sys.stderr) traceback.print_exc() diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py index a1c44611ff..48c8331dc6 100644 --- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py @@ -69,6 +69,77 @@ from ..util import ( ) from ..makeutil import Makefile +MOZBUILD_VARIABLES = [ + 'ANDROID_GENERATED_RESFILES', + 'ANDROID_RES_DIRS', + 'ASFLAGS', + 'CMSRCS', + 'CMMSRCS', + 'CPP_UNIT_TESTS', + 'DIRS', + 'DIST_INSTALL', + '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', + 'NO_EXPAND_LIBS', + '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. @@ -411,11 +482,12 @@ class RecursiveMakeBackend(CommonBackend): backend_file.write('GENERATED_FILES += %s\n' % obj.output) if obj.script: backend_file.write("""{output}: {script}{inputs} -\t$(call py_action,file_generate,{script} {output}{inputs}) +\t$(call py_action,file_generate,{script} {method} {output}{inputs}) """.format(output=obj.output, inputs=' ' + ' '.join(obj.inputs) if obj.inputs else '', - script=obj.script)) + script=obj.script, + method=obj.method)) elif isinstance(obj, TestHarnessFiles): self._process_test_harness_files(obj, backend_file) @@ -627,6 +699,18 @@ class RecursiveMakeBackend(CommonBackend): 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) @@ -674,6 +758,10 @@ class RecursiveMakeBackend(CommonBackend): 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 @@ -1114,6 +1202,8 @@ INSTALL_TARGETS += %(prefix)s backend_file.write('REAL_LIBRARY := %s\n' % libdef.lib_name) if libdef.is_sdk: backend_file.write('SDK_LIBRARY := %s\n' % libdef.import_name) + if libdef.no_expand_lib: + backend_file.write('NO_EXPAND_LIBS := 1\n') def _process_host_library(self, libdef, backend_file): backend_file.write('HOST_LIBRARY_NAME = %s\n' % libdef.basename) diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py index cb96b77c19..378acbc5a4 100644 --- a/python/mozbuild/mozbuild/frontend/context.py +++ b/python/mozbuild/mozbuild/frontend/context.py @@ -268,6 +268,10 @@ class Context(KeyedDefaultDict): class TemplateContext(Context): + def __init__(self, template=None, allowed_variables={}, config=None): + self.template = template + super(TemplateContext, self).__init__(allowed_variables, config) + def _validate(self, key, value): return Context._validate(self, key, value, True) @@ -314,6 +318,21 @@ class FinalTargetValue(ContextDerivedValue, unicode): return unicode.__new__(cls, value) +def Enum(*values): + assert len(values) + default = values[0] + + class EnumClass(object): + def __new__(cls, value=None): + if value is None: + return default + if value in values: + return value + raise ValueError('Invalid value. Allowed values are: %s' + % ', '.join(repr(v) for v in values)) + return EnumClass + + class SourcePath(ContextDerivedValue, UserString): """Stores and resolves a source path relative to a given context @@ -628,6 +647,14 @@ VARIABLES = { supported for passing to scripts, and that all arguments provided to the script should be filenames relative to the directory in which the moz.build file is located. + + To enable using the same script for generating multiple files with + slightly different non-filename parameters, alternative entry points + into ``script`` can be specified:: + + GENERATED_FILES += ['bar.c'] + bar = GENERATED_FILES['bar.c'] + bar.script = 'generate.py:make_bar' """, 'export'), 'DEFINES': (OrderedDict, dict, @@ -1073,11 +1100,17 @@ VARIABLES = { ends with ``HOST_BIN_SUFFIX``, ``HOST_PROGRAM`` will remain unchanged. """, None), - 'NO_DIST_INSTALL': (bool, bool, - """Disable installing certain files into the distribution directory. + 'DIST_INSTALL': (Enum(None, False, True), bool, + """Whether to install certain files into the dist directory. - If present, some files defined by other variables won't be - distributed/shipped with the produced build. + By default, some files types are installed in the dist directory, and + some aren't. Set this variable to True to force the installation of + some files that wouldn't be installed by default. Set this variable to + False to force to not install some files that would be installed by + default. + + This is confusing for historical reasons, but eventually, the behavior + will be made explicit. """, None), 'JAR_MANIFESTS': (StrictOrderingOnAppendList, list, @@ -1318,6 +1351,15 @@ VARIABLES = { appear in the moz.build file. """, None), + 'ASFLAGS': (List, list, + """Flags passed to the assembler for all of the assembly source files + declared in this directory. + + Note that the ordering of flags matters here; these flags will be + added to the assembler's command line in the same order as they + appear in the moz.build file. + """, None), + 'LDFLAGS': (List, list, """Flags passed to the linker when linking all of the libraries and executables declared in this directory. @@ -1360,6 +1402,11 @@ VARIABLES = { the path(s) with a '/' character and a '!' character, respectively:: TEST_HARNESS_FILES.path += ['/build/bar.py', '!quux.py'] """, 'libs'), + + 'NO_EXPAND_LIBS': (bool, bool, + """Forces to build a real static library, and no corresponding fake + library. + """, None), } # Sanity check: we don't want any variable above to have a list as storage type. @@ -1728,6 +1775,16 @@ DEPRECATION_HINTS = { 'TEST_TOOL_DIRS': 'Please use the TEST_DIRS variable instead.', 'PARALLEL_DIRS': 'Please use the DIRS variable instead.', + + 'NO_DIST_INSTALL': ''' + Please use + + DIST_INSTALL = False + + instead of + + NO_DIST_INSTALL = True + ''', } # Make sure that all template variables have a deprecation hint. diff --git a/python/mozbuild/mozbuild/frontend/data.py b/python/mozbuild/mozbuild/frontend/data.py index 5ecefec2b3..a9c87bd35c 100644 --- a/python/mozbuild/mozbuild/frontend/data.py +++ b/python/mozbuild/mozbuild/frontend/data.py @@ -502,12 +502,14 @@ class StaticLibrary(Library): """Context derived container object for a static library""" __slots__ = ( 'link_into', + 'no_expand_lib', ) def __init__(self, context, basename, real_name=None, is_sdk=False, - link_into=None): + link_into=None, no_expand_lib=False): Library.__init__(self, context, basename, real_name, is_sdk) self.link_into = link_into + self.no_expand_lib = no_expand_lib class SharedLibrary(Library): @@ -840,7 +842,7 @@ class InstallationTarget(ContextDerived): self.xpiname = context.get('XPI_NAME', '') self.subdir = context.get('DIST_SUBDIR', '') self.target = context['FINAL_TARGET'] - self.enabled = not context.get('NO_DIST_INSTALL', False) + self.enabled = context['DIST_INSTALL'] is not False def is_custom(self): """Returns whether or not the target is not derived from the default @@ -872,13 +874,15 @@ class GeneratedFile(ContextDerived): __slots__ = ( 'script', + 'method', 'output', 'inputs', ) - def __init__(self, context, script, output, inputs): + def __init__(self, context, script, method, output, inputs): ContextDerived.__init__(self, context) self.script = script + self.method = method self.output = output self.inputs = inputs diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py index a43504fc53..1c48ad2d13 100644 --- a/python/mozbuild/mozbuild/frontend/emitter.py +++ b/python/mozbuild/mozbuild/frontend/emitter.py @@ -78,6 +78,7 @@ from .reader import SandboxValidationError from .context import ( Context, SubContext, + TemplateContext, ) @@ -354,334 +355,7 @@ class TreeMetadataEmitter(LoggingMixin): else: return ExternalSharedLibrary(context, name) - def emit_from_context(self, context): - """Convert a Context to tree metadata objects. - - This is a generator of mozbuild.frontend.data.ContextDerived instances. - """ - - # We only want to emit an InstallationTarget if one of the consulted - # variables is defined. Later on, we look up FINAL_TARGET, which has - # the side-effect of populating it. So, we need to do this lookup - # early. - if any(k in context for k in ('FINAL_TARGET', 'XPI_NAME', 'DIST_SUBDIR')): - yield InstallationTarget(context) - - # We always emit a directory traversal descriptor. This is needed by - # the recursive make backend. - for o in self._emit_directory_traversal_from_context(context): yield o - - for path in context['CONFIGURE_SUBST_FILES']: - yield self._create_substitution(ConfigFileSubstitution, context, - path) - - for path in context['CONFIGURE_DEFINE_FILES']: - yield self._create_substitution(HeaderFileSubstitution, context, - path) - - # XPIDL source files get processed and turned into .h and .xpt files. - # If there are multiple XPIDL files in a directory, they get linked - # together into a final .xpt, which has the name defined by - # XPIDL_MODULE. - xpidl_module = context['XPIDL_MODULE'] - - if context['XPIDL_SOURCES'] and not xpidl_module: - raise SandboxValidationError('XPIDL_MODULE must be defined if ' - 'XPIDL_SOURCES is defined.', context) - - if xpidl_module and not context['XPIDL_SOURCES']: - raise SandboxValidationError('XPIDL_MODULE cannot be defined ' - 'unless there are XPIDL_SOURCES', context) - - if context['XPIDL_SOURCES'] and context['NO_DIST_INSTALL']: - self.log(logging.WARN, 'mozbuild_warning', dict( - path=context.main_path), - '{path}: NO_DIST_INSTALL has no effect on XPIDL_SOURCES.') - - for idl in context['XPIDL_SOURCES']: - yield XPIDLFile(context, mozpath.join(context.srcdir, idl), - xpidl_module) - - for symbol in ('SOURCES', 'HOST_SOURCES', 'UNIFIED_SOURCES'): - for src in (context[symbol] or []): - if not os.path.exists(mozpath.join(context.srcdir, src)): - raise SandboxValidationError('File listed in %s does not ' - 'exist: \'%s\'' % (symbol, src), context) - - # Proxy some variables as-is until we have richer classes to represent - # them. We should aim to keep this set small because it violates the - # desired abstraction of the build definition away from makefiles. - passthru = VariablePassthru(context) - varlist = [ - 'ANDROID_GENERATED_RESFILES', - 'ANDROID_RES_DIRS', - 'DISABLE_STL_WRAPPING', - 'EXTRA_ASSEMBLER_FLAGS', - 'EXTRA_COMPILE_FLAGS', - 'EXTRA_COMPONENTS', - 'EXTRA_DSO_LDOPTS', - 'EXTRA_PP_COMPONENTS', - 'FAIL_ON_WARNINGS', - 'USE_STATIC_LIBS', - 'IS_GYP_DIR', - 'MSVC_ENABLE_PGO', - 'NO_DIST_INSTALL', - 'PYTHON_UNIT_TESTS', - 'RCFILE', - 'RESFILE', - 'RCINCLUDE', - 'DEFFILE', - 'WIN32_EXE_LDFLAGS', - 'LD_VERSION_SCRIPT', - ] - for v in varlist: - if v in context and context[v]: - passthru.variables[v] = context[v] - - if context.config.substs.get('OS_TARGET') == 'WINNT' and \ - context['DELAYLOAD_DLLS']: - context['LDFLAGS'].extend([('-DELAYLOAD:%s' % dll) - for dll in context['DELAYLOAD_DLLS']]) - context['OS_LIBS'].append('delayimp') - - for v in ['CFLAGS', 'CXXFLAGS', 'CMFLAGS', 'CMMFLAGS', 'LDFLAGS']: - if v in context and context[v]: - passthru.variables['MOZBUILD_' + v] = context[v] - - # NO_VISIBILITY_FLAGS is slightly different - if context['NO_VISIBILITY_FLAGS']: - passthru.variables['VISIBILITY_FLAGS'] = '' - - no_pgo = context.get('NO_PGO') - sources = context.get('SOURCES', []) - no_pgo_sources = [f for f in sources if sources[f].no_pgo] - if no_pgo: - if no_pgo_sources: - raise SandboxValidationError('NO_PGO and SOURCES[...].no_pgo ' - 'cannot be set at the same time', context) - passthru.variables['NO_PROFILE_GUIDED_OPTIMIZE'] = no_pgo - if no_pgo_sources: - passthru.variables['NO_PROFILE_GUIDED_OPTIMIZE'] = no_pgo_sources - - # A map from "canonical suffixes" for a particular source file - # language to the range of suffixes associated with that language. - # - # We deliberately don't list the canonical suffix in the suffix list - # in the definition; we'll add it in programmatically after defining - # things. - suffix_map = { - '.s': set(['.asm']), - '.c': set(), - '.m': set(), - '.mm': set(), - '.cpp': set(['.cc', '.cxx']), - '.S': set(), - } - - # The inverse of the above, mapping suffixes to their canonical suffix. - canonicalized_suffix_map = {} - for suffix, alternatives in suffix_map.iteritems(): - alternatives.add(suffix) - for a in alternatives: - canonicalized_suffix_map[a] = suffix - - def canonical_suffix_for_file(f): - return canonicalized_suffix_map[mozpath.splitext(f)[1]] - - # A map from moz.build variables to the canonical suffixes of file - # kinds that can be listed therein. - all_suffixes = list(suffix_map.keys()) - varmap = dict( - SOURCES=(Sources, all_suffixes), - HOST_SOURCES=(HostSources, ['.c', '.mm', '.cpp']), - UNIFIED_SOURCES=(UnifiedSources, ['.c', '.mm', '.cpp']), - GENERATED_SOURCES=(GeneratedSources, all_suffixes), - ) - - for variable, (klass, suffixes) in varmap.items(): - allowed_suffixes = set().union(*[suffix_map[s] for s in suffixes]) - - # First ensure that we haven't been given filetypes that we don't - # recognize. - for f in context[variable]: - ext = mozpath.splitext(f)[1] - if ext not in allowed_suffixes: - raise SandboxValidationError( - '%s has an unknown file type.' % f, context) - if variable.startswith('GENERATED_'): - l = passthru.variables.setdefault('GARBAGE', []) - l.append(f) - - # Now sort the files to let groupby work. - sorted_files = sorted(context[variable], key=canonical_suffix_for_file) - for canonical_suffix, files in itertools.groupby(sorted_files, canonical_suffix_for_file): - arglist = [context, list(files), canonical_suffix] - if variable.startswith('UNIFIED_') and 'FILES_PER_UNIFIED_FILE' in context: - arglist.append(context['FILES_PER_UNIFIED_FILE']) - yield klass(*arglist) - - sources_with_flags = [f for f in sources if sources[f].flags] - for f in sources_with_flags: - ext = mozpath.splitext(f)[1] - yield PerSourceFlag(context, f, sources[f].flags) - - exports = context.get('EXPORTS') - if exports: - yield Exports(context, exports, - dist_install=not context.get('NO_DIST_INSTALL', False)) - - generated_files = context.get('GENERATED_FILES') - if generated_files: - for f in generated_files: - flags = generated_files[f] - output = f - if flags.script: - script = mozpath.join(context.srcdir, flags.script) - inputs = [mozpath.join(context.srcdir, i) for i in flags.inputs] - - if not os.path.exists(script): - raise SandboxValidationError( - 'Script for generating %s does not exist: %s' - % (f, script), context) - if os.path.splitext(script)[1] != '.py': - raise SandboxValidationError( - 'Script for generating %s does not end in .py: %s' - % (f, script), context) - for i in inputs: - if not os.path.exists(i): - raise SandboxValidationError( - 'Input for generating %s does not exist: %s' - % (f, i), context) - else: - script = None - inputs = [] - yield GeneratedFile(context, script, output, inputs) - - test_harness_files = context.get('TEST_HARNESS_FILES') - if test_harness_files: - srcdir_files = defaultdict(list) - srcdir_pattern_files = defaultdict(list) - objdir_files = defaultdict(list) - - for path, strings in test_harness_files.walk(): - if not path and strings: - raise SandboxValidationError( - 'Cannot install files to the root of TEST_HARNESS_FILES', context) - - for s in strings: - if context.is_objdir_path(s): - if s.startswith('!/'): - objdir_files[path].append('$(DEPTH)/%s' % s[2:]) - else: - objdir_files[path].append(s[1:]) - else: - resolved = context.resolve_path(s) - if '*' in s: - if s[0] == '/': - pattern_start = resolved.index('*') - base_path = mozpath.dirname(resolved[:pattern_start]) - pattern = resolved[len(base_path)+1:] - else: - base_path = context.srcdir - pattern = s - srcdir_pattern_files[path].append((base_path, pattern)); - elif not os.path.exists(resolved): - raise SandboxValidationError( - 'File listed in TEST_HARNESS_FILES does not exist: %s' % s, context) - else: - srcdir_files[path].append(resolved) - - yield TestHarnessFiles(context, srcdir_files, - srcdir_pattern_files, objdir_files) - - defines = context.get('DEFINES') - if defines: - yield Defines(context, defines) - - resources = context.get('RESOURCE_FILES') - if resources: - yield Resources(context, resources, defines) - - for pref in sorted(context['JS_PREFERENCE_FILES']): - yield JsPreferenceFile(context, pref) - - for kind, cls in [('PROGRAM', Program), ('HOST_PROGRAM', HostProgram)]: - program = context.get(kind) - if program: - if program in self._binaries: - raise SandboxValidationError( - 'Cannot use "%s" as %s name, ' - 'because it is already used in %s' % (program, kind, - self._binaries[program].relativedir), context) - self._binaries[program] = cls(context, program) - self._linkage.append((context, self._binaries[program], - kind.replace('PROGRAM', 'USE_LIBS'))) - - for kind, cls in [ - ('SIMPLE_PROGRAMS', SimpleProgram), - ('CPP_UNIT_TESTS', SimpleProgram), - ('HOST_SIMPLE_PROGRAMS', HostSimpleProgram)]: - for program in context[kind]: - if program in self._binaries: - raise SandboxValidationError( - 'Cannot use "%s" in %s, ' - 'because it is already used in %s' % (program, kind, - self._binaries[program].relativedir), context) - self._binaries[program] = cls(context, program, - is_unit_test=kind == 'CPP_UNIT_TESTS') - self._linkage.append((context, self._binaries[program], - 'HOST_USE_LIBS' if kind == 'HOST_SIMPLE_PROGRAMS' - else 'USE_LIBS')) - - extra_js_modules = context.get('EXTRA_JS_MODULES') - if extra_js_modules: - yield JavaScriptModules(context, extra_js_modules, 'extra') - - extra_pp_js_modules = context.get('EXTRA_PP_JS_MODULES') - if extra_pp_js_modules: - yield JavaScriptModules(context, extra_pp_js_modules, 'extra_pp') - - test_js_modules = context.get('TESTING_JS_MODULES') - if test_js_modules: - yield JavaScriptModules(context, test_js_modules, 'testing') - - simple_lists = [ - ('GENERATED_EVENTS_WEBIDL_FILES', GeneratedEventWebIDLFile), - ('GENERATED_WEBIDL_FILES', GeneratedWebIDLFile), - ('IPDL_SOURCES', IPDLFile), - ('GENERATED_INCLUDES', GeneratedInclude), - ('PREPROCESSED_TEST_WEBIDL_FILES', PreprocessedTestWebIDLFile), - ('PREPROCESSED_WEBIDL_FILES', PreprocessedWebIDLFile), - ('TEST_WEBIDL_FILES', TestWebIDLFile), - ('WEBIDL_FILES', WebIDLFile), - ('WEBIDL_EXAMPLE_INTERFACES', ExampleWebIDLInterface), - ] - for context_var, klass in simple_lists: - for name in context.get(context_var, []): - yield klass(context, name) - - for local_include in context.get('LOCAL_INCLUDES', []): - if local_include.startswith('/'): - path = context.config.topsrcdir - relative_include = local_include[1:] - else: - path = context.srcdir - relative_include = local_include - - actual_include = os.path.join(path, relative_include) - if not os.path.exists(actual_include): - raise SandboxValidationError('Path specified in LOCAL_INCLUDES ' - 'does not exist: %s (resolved to %s)' % (local_include, actual_include), context) - yield LocalInclude(context, local_include) - - final_target_files = context.get('FINAL_TARGET_FILES') - if final_target_files: - yield FinalTargetFiles(context, final_target_files, context['FINAL_TARGET']) - - branding_files = context.get('BRANDING_FILES') - if branding_files: - yield BrandingFiles(context, branding_files) - + def _handle_libraries(self, context): host_libname = context.get('HOST_LIBRARY_NAME') libname = context.get('LIBRARY_NAME') @@ -782,6 +456,13 @@ class TreeMetadataEmitter(LoggingMixin): elif static_lib: static_args['is_sdk'] = True + if context.get('NO_EXPAND_LIBS'): + if not static_lib: + raise SandboxValidationError( + 'NO_EXPAND_LIBS can only be set for static libraries.', + context) + static_args['no_expand_lib'] = True + if shared_lib and static_lib: if not static_name and not shared_name: raise SandboxValidationError( @@ -825,6 +506,401 @@ class TreeMetadataEmitter(LoggingMixin): 'LIBRARY_NAME to take effect', context) lib.defines.update(lib_defines) + def emit_from_context(self, context): + """Convert a Context to tree metadata objects. + + This is a generator of mozbuild.frontend.data.ContextDerived instances. + """ + + # We only want to emit an InstallationTarget if one of the consulted + # variables is defined. Later on, we look up FINAL_TARGET, which has + # the side-effect of populating it. So, we need to do this lookup + # early. + if any(k in context for k in ('FINAL_TARGET', 'XPI_NAME', 'DIST_SUBDIR')): + yield InstallationTarget(context) + + # We always emit a directory traversal descriptor. This is needed by + # the recursive make backend. + for o in self._emit_directory_traversal_from_context(context): yield o + + for path in context['CONFIGURE_SUBST_FILES']: + yield self._create_substitution(ConfigFileSubstitution, context, + path) + + for path in context['CONFIGURE_DEFINE_FILES']: + yield self._create_substitution(HeaderFileSubstitution, context, + path) + + for obj in self._process_xpidl(context): + yield obj + + # Proxy some variables as-is until we have richer classes to represent + # them. We should aim to keep this set small because it violates the + # desired abstraction of the build definition away from makefiles. + passthru = VariablePassthru(context) + varlist = [ + 'ANDROID_GENERATED_RESFILES', + 'ANDROID_RES_DIRS', + 'DISABLE_STL_WRAPPING', + 'EXTRA_ASSEMBLER_FLAGS', + 'EXTRA_COMPILE_FLAGS', + 'EXTRA_COMPONENTS', + 'EXTRA_DSO_LDOPTS', + 'EXTRA_PP_COMPONENTS', + 'FAIL_ON_WARNINGS', + 'USE_STATIC_LIBS', + 'MSVC_ENABLE_PGO', + 'PYTHON_UNIT_TESTS', + 'RCFILE', + 'RESFILE', + 'RCINCLUDE', + 'DEFFILE', + 'WIN32_EXE_LDFLAGS', + 'LD_VERSION_SCRIPT', + ] + for v in varlist: + if v in context and context[v]: + passthru.variables[v] = context[v] + + if context.config.substs.get('OS_TARGET') == 'WINNT' and \ + context['DELAYLOAD_DLLS']: + context['LDFLAGS'].extend([('-DELAYLOAD:%s' % dll) + for dll in context['DELAYLOAD_DLLS']]) + context['OS_LIBS'].append('delayimp') + + for v in ['CFLAGS', 'CXXFLAGS', 'CMFLAGS', 'CMMFLAGS', 'ASFLAGS', + 'LDFLAGS']: + if v in context and context[v]: + passthru.variables['MOZBUILD_' + v] = context[v] + + # NO_VISIBILITY_FLAGS is slightly different + if context['NO_VISIBILITY_FLAGS']: + passthru.variables['VISIBILITY_FLAGS'] = '' + + if isinstance(context, TemplateContext) and context.template == 'Gyp': + passthru.variables['IS_GYP_DIR'] = True + + dist_install = context['DIST_INSTALL'] + if dist_install is True: + passthru.variables['DIST_INSTALL'] = True + elif dist_install is False: + passthru.variables['NO_DIST_INSTALL'] = True + + for obj in self._process_sources(context, passthru): + yield obj + + exports = context.get('EXPORTS') + if exports: + yield Exports(context, exports, + dist_install=dist_install is not False) + + for obj in self._process_generated_files(context): + yield obj + + for obj in self._process_test_harness_files(context): + yield obj + + defines = context.get('DEFINES') + if defines: + yield Defines(context, defines) + + resources = context.get('RESOURCE_FILES') + if resources: + yield Resources(context, resources, defines) + + for pref in sorted(context['JS_PREFERENCE_FILES']): + yield JsPreferenceFile(context, pref) + + self._handle_programs(context) + + extra_js_modules = context.get('EXTRA_JS_MODULES') + if extra_js_modules: + yield JavaScriptModules(context, extra_js_modules, 'extra') + + extra_pp_js_modules = context.get('EXTRA_PP_JS_MODULES') + if extra_pp_js_modules: + yield JavaScriptModules(context, extra_pp_js_modules, 'extra_pp') + + test_js_modules = context.get('TESTING_JS_MODULES') + if test_js_modules: + yield JavaScriptModules(context, test_js_modules, 'testing') + + simple_lists = [ + ('GENERATED_EVENTS_WEBIDL_FILES', GeneratedEventWebIDLFile), + ('GENERATED_WEBIDL_FILES', GeneratedWebIDLFile), + ('IPDL_SOURCES', IPDLFile), + ('GENERATED_INCLUDES', GeneratedInclude), + ('PREPROCESSED_TEST_WEBIDL_FILES', PreprocessedTestWebIDLFile), + ('PREPROCESSED_WEBIDL_FILES', PreprocessedWebIDLFile), + ('TEST_WEBIDL_FILES', TestWebIDLFile), + ('WEBIDL_FILES', WebIDLFile), + ('WEBIDL_EXAMPLE_INTERFACES', ExampleWebIDLInterface), + ] + for context_var, klass in simple_lists: + for name in context.get(context_var, []): + yield klass(context, name) + + for local_include in context.get('LOCAL_INCLUDES', []): + if local_include.startswith('/'): + path = context.config.topsrcdir + relative_include = local_include[1:] + else: + path = context.srcdir + relative_include = local_include + + actual_include = os.path.join(path, relative_include) + if not os.path.exists(actual_include): + raise SandboxValidationError('Path specified in LOCAL_INCLUDES ' + 'does not exist: %s (resolved to %s)' % (local_include, actual_include), context) + yield LocalInclude(context, local_include) + + final_target_files = context.get('FINAL_TARGET_FILES') + if final_target_files: + yield FinalTargetFiles(context, final_target_files, context['FINAL_TARGET']) + + branding_files = context.get('BRANDING_FILES') + if branding_files: + yield BrandingFiles(context, branding_files) + + self._handle_libraries(context) + + for obj in self._process_test_manifests(context): + yield obj + + for obj in self._process_jar_manifests(context): + yield obj + + for name, jar in context.get('JAVA_JAR_TARGETS', {}).items(): + yield ContextWrapped(context, jar) + + for name, data in context.get('ANDROID_ECLIPSE_PROJECT_TARGETS', {}).items(): + yield ContextWrapped(context, data) + + if passthru.variables: + yield passthru + + def _create_substitution(self, cls, context, path): + if os.path.isabs(path): + path = path[1:] + + sub = cls(context) + sub.input_path = mozpath.join(context.srcdir, '%s.in' % path) + sub.output_path = mozpath.join(context.objdir, path) + sub.relpath = path + + return sub + + def _process_sources(self, context, passthru): + for symbol in ('SOURCES', 'HOST_SOURCES', 'UNIFIED_SOURCES'): + for src in (context[symbol] or []): + if not os.path.exists(mozpath.join(context.srcdir, src)): + raise SandboxValidationError('File listed in %s does not ' + 'exist: \'%s\'' % (symbol, src), context) + + no_pgo = context.get('NO_PGO') + sources = context.get('SOURCES', []) + no_pgo_sources = [f for f in sources if sources[f].no_pgo] + if no_pgo: + if no_pgo_sources: + raise SandboxValidationError('NO_PGO and SOURCES[...].no_pgo ' + 'cannot be set at the same time', context) + passthru.variables['NO_PROFILE_GUIDED_OPTIMIZE'] = no_pgo + if no_pgo_sources: + passthru.variables['NO_PROFILE_GUIDED_OPTIMIZE'] = no_pgo_sources + + # A map from "canonical suffixes" for a particular source file + # language to the range of suffixes associated with that language. + # + # We deliberately don't list the canonical suffix in the suffix list + # in the definition; we'll add it in programmatically after defining + # things. + suffix_map = { + '.s': set(['.asm']), + '.c': set(), + '.m': set(), + '.mm': set(), + '.cpp': set(['.cc', '.cxx']), + '.S': set(), + } + + # The inverse of the above, mapping suffixes to their canonical suffix. + canonicalized_suffix_map = {} + for suffix, alternatives in suffix_map.iteritems(): + alternatives.add(suffix) + for a in alternatives: + canonicalized_suffix_map[a] = suffix + + def canonical_suffix_for_file(f): + return canonicalized_suffix_map[mozpath.splitext(f)[1]] + + # A map from moz.build variables to the canonical suffixes of file + # kinds that can be listed therein. + all_suffixes = list(suffix_map.keys()) + varmap = dict( + SOURCES=(Sources, all_suffixes), + HOST_SOURCES=(HostSources, ['.c', '.mm', '.cpp']), + UNIFIED_SOURCES=(UnifiedSources, ['.c', '.mm', '.cpp']), + GENERATED_SOURCES=(GeneratedSources, all_suffixes), + ) + + for variable, (klass, suffixes) in varmap.items(): + allowed_suffixes = set().union(*[suffix_map[s] for s in suffixes]) + + # First ensure that we haven't been given filetypes that we don't + # recognize. + for f in context[variable]: + ext = mozpath.splitext(f)[1] + if ext not in allowed_suffixes: + raise SandboxValidationError( + '%s has an unknown file type.' % f, context) + if variable.startswith('GENERATED_'): + l = passthru.variables.setdefault('GARBAGE', []) + l.append(f) + + # Now sort the files to let groupby work. + sorted_files = sorted(context[variable], key=canonical_suffix_for_file) + for canonical_suffix, files in itertools.groupby(sorted_files, canonical_suffix_for_file): + arglist = [context, list(files), canonical_suffix] + if variable.startswith('UNIFIED_') and 'FILES_PER_UNIFIED_FILE' in context: + arglist.append(context['FILES_PER_UNIFIED_FILE']) + yield klass(*arglist) + + sources_with_flags = [f for f in sources if sources[f].flags] + for f in sources_with_flags: + ext = mozpath.splitext(f)[1] + yield PerSourceFlag(context, f, sources[f].flags) + + def _process_xpidl(self, context): + # XPIDL source files get processed and turned into .h and .xpt files. + # If there are multiple XPIDL files in a directory, they get linked + # together into a final .xpt, which has the name defined by + # XPIDL_MODULE. + xpidl_module = context['XPIDL_MODULE'] + + if context['XPIDL_SOURCES'] and not xpidl_module: + raise SandboxValidationError('XPIDL_MODULE must be defined if ' + 'XPIDL_SOURCES is defined.', context) + + if xpidl_module and not context['XPIDL_SOURCES']: + raise SandboxValidationError('XPIDL_MODULE cannot be defined ' + 'unless there are XPIDL_SOURCES', context) + + if context['XPIDL_SOURCES'] and context['DIST_INSTALL'] is False: + self.log(logging.WARN, 'mozbuild_warning', dict( + path=context.main_path), + '{path}: DIST_INSTALL = False has no effect on XPIDL_SOURCES.') + + for idl in context['XPIDL_SOURCES']: + yield XPIDLFile(context, mozpath.join(context.srcdir, idl), + xpidl_module) + + def _process_generated_files(self, context): + generated_files = context.get('GENERATED_FILES') + if not generated_files: + return + + for f in generated_files: + flags = generated_files[f] + output = f + if flags.script: + method = "main" + # Deal with cases like "C:\\path\\to\\script.py:function". + if not flags.script.endswith('.py') and ':' in flags.script: + script, method = flags.script.rsplit(':', 1) + else: + script = flags.script + script = mozpath.join(context.srcdir, script) + inputs = [mozpath.join(context.srcdir, i) for i in flags.inputs] + + if not os.path.exists(script): + raise SandboxValidationError( + 'Script for generating %s does not exist: %s' + % (f, script), context) + if os.path.splitext(script)[1] != '.py': + raise SandboxValidationError( + 'Script for generating %s does not end in .py: %s' + % (f, script), context) + for i in inputs: + if not os.path.exists(i): + raise SandboxValidationError( + 'Input for generating %s does not exist: %s' + % (f, i), context) + else: + script = None + method = None + inputs = [] + yield GeneratedFile(context, script, method, output, inputs) + + def _process_test_harness_files(self, context): + test_harness_files = context.get('TEST_HARNESS_FILES') + if not test_harness_files: + return + + srcdir_files = defaultdict(list) + srcdir_pattern_files = defaultdict(list) + objdir_files = defaultdict(list) + + for path, strings in test_harness_files.walk(): + if not path and strings: + raise SandboxValidationError( + 'Cannot install files to the root of TEST_HARNESS_FILES', context) + + for s in strings: + if context.is_objdir_path(s): + if s.startswith('!/'): + objdir_files[path].append('$(DEPTH)/%s' % s[2:]) + else: + objdir_files[path].append(s[1:]) + else: + resolved = context.resolve_path(s) + if '*' in s: + if s[0] == '/': + pattern_start = resolved.index('*') + base_path = mozpath.dirname(resolved[:pattern_start]) + pattern = resolved[len(base_path)+1:] + else: + base_path = context.srcdir + pattern = s + srcdir_pattern_files[path].append((base_path, pattern)); + elif not os.path.exists(resolved): + raise SandboxValidationError( + 'File listed in TEST_HARNESS_FILES does not exist: %s' % s, context) + else: + srcdir_files[path].append(resolved) + + yield TestHarnessFiles(context, srcdir_files, + srcdir_pattern_files, objdir_files) + + def _handle_programs(self, context): + for kind, cls in [('PROGRAM', Program), ('HOST_PROGRAM', HostProgram)]: + program = context.get(kind) + if program: + if program in self._binaries: + raise SandboxValidationError( + 'Cannot use "%s" as %s name, ' + 'because it is already used in %s' % (program, kind, + self._binaries[program].relativedir), context) + self._binaries[program] = cls(context, program) + self._linkage.append((context, self._binaries[program], + kind.replace('PROGRAM', 'USE_LIBS'))) + + for kind, cls in [ + ('SIMPLE_PROGRAMS', SimpleProgram), + ('CPP_UNIT_TESTS', SimpleProgram), + ('HOST_SIMPLE_PROGRAMS', HostSimpleProgram)]: + for program in context[kind]: + if program in self._binaries: + raise SandboxValidationError( + 'Cannot use "%s" in %s, ' + 'because it is already used in %s' % (program, kind, + self._binaries[program].relativedir), context) + self._binaries[program] = cls(context, program, + is_unit_test=kind == 'CPP_UNIT_TESTS') + self._linkage.append((context, self._binaries[program], + 'HOST_USE_LIBS' if kind == 'HOST_SIMPLE_PROGRAMS' + else 'USE_LIBS')) + + def _process_test_manifests(self, context): # While there are multiple test manifests, the behavior is very similar # across them. We enforce this by having common handling of all # manifests and outputting a single class type with the differences @@ -865,44 +941,6 @@ class TreeMetadataEmitter(LoggingMixin): for obj in self._process_reftest_manifest(context, flavor, path): yield obj - jar_manifests = context.get('JAR_MANIFESTS', []) - if len(jar_manifests) > 1: - raise SandboxValidationError('While JAR_MANIFESTS is a list, ' - 'it is currently limited to one value.', context) - - for path in jar_manifests: - yield JARManifest(context, mozpath.join(context.srcdir, path)) - - # Temporary test to look for jar.mn files that creep in without using - # the new declaration. Before, we didn't require jar.mn files to - # declared anywhere (they were discovered). This will detect people - # relying on the old behavior. - if os.path.exists(os.path.join(context.srcdir, 'jar.mn')): - if 'jar.mn' not in jar_manifests: - raise SandboxValidationError('A jar.mn exists but it ' - 'is not referenced in the moz.build file. ' - 'Please define JAR_MANIFESTS.', context) - - for name, jar in context.get('JAVA_JAR_TARGETS', {}).items(): - yield ContextWrapped(context, jar) - - for name, data in context.get('ANDROID_ECLIPSE_PROJECT_TARGETS', {}).items(): - yield ContextWrapped(context, data) - - if passthru.variables: - yield passthru - - def _create_substitution(self, cls, context, path): - if os.path.isabs(path): - path = path[1:] - - sub = cls(context) - sub.input_path = mozpath.join(context.srcdir, '%s.in' % path) - sub.output_path = mozpath.join(context.objdir, path) - sub.relpath = path - - return sub - def _process_test_manifest(self, context, info, manifest_path): flavor, install_root, install_subdir, package_tests = info @@ -914,7 +952,8 @@ class TreeMetadataEmitter(LoggingMixin): install_prefix = mozpath.join(install_root, install_subdir) try: - m = manifestparser.TestManifest(manifests=[path], strict=True) + m = manifestparser.TestManifest(manifests=[path], strict=True, + rootdir=context.config.topsrcdir) defaults = m.manifest_defaults[os.path.normpath(path)] if not m.tests and not 'support-files' in defaults: raise SandboxValidationError('Empty test manifest: %s' @@ -1008,8 +1047,10 @@ class TreeMetadataEmitter(LoggingMixin): # Some test files are compiled and should not be copied into the # test package. They function as identifiers rather than files. if package_tests: + manifest_relpath = mozpath.relpath(test['path'], + mozpath.dirname(test['manifest'])) obj.installs[mozpath.normpath(test['path'])] = \ - (mozpath.join(out_dir, test['relpath']), True) + ((mozpath.join(out_dir, manifest_relpath)), True) process_support_files(test) @@ -1079,6 +1120,25 @@ class TreeMetadataEmitter(LoggingMixin): yield obj + def _process_jar_manifests(self, context): + jar_manifests = context.get('JAR_MANIFESTS', []) + if len(jar_manifests) > 1: + raise SandboxValidationError('While JAR_MANIFESTS is a list, ' + 'it is currently limited to one value.', context) + + for path in jar_manifests: + yield JARManifest(context, mozpath.join(context.srcdir, path)) + + # Temporary test to look for jar.mn files that creep in without using + # the new declaration. Before, we didn't require jar.mn files to + # declared anywhere (they were discovered). This will detect people + # relying on the old behavior. + if os.path.exists(os.path.join(context.srcdir, 'jar.mn')): + if 'jar.mn' not in jar_manifests: + raise SandboxValidationError('A jar.mn exists but it ' + 'is not referenced in the moz.build file. ' + 'Please define JAR_MANIFESTS.', context) + def _emit_directory_traversal_from_context(self, context): o = DirectoryTraversal(context) o.dirs = context.get('DIRS', []) diff --git a/python/mozbuild/mozbuild/frontend/gyp_reader.py b/python/mozbuild/mozbuild/frontend/gyp_reader.py index 4e9b6a16bc..a6bc847884 100644 --- a/python/mozbuild/mozbuild/frontend/gyp_reader.py +++ b/python/mozbuild/mozbuild/frontend/gyp_reader.py @@ -61,8 +61,8 @@ class GypContext(TemplateContext): """ def __init__(self, config, relobjdir): self._relobjdir = relobjdir - TemplateContext.__init__(self, allowed_variables=self.VARIABLES(), - config=config) + TemplateContext.__init__(self, template='Gyp', + allowed_variables=self.VARIABLES(), config=config) @classmethod @memoize @@ -71,7 +71,6 @@ class GypContext(TemplateContext): # Using a class method instead of a class variable to hide the content # from sphinx. return dict(VARIABLES, - IS_GYP_DIR=(bool, bool, '', None), EXTRA_ASSEMBLER_FLAGS=(List, list, '', None), EXTRA_COMPILE_FLAGS=(List, list, '', None), ) @@ -148,8 +147,6 @@ def read_from_gyp(config, path, output, vars, non_unified_sources = set()): context.add_source(mozpath.abspath(mozpath.join( mozpath.dirname(build_file), f))) - context['IS_GYP_DIR'] = True - spec = targets[target] # Derive which gyp configuration to use based on MOZ_DEBUG. diff --git a/python/mozbuild/mozbuild/frontend/reader.py b/python/mozbuild/mozbuild/frontend/reader.py index 53d17b4c03..3165c74bda 100644 --- a/python/mozbuild/mozbuild/frontend/reader.py +++ b/python/mozbuild/mozbuild/frontend/reader.py @@ -411,8 +411,10 @@ class MozbuildSandbox(Sandbox): func, code, path = template def template_function(*args, **kwargs): - context = TemplateContext(self._context._allowed_variables, - self._context.config) + context = TemplateContext( + template=func.func_name, + allowed_variables=self._context._allowed_variables, + config=self._context.config) context.add_source(self._context.current_path) for p in self._context.all_paths: context.add_source(p) diff --git a/python/mozbuild/mozbuild/test/backend/data/generated-files/moz.build b/python/mozbuild/mozbuild/test/backend/data/generated-files/moz.build index e377cb6763..e5e9098369 100644 --- a/python/mozbuild/mozbuild/test/backend/data/generated-files/moz.build +++ b/python/mozbuild/mozbuild/test/backend/data/generated-files/moz.build @@ -5,7 +5,7 @@ GENERATED_FILES += [ 'bar.c', 'foo.c', 'quux.c' ] bar = GENERATED_FILES['bar.c'] -bar.script = 'generate-bar.py' +bar.script = 'generate-bar.py:baz' foo = GENERATED_FILES['foo.c'] foo.script = 'generate-foo.py' diff --git a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py index d733325c9a..c9ee468fbd 100644 --- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py +++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py @@ -379,11 +379,11 @@ class TestRecursiveMakeBackend(BackendTester): expected = [ 'GENERATED_FILES += bar.c', 'bar.c: %s/generate-bar.py' % env.topsrcdir, - '$(call py_action,file_generate,%s/generate-bar.py bar.c)' % env.topsrcdir, + '$(call py_action,file_generate,%s/generate-bar.py baz bar.c)' % env.topsrcdir, '', 'GENERATED_FILES += foo.c', 'foo.c: %s/generate-foo.py %s/foo-data' % (env.topsrcdir, env.topsrcdir), - '$(call py_action,file_generate,%s/generate-foo.py foo.c %s/foo-data)' % (env.topsrcdir, env.topsrcdir), + '$(call py_action,file_generate,%s/generate-foo.py main foo.c %s/foo-data)' % (env.topsrcdir, env.topsrcdir), '', 'GENERATED_FILES += quux.c', ] diff --git a/python/mozbuild/mozbuild/test/frontend/data/generated-files-absolute-script/moz.build b/python/mozbuild/mozbuild/test/frontend/data/generated-files-absolute-script/moz.build new file mode 100644 index 0000000000..e840e09419 --- /dev/null +++ b/python/mozbuild/mozbuild/test/frontend/data/generated-files-absolute-script/moz.build @@ -0,0 +1,9 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +GENERATED_FILES += ['bar.c'] + +bar = GENERATED_FILES['bar.c'] +bar.script = TOPSRCDIR + '/script.py:make_bar' +bar.inputs = [] diff --git a/python/mozbuild/mozbuild/test/frontend/data/generated-files-absolute-script/script.py b/python/mozbuild/mozbuild/test/frontend/data/generated-files-absolute-script/script.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python/mozbuild/mozbuild/test/frontend/data/generated-files-method-names/moz.build b/python/mozbuild/mozbuild/test/frontend/data/generated-files-method-names/moz.build new file mode 100644 index 0000000000..def7874028 --- /dev/null +++ b/python/mozbuild/mozbuild/test/frontend/data/generated-files-method-names/moz.build @@ -0,0 +1,13 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +GENERATED_FILES += [ 'bar.c', 'foo.c' ] + +bar = GENERATED_FILES['bar.c'] +bar.script = 'script.py:make_bar' +bar.inputs = [] + +foo = GENERATED_FILES['foo.c'] +foo.script = 'script.py' +foo.inputs = [] diff --git a/python/mozbuild/mozbuild/test/frontend/data/generated-files-method-names/script.py b/python/mozbuild/mozbuild/test/frontend/data/generated-files-method-names/script.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python/mozbuild/mozbuild/test/frontend/data/variable-passthru/moz.build b/python/mozbuild/mozbuild/test/frontend/data/variable-passthru/moz.build index b88099196d..1f58f4dc9b 100644 --- a/python/mozbuild/mozbuild/test/frontend/data/variable-passthru/moz.build +++ b/python/mozbuild/mozbuild/test/frontend/data/variable-passthru/moz.build @@ -8,7 +8,7 @@ EXTRA_PP_COMPONENTS=['fans.pp.js', 'tans.pp.js'] FAIL_ON_WARNINGS = True MSVC_ENABLE_PGO = True -NO_DIST_INSTALL = True +DIST_INSTALL = False NO_VISIBILITY_FLAGS = True diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py index 4d6300e7bd..68244f10c9 100644 --- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py +++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py @@ -194,6 +194,37 @@ class TestEmitterBasic(unittest.TestCase): expected = ['bar.c', 'foo.c'] for o, expected_filename in zip(objs, expected): self.assertEqual(o.output, expected_filename) + self.assertEqual(o.script, None) + self.assertEqual(o.method, None) + self.assertEqual(o.inputs, []) + + def test_generated_files_method_names(self): + reader = self.reader('generated-files-method-names') + objs = self.read_topsrcdir(reader) + + self.assertEqual(len(objs), 2) + for o in objs: + self.assertIsInstance(o, GeneratedFile) + + expected = ['bar.c', 'foo.c'] + expected_method_names = ['make_bar', 'main'] + for o, expected_filename, expected_method in zip(objs, expected, expected_method_names): + self.assertEqual(o.output, expected_filename) + self.assertEqual(o.method, expected_method) + self.assertEqual(o.inputs, []) + + def test_generated_files_absolute_script(self): + reader = self.reader('generated-files-absolute-script') + objs = self.read_topsrcdir(reader) + + self.assertEqual(len(objs), 1) + + o = objs[0] + self.assertIsInstance(o, GeneratedFile) + self.assertEqual(o.output, 'bar.c') + self.assertRegexpMatches(o.script, 'script.py$') + self.assertEqual(o.method, 'make_bar') + self.assertEqual(o.inputs, []) def test_generated_files_no_script(self): reader = self.reader('generated-files-no-script') diff --git a/python/mozbuild/mozbuild/testing.py b/python/mozbuild/mozbuild/testing.py index 1d322b5136..b7f764171b 100644 --- a/python/mozbuild/mozbuild/testing.py +++ b/python/mozbuild/mozbuild/testing.py @@ -29,8 +29,10 @@ def rewrite_test_base(test, new_base, honor_install_to_subdir=False): test['here'] = mozpath.join(new_base, test['dir_relpath']) if honor_install_to_subdir and test.get('install-to-subdir'): + manifest_relpath = mozpath.relpath(test['path'], + mozpath.dirname(test['manifest'])) test['path'] = mozpath.join(new_base, test['dir_relpath'], - test['install-to-subdir'], test['relpath']) + test['install-to-subdir'], manifest_relpath) else: test['path'] = mozpath.join(new_base, test['file_relpath']) diff --git a/rdf/util/Makefile.in b/rdf/util/Makefile.in index 3e89136316..f9b098c801 100644 --- a/rdf/util/Makefile.in +++ b/rdf/util/Makefile.in @@ -7,4 +7,4 @@ # used by frozen (dependent) linkage components. The internal-linkage code should use # rdfutil_s which is built in the internal/ subdirectory. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 diff --git a/rdf/util/moz.build b/rdf/util/moz.build index b924f82451..131d8e5a39 100644 --- a/rdf/util/moz.build +++ b/rdf/util/moz.build @@ -4,6 +4,10 @@ # 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/. +# This file builds the rdfutil_external_s library which should be used +# by frozen (dependent) linkage components. The internal-linkage code +# should use rdfutil_s which is built in the internal/ subdirectory. + DIRS += ['internal'] EXPORTS += [ @@ -20,3 +24,5 @@ Library('rdfutil_external_s') FORCE_STATIC_LIB = True FAIL_ON_WARNINGS = True + +DIST_INSTALL = True diff --git a/security/manager/ssl/tests/unit/pkcs11testmodule/moz.build b/security/manager/ssl/tests/unit/pkcs11testmodule/moz.build index 5c20439de8..339b130d5b 100644 --- a/security/manager/ssl/tests/unit/pkcs11testmodule/moz.build +++ b/security/manager/ssl/tests/unit/pkcs11testmodule/moz.build @@ -13,6 +13,6 @@ SharedLibrary('pkcs11testmodule') # C_GetFunctionList needs to be exported. As it turns out, it's much easier to # just export all the symbols. NO_VISIBILITY_FLAGS = True -NO_DIST_INSTALL = True +DIST_INSTALL = False FAIL_ON_WARNINGS = True diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py index 7640d9f6fc..81ac95039a 100644 --- a/testing/mozbase/manifestparser/manifestparser/filters.py +++ b/testing/mozbase/manifestparser/manifestparser/filters.py @@ -31,18 +31,6 @@ def skip_if(tests, values): yield test -def run_if(tests, values): - """ - Sets disabled on all tests containing the `run-if` tag and whose condition - is False. This filter is added by default. - """ - tag = 'run-if' - for test in tests: - if tag in test and not parse(test[tag], **values): - test.setdefault('disabled', '{}: {}'.format(tag, test[tag])) - yield test - - def fail_if(tests, values): """ Sets expected to 'fail' on all tests containing the `fail-if` tag and whose @@ -203,7 +191,7 @@ class chunk_by_dir(InstanceFilter): tests_by_dir = defaultdict(list) ordered_dirs = [] for test in tests: - path = test['path'] + path = test['relpath'] if path.startswith(os.sep): path = path[1:] @@ -229,12 +217,11 @@ class chunk_by_dir(InstanceFilter): DEFAULT_FILTERS = ( skip_if, - run_if, fail_if, ) """ -By default :func:`~.active_tests` will run the :func:`~.skip_if`, -:func:`~.run_if` and :func:`~.fail_if` filters. +By default :func:`~.active_tests` will run the :func:`~.skip_if` +and :func:`~.fail_if` filters. """ diff --git a/testing/mozbase/manifestparser/manifestparser/manifestparser.py b/testing/mozbase/manifestparser/manifestparser/manifestparser.py index 0655692944..e8375ab2c1 100644 --- a/testing/mozbase/manifestparser/manifestparser/manifestparser.py +++ b/testing/mozbase/manifestparser/manifestparser/manifestparser.py @@ -43,13 +43,13 @@ def denormalize_path(path): class ManifestParser(object): """read .ini manifests""" - def __init__(self, manifests=(), defaults=None, strict=True): + def __init__(self, manifests=(), defaults=None, strict=True, rootdir=None): self._defaults = defaults or {} self._ancestor_defaults = {} self.tests = [] self.manifest_defaults = {} self.strict = strict - self.rootdir = None + self.rootdir = rootdir self.relativeRoot = None if manifests: self.read(*manifests) diff --git a/testing/mozbase/manifestparser/tests/test_chunking.py b/testing/mozbase/manifestparser/tests/test_chunking.py index 4317a93626..135e441e28 100644 --- a/testing/mozbase/manifestparser/tests/test_chunking.py +++ b/testing/mozbase/manifestparser/tests/test_chunking.py @@ -78,18 +78,18 @@ class ChunkByDir(unittest.TestCase): i += 1 name = 'test%i' % i test = {'name': name, - 'path': os.path.join(d, name)} + 'relpath': os.path.join(d, name)} yield test def run_all_combos(self, dirs): - tests = self.generate_tests(dirs) + tests = list(self.generate_tests(dirs)) - deepest = max(len(t['path'].split(os.sep))-1 for t in tests) + deepest = max(len(t['relpath'].split(os.sep))-1 for t in tests) for depth in range(1, deepest+1): def num_groups(tests): unique = set() - for p in [t['path'] for t in tests]: + for p in [t['relpath'] for t in tests]: p = p.split(os.sep) p = p[:min(depth, len(p)-1)] unique.add(os.sep.join(p)) @@ -99,7 +99,7 @@ class ChunkByDir(unittest.TestCase): res = [] for this in range(1, total+1): f = chunk_by_dir(this, total, depth) - res.append(f(tests, {})) + res.append(list(f(tests, {}))) lengths = map(num_groups, res) # the chunk with the most dirs should have at most one more diff --git a/testing/mozbase/manifestparser/tests/test_filters.py b/testing/mozbase/manifestparser/tests/test_filters.py index d09bf07385..f150f73345 100644 --- a/testing/mozbase/manifestparser/tests/test_filters.py +++ b/testing/mozbase/manifestparser/tests/test_filters.py @@ -8,7 +8,6 @@ from manifestparser import TestManifest from manifestparser.filters import ( subsuite, skip_if, - run_if, fail_if, enabled, exists, @@ -87,11 +86,10 @@ class BuiltinFilters(unittest.TestCase): tests = ( { "name": "test0" }, { "name": "test1", "skip-if": "foo == 'bar'" }, - { "name": "test2", "run-if": "foo == 'bar'" }, - { "name": "test3", "fail-if": "foo == 'bar'" }, - { "name": "test4", "disabled": "some reason" }, - { "name": "test5", "subsuite": "baz" }, - { "name": "test6", "subsuite": "baz,foo == 'bar'" }) + { "name": "test2", "fail-if": "foo == 'bar'" }, + { "name": "test3", "disabled": "some reason" }, + { "name": "test4", "subsuite": "baz" }, + { "name": "test5", "subsuite": "baz,foo == 'bar'" }) def test_skip_if(self): tests = deepcopy(self.tests) @@ -102,28 +100,19 @@ class BuiltinFilters(unittest.TestCase): tests = list(skip_if(tests, {'foo': 'bar'})) self.assertNotIn(self.tests[1], tests) - def test_run_if(self): - tests = deepcopy(self.tests) - tests = list(run_if(tests, {})) - self.assertNotIn(self.tests[2], tests) - - tests = deepcopy(self.tests) - tests = list(run_if(tests, {'foo': 'bar'})) - self.assertEquals(len(tests), len(self.tests)) - def test_fail_if(self): tests = deepcopy(self.tests) tests = list(fail_if(tests, {})) - self.assertNotIn('expected', tests[3]) + self.assertNotIn('expected', tests[2]) tests = deepcopy(self.tests) tests = list(fail_if(tests, {'foo': 'bar'})) - self.assertEquals(tests[3]['expected'], 'fail') + self.assertEquals(tests[2]['expected'], 'fail') def test_enabled(self): tests = deepcopy(self.tests) tests = list(enabled(tests, {})) - self.assertNotIn(self.tests[4], tests) + self.assertNotIn(self.tests[3], tests) def test_subsuite(self): sub1 = subsuite() @@ -131,13 +120,13 @@ class BuiltinFilters(unittest.TestCase): tests = deepcopy(self.tests) tests = list(sub1(tests, {})) - self.assertNotIn(self.tests[5], tests) - self.assertEquals(tests[-1]['name'], 'test6') + self.assertNotIn(self.tests[4], tests) + self.assertEquals(tests[-1]['name'], 'test5') tests = deepcopy(self.tests) tests = list(sub2(tests, {})) self.assertEquals(len(tests), 1) - self.assertIn(self.tests[5], tests) + self.assertIn(self.tests[4], tests) def test_subsuite_condition(self): sub1 = subsuite() @@ -146,11 +135,11 @@ class BuiltinFilters(unittest.TestCase): tests = deepcopy(self.tests) tests = list(sub1(tests, {'foo': 'bar'})) + self.assertNotIn(self.tests[4], tests) self.assertNotIn(self.tests[5], tests) - self.assertNotIn(self.tests[6], tests) tests = deepcopy(self.tests) tests = list(sub2(tests, {'foo': 'bar'})) self.assertEquals(len(tests), 2) - self.assertEquals(tests[0]['name'], 'test5') - self.assertEquals(tests[1]['name'], 'test6') + self.assertEquals(tests[0]['name'], 'test4') + self.assertEquals(tests[1]['name'], 'test5') diff --git a/toolkit/components/ctypes/tests/moz.build b/toolkit/components/ctypes/tests/moz.build index c54142e537..f2937d83b6 100644 --- a/toolkit/components/ctypes/tests/moz.build +++ b/toolkit/components/ctypes/tests/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini'] MOCHITEST_CHROME_MANIFESTS += ['chrome/chrome.ini'] diff --git a/xpcom/glue/Makefile.in b/xpcom/glue/Makefile.in index 53281f1d03..54343530fc 100644 --- a/xpcom/glue/Makefile.in +++ b/xpcom/glue/Makefile.in @@ -3,6 +3,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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 # Force to build a static library only -NO_EXPAND_LIBS = 1 +#NO_EXPAND_LIBS = 1 diff --git a/xpcom/glue/moz.build b/xpcom/glue/moz.build index e314b826cf..9639ae5a35 100644 --- a/xpcom/glue/moz.build +++ b/xpcom/glue/moz.build @@ -117,3 +117,8 @@ FAIL_ON_WARNINGS = True USE_LIBS += [ 'fallible', ] + +# Force to build a static library only +NO_EXPAND_LIBS = True + +DIST_INSTALL = True diff --git a/xpcom/glue/nomozalloc/Makefile.in b/xpcom/glue/nomozalloc/Makefile.in index 53281f1d03..54343530fc 100644 --- a/xpcom/glue/nomozalloc/Makefile.in +++ b/xpcom/glue/nomozalloc/Makefile.in @@ -3,6 +3,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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 # Force to build a static library only -NO_EXPAND_LIBS = 1 +#NO_EXPAND_LIBS = 1 diff --git a/xpcom/glue/nomozalloc/moz.build b/xpcom/glue/nomozalloc/moz.build index df53bca9bb..fa5cac28c1 100644 --- a/xpcom/glue/nomozalloc/moz.build +++ b/xpcom/glue/nomozalloc/moz.build @@ -47,3 +47,9 @@ FAIL_ON_WARNINGS = True USE_LIBS += [ 'fallible', ] + +# Force to build a static library only +NO_EXPAND_LIBS = True + +DIST_INSTALL = True + diff --git a/xpcom/glue/standalone/Makefile.in b/xpcom/glue/standalone/Makefile.in index 94de86bce2..a9a2489429 100644 --- a/xpcom/glue/standalone/Makefile.in +++ b/xpcom/glue/standalone/Makefile.in @@ -3,9 +3,9 @@ # 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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 # Force to build a static library only -NO_EXPAND_LIBS = 1 +#NO_EXPAND_LIBS = 1 -if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'): - CXXFLAGS += CONFIG['GLIB_CFLAGS'] +#if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'): +# CXXFLAGS += CONFIG['GLIB_CFLAGS'] diff --git a/xpcom/glue/standalone/moz.build b/xpcom/glue/standalone/moz.build index a979e6b7fb..4f24c50a31 100644 --- a/xpcom/glue/standalone/moz.build +++ b/xpcom/glue/standalone/moz.build @@ -49,3 +49,11 @@ FAIL_ON_WARNINGS = True USE_LIBS += [ 'fallible', ] + +# Force to build a static library only +NO_EXPAND_LIBS = True + +DIST_INSTALL = True + +if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'): + CXXFLAGS += CONFIG['GLIB_CFLAGS'] diff --git a/xpcom/glue/standalone/staticruntime/Makefile.in b/xpcom/glue/standalone/staticruntime/Makefile.in index 3c864a58f6..b0c72be91c 100644 --- a/xpcom/glue/standalone/staticruntime/Makefile.in +++ b/xpcom/glue/standalone/staticruntime/Makefile.in @@ -2,6 +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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 # Force to build a static library only -NO_EXPAND_LIBS = 1 +#NO_EXPAND_LIBS = 1 diff --git a/xpcom/glue/standalone/staticruntime/moz.build b/xpcom/glue/standalone/staticruntime/moz.build index cb9c244598..2ed177f3b2 100644 --- a/xpcom/glue/standalone/staticruntime/moz.build +++ b/xpcom/glue/standalone/staticruntime/moz.build @@ -44,3 +44,8 @@ FAIL_ON_WARNINGS = True USE_LIBS += [ 'fallible', ] + +# Force to build a static library only +NO_EXPAND_LIBS = True + +DIST_INSTALL = True diff --git a/xpcom/glue/staticruntime/Makefile.in b/xpcom/glue/staticruntime/Makefile.in index 53281f1d03..54343530fc 100644 --- a/xpcom/glue/staticruntime/Makefile.in +++ b/xpcom/glue/staticruntime/Makefile.in @@ -3,6 +3,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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 # Force to build a static library only -NO_EXPAND_LIBS = 1 +#NO_EXPAND_LIBS = 1 diff --git a/xpcom/glue/staticruntime/moz.build b/xpcom/glue/staticruntime/moz.build index aa4960825e..595602b294 100644 --- a/xpcom/glue/staticruntime/moz.build +++ b/xpcom/glue/staticruntime/moz.build @@ -42,3 +42,8 @@ FAIL_ON_WARNINGS = True USE_LIBS += [ 'fallible', ] + +# Force to build a static library only +NO_EXPAND_LIBS = True + +DIST_INSTALL = True diff --git a/xpcom/tests/bug656331_component/moz.build b/xpcom/tests/bug656331_component/moz.build index 39351d514b..a8f34881dc 100644 --- a/xpcom/tests/bug656331_component/moz.build +++ b/xpcom/tests/bug656331_component/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False SOURCES += [ 'TestComponent.cpp', diff --git a/xpcom/tests/component/moz.build b/xpcom/tests/component/moz.build index 22be0dd9a8..9094610ec8 100644 --- a/xpcom/tests/component/moz.build +++ b/xpcom/tests/component/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False SOURCES += [ 'TestComponent.cpp', diff --git a/xpcom/tests/component_no_aslr/moz.build b/xpcom/tests/component_no_aslr/moz.build index bda7dcd4ec..c3953d0cbb 100644 --- a/xpcom/tests/component_no_aslr/moz.build +++ b/xpcom/tests/component_no_aslr/moz.build @@ -4,7 +4,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/. -NO_DIST_INSTALL = True +DIST_INSTALL = False SOURCES += [ 'TestComponent.cpp', diff --git a/xpcom/typelib/xpt/Makefile.in b/xpcom/typelib/xpt/Makefile.in index f20abaafd5..85353a8a06 100644 --- a/xpcom/typelib/xpt/Makefile.in +++ b/xpcom/typelib/xpt/Makefile.in @@ -3,4 +3,4 @@ # 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/. -DIST_INSTALL = 1 +#DIST_INSTALL = 1 diff --git a/xpcom/typelib/xpt/moz.build b/xpcom/typelib/xpt/moz.build index 0dd5e3a2cd..0070db8c9d 100644 --- a/xpcom/typelib/xpt/moz.build +++ b/xpcom/typelib/xpt/moz.build @@ -36,3 +36,5 @@ if CONFIG['_MSC_VER']: # inline operator new definitions that MSVC linker doesn't strip # when linking the xpt tests without mozalloc. DEFINES['MOZ_NO_MOZALLOC'] = True + +DIST_INSTALL = True