gecko-dev/moz.configure
Gregory Szorc 2d6fb1ed77 Bug 1275297 - Create Visual Studio project files by default on Windows; r=glandium
Now that the VisualStudio backend will no-op if nothing has changed, it
should be safe to always run this backend.

On first run, backend generation takes ~3.5s on my machine. On subsequent run,
it takes ~1.5s. Wall time for a no-op config.status is now ~15.7s. We could like
make the Visual Studio backend faster by not writing so many project files.
But this would require consolidating libraries in moz.build files. And that's
out of scope for this change.

We drop the check for MSVS_VERSION because it won't always be defined on
MinGW/GCC builds. We simply default to "2015" if it isn't set.

MozReview-Commit-ID: 5W38HMGmcuV

--HG--
extra : rebase_source : 302d76277058819c115f3c2518b8cb2067971950
extra : source : 408319d87eacb28848efeab0346eb815440adade
2016-05-24 08:47:24 -07:00

219 lines
6.8 KiB
Python

# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# 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')
# 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.
# 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:
return True
set_config('E10S_TESTING_ONLY', e10s_testing_only)
set_define('E10S_TESTING_ONLY', e10s_testing_only)
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:
return True
set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
@depends('--enable-artifact-builds')
def imply_disable_compile_environment(value):
if value:
return False
imply_option('--enable-compile-environment', imply_disable_compile_environment)
option('--disable-compile-environment',
help='Disable compiler/library checks')
@depends('--disable-compile-environment')
def compile_environment(compile_env):
if compile_env:
return True
set_config('COMPILE_ENVIRONMENT', compile_environment)
add_old_configure_assignment('COMPILE_ENVIRONMENT', compile_environment)
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'))
@depends('--disable-compile-environment', '--help')
def toolchain_include(compile_env, help):
if compile_env:
return 'build/moz.configure/toolchain.configure'
include(toolchain_include)
@depends('--disable-compile-environment', '--help')
def memory_include(compile_env, help):
if compile_env:
return 'build/moz.configure/memory.configure'
include(memory_include)
@depends('--help')
@imports(_from='mozbuild.backend', _import='backends')
def build_backends_choices(help):
return tuple(backends)
option('--enable-build-backend', nargs='+', choices=build_backends_choices,
help='Enable additional build backends')
@depends('--enable-build-backend', '--enable-artifact-builds', target,
compile_environment)
def build_backend(backends, artifact_builds, target, compile_environment):
if artifact_builds:
all_backends = ['FasterMake+RecursiveMake']
else:
all_backends = ['RecursiveMake', 'FasterMake']
if target.os == 'WINNT' and compile_environment:
all_backends.append('VisualStudio')
all_backends.extend(backends)
return unique_list(all_backends)
set_config('BUILD_BACKENDS', build_backend)
# 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):
return value
add_old_configure_assignment('AWK', awk_for_old_configure)
# 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):
return value
add_old_configure_assignment('PERL', perl_for_old_configure)
@template
def perl_version_check(min_version):
@depends(perl)
@checking('for minimum required perl version >= %s' % min_version)
def get_perl_version(perl):
return Version(check_cmd_output(
perl, '-e', 'print $]',
onerror=lambda: die('Failed to get perl version.')
))
@depends(get_perl_version)
def check_perl_version(version):
if version < min_version:
die('Perl %s or higher is required.', min_version)
@depends(perl)
@checking('for full perl installation')
@imports('subprocess')
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:
die('Cannot find Config.pm or $Config{archlib}. '
'A full perl installation is required.')
perl_version_check('5.006')
# Miscellaneous programs
# ==============================================================
check_prog('DOXYGEN', ('doxygen',), allow_missing=True)
check_prog('XARGS', ('xargs',))
@depends(target)
def extra_programs(target):
if target.kernel == 'Darwin':
return namespace(
DSYMUTIL=('dsymutil', 'llvm-dsymutil'),
GENISOIMAGE=('genisoimage',),
)
if target.os == 'GNU' and target.kernel == 'Linux':
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)
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)
# Fallthrough to autoconf-based configure
include('build/moz.configure/old.configure')
# Please do not add anything after the include of old.configure.