2016-07-14 19:16:42 +03:00
|
|
|
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
2016-03-04 11:31:10 +03:00
|
|
|
# vim: set filetype=python:
|
|
|
|
# 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/.
|
|
|
|
|
|
|
|
include('build/moz.configure/init.configure')
|
|
|
|
|
2016-03-08 07:49:35 +03:00
|
|
|
# Note:
|
|
|
|
# - Gecko-specific options and rules should go in toolkit/moz.configure.
|
|
|
|
# - Firefox-specific options and rules should go in browser/moz.configure.
|
|
|
|
# - Fennec-specific options and rules should go in
|
|
|
|
# mobile/android/moz.configure.
|
|
|
|
# - Spidermonkey-specific options and rules should go in js/moz.configure.
|
|
|
|
# - etc.
|
2016-03-04 12:02:39 +03:00
|
|
|
|
2016-03-18 21:24:11 +03:00
|
|
|
# Multiprocess Firefox Testing UI - Nightly and Aurora
|
|
|
|
# To be removed in Bug 1003313
|
|
|
|
@depends(milestone)
|
|
|
|
def e10s_testing_only(milestone):
|
|
|
|
if not milestone.is_release:
|
2016-03-22 08:21:32 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
set_config('E10S_TESTING_ONLY', e10s_testing_only)
|
2016-03-23 04:22:08 +03:00
|
|
|
set_define('E10S_TESTING_ONLY', e10s_testing_only)
|
2016-03-18 21:24:11 +03:00
|
|
|
|
|
|
|
|
2016-03-04 12:02:39 +03:00
|
|
|
option('--enable-artifact-builds', env='MOZ_ARTIFACT_BUILDS',
|
|
|
|
help='Download and use prebuilt binary artifacts.')
|
|
|
|
|
|
|
|
@depends('--enable-artifact-builds')
|
|
|
|
def artifact_builds(value):
|
|
|
|
if value:
|
2016-03-22 08:21:32 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
2016-03-23 08:18:57 +03:00
|
|
|
@depends('--enable-artifact-builds')
|
|
|
|
def imply_disable_compile_environment(value):
|
|
|
|
if value:
|
|
|
|
return False
|
|
|
|
|
|
|
|
imply_option('--enable-compile-environment', imply_disable_compile_environment)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
|
|
|
option('--disable-compile-environment',
|
|
|
|
help='Disable compiler/library checks')
|
|
|
|
|
|
|
|
@depends('--disable-compile-environment')
|
2016-04-14 11:07:57 +03:00
|
|
|
def compile_environment(compile_env):
|
|
|
|
if compile_env:
|
2016-03-22 08:21:32 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
set_config('COMPILE_ENVIRONMENT', compile_environment)
|
2016-03-23 10:34:59 +03:00
|
|
|
add_old_configure_assignment('COMPILE_ENVIRONMENT', compile_environment)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
2016-05-25 02:02:54 +03:00
|
|
|
js_option('--disable-tests',
|
|
|
|
help='Do not build test libraries & programs')
|
|
|
|
|
|
|
|
@depends('--disable-tests')
|
|
|
|
def enable_tests(value):
|
|
|
|
if value:
|
|
|
|
return True
|
|
|
|
|
|
|
|
set_config('ENABLE_TESTS', enable_tests)
|
|
|
|
set_define('ENABLE_TESTS', enable_tests)
|
|
|
|
|
|
|
|
@depends(enable_tests)
|
|
|
|
def gtest_has_rtti(value):
|
|
|
|
if value:
|
|
|
|
return '0'
|
|
|
|
|
|
|
|
set_define('GTEST_HAS_RTTI', gtest_has_rtti)
|
|
|
|
|
|
|
|
@depends(target, enable_tests)
|
|
|
|
def linux_gtest_defines(target, enable_tests):
|
|
|
|
if enable_tests and target.os == 'Android':
|
|
|
|
return namespace(os_linux_android=True,
|
|
|
|
use_own_tr1_tuple=True,
|
|
|
|
has_clone='0')
|
|
|
|
|
|
|
|
set_define('GTEST_OS_LINUX_ANDROID',
|
|
|
|
delayed_getattr(linux_gtest_defines, 'os_linux_android'))
|
|
|
|
set_define('GTEST_USE_OWN_TR1_TUPLE',
|
|
|
|
delayed_getattr(linux_gtest_defines, 'use_own_tr1_tuple'))
|
|
|
|
set_define('GTEST_HAS_CLONE',
|
|
|
|
delayed_getattr(linux_gtest_defines, 'has_clone'))
|
|
|
|
|
2016-06-21 02:02:01 +03:00
|
|
|
js_option('--enable-debug',
|
|
|
|
nargs='?',
|
|
|
|
help='Enable building with developer debug info '
|
|
|
|
'(using the given compiler flags).')
|
|
|
|
|
2016-06-24 22:36:16 +03:00
|
|
|
add_old_configure_assignment('MOZ_DEBUG',
|
|
|
|
depends('--enable-debug')(lambda v: bool(v)))
|
2016-06-21 02:02:01 +03:00
|
|
|
|
2016-03-24 02:36:23 +03:00
|
|
|
@depends('--disable-compile-environment', '--help')
|
2016-04-14 11:07:57 +03:00
|
|
|
def toolchain_include(compile_env, help):
|
|
|
|
if compile_env:
|
2016-03-24 02:36:23 +03:00
|
|
|
return 'build/moz.configure/toolchain.configure'
|
|
|
|
|
|
|
|
include(toolchain_include)
|
|
|
|
|
2016-04-14 11:07:57 +03:00
|
|
|
@depends('--disable-compile-environment', '--help')
|
|
|
|
def memory_include(compile_env, help):
|
|
|
|
if compile_env:
|
|
|
|
return 'build/moz.configure/memory.configure'
|
|
|
|
|
|
|
|
include(memory_include)
|
|
|
|
|
2016-07-27 01:27:19 +03:00
|
|
|
@depends('--disable-compile-environment', '--help')
|
|
|
|
def headers_check_include(compile_env, help):
|
|
|
|
if compile_env:
|
|
|
|
return 'build/moz.configure/headers.configure'
|
|
|
|
|
|
|
|
include(headers_check_include)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
|
|
|
@depends('--help')
|
2016-03-27 05:40:13 +03:00
|
|
|
@imports(_from='mozbuild.backend', _import='backends')
|
2016-03-04 12:02:39 +03:00
|
|
|
def build_backends_choices(help):
|
|
|
|
return tuple(backends)
|
|
|
|
|
|
|
|
|
2016-05-25 10:23:51 +03:00
|
|
|
@deprecated_option('--enable-build-backend', nargs='+',
|
|
|
|
choices=build_backends_choices)
|
|
|
|
def build_backend(backends):
|
|
|
|
if backends:
|
|
|
|
return tuple('+%s' % b for b in backends)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
2016-05-25 10:23:51 +03:00
|
|
|
imply_option('--build-backends', build_backend)
|
|
|
|
|
|
|
|
|
|
|
|
@depends('--enable-artifact-builds', '--disable-compile-environment', '--help')
|
|
|
|
@imports('sys')
|
|
|
|
def build_backend_defaults(artifact_builds, compile_environment, _):
|
2016-03-04 12:02:39 +03:00
|
|
|
if artifact_builds:
|
|
|
|
all_backends = ['FasterMake+RecursiveMake']
|
|
|
|
else:
|
|
|
|
all_backends = ['RecursiveMake', 'FasterMake']
|
2016-05-25 10:23:51 +03:00
|
|
|
# Normally, we'd use target.os == 'WINNT', but a dependency on target
|
|
|
|
# would require target to depend on --help, as well as host and shell,
|
|
|
|
# and this is not a can of worms we can open at the moment.
|
|
|
|
if sys.platform == 'win32' and compile_environment:
|
2016-05-24 18:47:24 +03:00
|
|
|
all_backends.append('VisualStudio')
|
2016-05-25 10:23:51 +03:00
|
|
|
return tuple(all_backends)
|
|
|
|
|
|
|
|
option('--build-backends', nargs='+', default=build_backend_defaults,
|
|
|
|
choices=build_backends_choices, help='Build backends to generate')
|
|
|
|
|
|
|
|
@depends('--build-backends')
|
|
|
|
def build_backends(backends):
|
|
|
|
return backends
|
2016-03-22 08:21:32 +03:00
|
|
|
|
2016-05-25 10:23:51 +03:00
|
|
|
set_config('BUILD_BACKENDS', build_backends)
|
2016-03-04 12:02:39 +03:00
|
|
|
|
|
|
|
|
2016-03-15 04:45:12 +03:00
|
|
|
# Awk detection
|
|
|
|
# ==============================================================
|
|
|
|
awk = check_prog('AWK', ('gawk', 'mawk', 'nawk', 'awk'))
|
|
|
|
|
|
|
|
# Until the AWK variable is not necessary in old-configure
|
|
|
|
@depends(awk)
|
|
|
|
def awk_for_old_configure(value):
|
2016-03-23 10:34:59 +03:00
|
|
|
return value
|
|
|
|
|
|
|
|
add_old_configure_assignment('AWK', awk_for_old_configure)
|
2016-03-15 04:45:12 +03:00
|
|
|
|
|
|
|
|
2016-03-15 05:23:29 +03:00
|
|
|
# Perl detection
|
|
|
|
# ==============================================================
|
|
|
|
perl = check_prog('PERL', ('perl5', 'perl'))
|
|
|
|
|
|
|
|
# Until the PERL variable is not necessary in old-configure
|
|
|
|
@depends(perl)
|
|
|
|
def perl_for_old_configure(value):
|
2016-03-23 10:34:59 +03:00
|
|
|
return value
|
|
|
|
|
|
|
|
add_old_configure_assignment('PERL', perl_for_old_configure)
|
2016-03-15 05:23:29 +03:00
|
|
|
|
|
|
|
@template
|
|
|
|
def perl_version_check(min_version):
|
|
|
|
@depends(perl)
|
|
|
|
@checking('for minimum required perl version >= %s' % min_version)
|
|
|
|
def get_perl_version(perl):
|
2016-05-18 00:40:03 +03:00
|
|
|
return Version(check_cmd_output(
|
|
|
|
perl, '-e', 'print $]',
|
|
|
|
onerror=lambda: die('Failed to get perl version.')
|
|
|
|
))
|
2016-03-15 05:23:29 +03:00
|
|
|
|
|
|
|
@depends(get_perl_version)
|
|
|
|
def check_perl_version(version):
|
|
|
|
if version < min_version:
|
2016-03-25 09:48:21 +03:00
|
|
|
die('Perl %s or higher is required.', min_version)
|
2016-03-15 05:23:29 +03:00
|
|
|
|
|
|
|
@depends(perl)
|
|
|
|
@checking('for full perl installation')
|
2016-03-27 05:40:13 +03:00
|
|
|
@imports('subprocess')
|
2016-03-15 05:23:29 +03:00
|
|
|
def has_full_perl_installation(perl):
|
|
|
|
ret = subprocess.call(
|
|
|
|
[perl, '-e', 'use Config; exit(!-d $Config{archlib})'])
|
|
|
|
return ret == 0
|
|
|
|
|
|
|
|
@depends(has_full_perl_installation)
|
|
|
|
def require_full_perl_installation(has_full_perl_installation):
|
|
|
|
if not has_full_perl_installation:
|
2016-03-25 09:48:21 +03:00
|
|
|
die('Cannot find Config.pm or $Config{archlib}. '
|
|
|
|
'A full perl installation is required.')
|
2016-03-15 05:23:29 +03:00
|
|
|
|
|
|
|
perl_version_check('5.006')
|
|
|
|
|
|
|
|
|
2016-03-15 05:38:06 +03:00
|
|
|
# Miscellaneous programs
|
|
|
|
# ==============================================================
|
|
|
|
check_prog('DOXYGEN', ('doxygen',), allow_missing=True)
|
|
|
|
check_prog('XARGS', ('xargs',))
|
|
|
|
|
2016-03-15 12:19:24 +03:00
|
|
|
@depends(target)
|
2016-03-28 01:22:09 +03:00
|
|
|
def extra_programs(target):
|
2016-03-16 02:23:31 +03:00
|
|
|
if target.kernel == 'Darwin':
|
2016-03-28 01:22:09 +03:00
|
|
|
return namespace(
|
|
|
|
DSYMUTIL=('dsymutil', 'llvm-dsymutil'),
|
|
|
|
GENISOIMAGE=('genisoimage',),
|
|
|
|
)
|
2016-03-15 12:19:24 +03:00
|
|
|
if target.os == 'GNU' and target.kernel == 'Linux':
|
2016-03-28 01:22:09 +03:00
|
|
|
return namespace(RPMBUILD=('rpmbuild',))
|
|
|
|
|
|
|
|
check_prog('DSYMUTIL', delayed_getattr(extra_programs, 'DSYMUTIL'),
|
|
|
|
allow_missing=True)
|
|
|
|
check_prog('GENISOIMAGE', delayed_getattr(extra_programs, 'GENISOIMAGE'),
|
|
|
|
allow_missing=True)
|
|
|
|
check_prog('RPMBUILD', delayed_getattr(extra_programs, 'RPMBUILD'),
|
|
|
|
allow_missing=True)
|
2016-03-15 12:19:24 +03:00
|
|
|
|
2016-05-18 00:40:03 +03:00
|
|
|
option('--enable-system-hunspell',
|
|
|
|
help="Use system hunspell (located with pkgconfig)")
|
|
|
|
|
|
|
|
@depends('--enable-system-hunspell', compile_environment)
|
|
|
|
def check_for_hunspell(value, compile_env):
|
|
|
|
return value and compile_env
|
|
|
|
|
|
|
|
system_hunspell = pkg_check_modules('MOZ_HUNSPELL', 'hunspell',
|
|
|
|
check_for_hunspell)
|
|
|
|
|
|
|
|
set_config('MOZ_SYSTEM_HUNSPELL', system_hunspell)
|
2016-03-15 05:38:06 +03:00
|
|
|
|
2016-03-04 11:31:10 +03:00
|
|
|
# Fallthrough to autoconf-based configure
|
|
|
|
include('build/moz.configure/old.configure')
|
2016-04-14 02:51:09 +03:00
|
|
|
# Please do not add anything after the include of old.configure.
|