2016-03-04 11:31:10 +03:00
|
|
|
# -*- 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')
|
2016-03-15 04:45:12 +03:00
|
|
|
include('build/moz.configure/checks.configure')
|
2016-03-04 11:31:10 +03:00
|
|
|
|
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
|
|
|
|
|
|
|
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:
|
|
|
|
imply_option('--disable-compile-environment')
|
|
|
|
set_config('MOZ_ARTIFACT_BUILDS', '1')
|
|
|
|
return bool(value)
|
|
|
|
|
|
|
|
|
|
|
|
option('--disable-compile-environment',
|
|
|
|
help='Disable compiler/library checks')
|
|
|
|
|
|
|
|
@depends('--disable-compile-environment')
|
|
|
|
def compile_environment(value):
|
|
|
|
if value:
|
|
|
|
set_config('COMPILE_ENVIRONMENT', '1')
|
2016-03-10 02:23:10 +03:00
|
|
|
add_old_configure_assignment('COMPILE_ENVIRONMENT', '1')
|
2016-03-04 12:02:39 +03:00
|
|
|
return bool(value)
|
|
|
|
|
|
|
|
|
|
|
|
@depends('--help')
|
|
|
|
@advanced
|
|
|
|
def build_backends_choices(help):
|
|
|
|
from mozbuild.backend import backends
|
|
|
|
return tuple(backends)
|
|
|
|
|
|
|
|
|
|
|
|
option('--enable-build-backend', nargs='+', choices=build_backends_choices,
|
|
|
|
help='Enable additional build backends')
|
|
|
|
|
|
|
|
@depends('--enable-build-backend', '--enable-artifact-builds')
|
|
|
|
def build_backend(backends, artifact_builds):
|
|
|
|
if artifact_builds:
|
|
|
|
all_backends = ['FasterMake+RecursiveMake']
|
|
|
|
else:
|
|
|
|
all_backends = ['RecursiveMake', 'FasterMake']
|
|
|
|
all_backends.extend(backends)
|
|
|
|
set_config('BUILD_BACKENDS', unique_list(all_backends))
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
add_old_configure_assignment('AWK', value)
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
add_old_configure_assignment('PERL', value)
|
|
|
|
|
|
|
|
@template
|
|
|
|
def perl_version_check(min_version):
|
|
|
|
@depends(perl)
|
|
|
|
@checking('for minimum required perl version >= %s' % min_version)
|
|
|
|
@advanced
|
|
|
|
def get_perl_version(perl):
|
|
|
|
import subprocess
|
|
|
|
try:
|
2016-03-17 18:52:18 +03:00
|
|
|
return Version(subprocess.check_output([perl, '-e', 'print $]']))
|
2016-03-15 05:23:29 +03:00
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
|
error('Failed to get perl version: %s' % e.message)
|
|
|
|
|
|
|
|
@depends(get_perl_version)
|
|
|
|
def check_perl_version(version):
|
|
|
|
if version < min_version:
|
|
|
|
error('Perl %s or higher is required.' % min_version)
|
|
|
|
|
|
|
|
@depends(perl)
|
|
|
|
@checking('for full perl installation')
|
|
|
|
@advanced
|
|
|
|
def has_full_perl_installation(perl):
|
|
|
|
import subprocess
|
|
|
|
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:
|
|
|
|
error('Cannot find Config.pm or $Config{archlib}. '
|
|
|
|
'A full perl installation is required.')
|
|
|
|
|
|
|
|
perl_version_check('5.006')
|
|
|
|
|
|
|
|
|
2016-03-15 05:38:06 +03:00
|
|
|
# Miscellaneous programs
|
|
|
|
# ==============================================================
|
|
|
|
check_prog('DOXYGEN', ('doxygen',), allow_missing=True)
|
2016-03-15 12:04:12 +03:00
|
|
|
check_prog('TAR', ('gnutar', 'gtar', 'tar'))
|
2016-03-15 05:38:06 +03:00
|
|
|
check_prog('UNZIP', ('unzip',))
|
|
|
|
check_prog('XARGS', ('xargs',))
|
|
|
|
check_prog('ZIP', ('zip',))
|
|
|
|
|
2016-03-15 12:19:24 +03:00
|
|
|
@depends(target)
|
|
|
|
def mac_programs(target):
|
2016-03-16 02:23:31 +03:00
|
|
|
if target.kernel == 'Darwin':
|
2016-03-15 12:19:24 +03:00
|
|
|
check_prog('DSYMUTIL', ('dsymutil', 'llvm-dsymutil'), allow_missing=True)
|
|
|
|
check_prog('GENISOIMAGE', ('genisoimage',), allow_missing=True)
|
|
|
|
|
|
|
|
@depends(target)
|
|
|
|
def linux_programs(target):
|
|
|
|
if target.os == 'GNU' and target.kernel == 'Linux':
|
|
|
|
check_prog('RPMBUILD', ('rpmbuild',), allow_missing=True)
|
|
|
|
|
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')
|