Skip to content
Snippets Groups Projects
moz.configure 7.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • # -*- Mode: python; 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'))
    
    
    js_option('--enable-debug',
              nargs='?',
              help='Enable building with developer debug info '
                   '(using the given compiler flags).')
    
    
    add_old_configure_assignment('MOZ_DEBUG',
                                 depends('--enable-debug')(lambda v: bool(v)))
    
    include_when('build/moz.configure/toolchain.configure',
                 when='--enable-compile-environment')
    include_when('build/moz.configure/memory.configure',
                 when='--enable-compile-environment')
    include_when('build/moz.configure/headers.configure',
                 when='--enable-compile-environment')
    
    @imports(_from='mozbuild.backend', _import='backends')
    
    def build_backends_choices(help):
        return tuple(backends)
    
    
    
    @deprecated_option('--enable-build-backend', nargs='+',
                       choices=build_backends_choices)
    def build_backend(backends):
        if backends:
            return tuple('+%s' % b for b in backends)
    
    imply_option('--build-backends', build_backend)
    
    
    @depends('--enable-artifact-builds', '--disable-compile-environment', '--help')
    @imports('sys')
    def build_backend_defaults(artifact_builds, compile_environment, _):
    
        if artifact_builds:
            all_backends = ['FasterMake+RecursiveMake']
        else:
            all_backends = ['RecursiveMake', 'FasterMake']
    
        # 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:
    
        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
    
    set_config('BUILD_BACKENDS', build_backends)
    
    # 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')
    
        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.')
    
    # Miscellaneous programs
    # ==============================================================
    check_prog('DOXYGEN', ('doxygen',), allow_missing=True)
    check_prog('XARGS', ('xargs',))
    
    
            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.