Including infrastructure changes to ensure correct opts for future changes. Based-on: m-c 1325632, 1418047, 1418573
226 lines
7.3 KiB
Plaintext
226 lines
7.3 KiB
Plaintext
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
|
# 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.
|
|
# - Browser-specific options and rules should go in browser/moz.configure.
|
|
# - Spidermonkey-specific options and rules should go in js/moz.configure.
|
|
# - etc.
|
|
|
|
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('--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('build/moz.configure/pkg.configure')
|
|
# Make this assignment here rather than in pkg.configure to avoid
|
|
# requiring this file in unit tests.
|
|
add_old_configure_assignment('PKG_CONFIG', pkg_config)
|
|
|
|
include('build/moz.configure/toolchain.configure',
|
|
when='--enable-compile-environment')
|
|
include('build/moz.configure/memory.configure',
|
|
when='--enable-compile-environment')
|
|
include('build/moz.configure/headers.configure',
|
|
when='--enable-compile-environment')
|
|
include('build/moz.configure/warnings.configure',
|
|
when='--enable-compile-environment')
|
|
include('build/moz.configure/flags.configure',
|
|
when='--enable-compile-environment')
|
|
|
|
include(include_project_configure)
|
|
|
|
# Supported build back-ends: RecursiveMake and FasterMake
|
|
set_config('BUILD_BACKENDS', tuple(['RecursiveMake', 'FasterMake']))
|
|
|
|
|
|
# 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')
|
|
|
|
|
|
# GNU make detection
|
|
# ==============================================================
|
|
option(env='MAKE', nargs=1, help='Path to GNU make')
|
|
|
|
@depends('MAKE', host)
|
|
def possible_makes(make, host):
|
|
candidates = []
|
|
if host.kernel == 'WINNT':
|
|
candidates.append('mingw32-make')
|
|
if make:
|
|
candidates.append(make[0])
|
|
if host.kernel == 'WINNT':
|
|
candidates.extend(('make', 'gmake'))
|
|
else:
|
|
candidates.extend(('gmake', 'make'))
|
|
return candidates
|
|
|
|
check_prog('GMAKE', possible_makes)
|
|
|
|
# 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',
|
|
when=check_for_hunspell)
|
|
|
|
set_config('MOZ_SYSTEM_HUNSPELL', depends_if(system_hunspell)(lambda _: True))
|
|
|
|
|
|
@depends(target)
|
|
@imports('os')
|
|
def makensis_progs(target):
|
|
if target.kernel != 'WINNT':
|
|
return
|
|
|
|
candidates = [
|
|
'makensis-3.01.exe',
|
|
'makensis-3.0b3.exe',
|
|
'makensis-3.0b1.exe',
|
|
'makensis.exe',
|
|
'makensis',
|
|
]
|
|
|
|
# Look for nsis installed by msys environment. But only the 32-bit version.
|
|
# We use an absolute path and insert as the first entry so it is preferred
|
|
# over a 64-bit exe that may be in PATH.
|
|
if 'MSYSTEM_PREFIX' in os.environ:
|
|
prefix = os.path.dirname(os.environ['MSYSTEM_PREFIX'])
|
|
candidates.insert(0, os.path.join(prefix, 'mingw32', 'bin', 'makensis.exe'))
|
|
|
|
return tuple(candidates)
|
|
|
|
nsis = check_prog('MAKENSISU', makensis_progs)
|
|
|
|
# Make sure the version of makensis is up to date.
|
|
@depends_if(nsis)
|
|
@checking('for NSIS version')
|
|
@imports('re')
|
|
def nsis_version(nsis):
|
|
nsis_min_version = '3.0b1'
|
|
out = check_cmd_output(nsis, '-version',
|
|
onerror=lambda: die('Failed to get nsis version.'))
|
|
m = re.search(r'(?<=v)[0-9]+\.[0-9]+((a|b|rc)[0-9]+)?', out)
|
|
|
|
if not m:
|
|
raise FatalCheckError('Unknown version of makensis')
|
|
ver = Version(m.group(0))
|
|
|
|
# Versions comparisons don't quite work well with beta versions, so ensure
|
|
# it works for the non-beta version.
|
|
if ver < nsis_min_version and (ver >= '3.0a' or ver < '3'):
|
|
raise FatalCheckError('To build the installer you must have NSIS'
|
|
' version %s or greater in your path'
|
|
% nsis_min_version)
|
|
|
|
return ver
|
|
|
|
# And that makensis is 32-bit.
|
|
@depends_if(nsis)
|
|
@checking('for 32-bit NSIS')
|
|
def nsis_binary_type(nsis):
|
|
bin_type = windows_binary_type(nsis)
|
|
if bin_type != 'win32':
|
|
raise FatalCheckError('%s is not a 32-bit Windows application' % nsis)
|
|
|
|
return 'yes'
|
|
|
|
|
|
# Fallthrough to autoconf-based configure
|
|
include('build/moz.configure/old.configure')
|
|
# Please do not add anything after the include of old.configure.
|