Bug 1589508 - Fix three xpinstall/browser_enabled* tests r=mixedpuppy
[gecko.git] / moz.configure
blob443558c58e1fbd3191855613165d30b815377b06
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
2 # vim: set filetype=python:
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 include('build/moz.configure/init.configure')
9 # Note:
10 # - Gecko-specific options and rules should go in toolkit/moz.configure.
11 # - Firefox-specific options and rules should go in browser/moz.configure.
12 # - Fennec-specific options and rules should go in
13 #   mobile/android/moz.configure.
14 # - Spidermonkey-specific options and rules should go in js/moz.configure.
15 # - etc.
17 option('--enable-artifact-builds', env='MOZ_ARTIFACT_BUILDS',
18        help='Download and use prebuilt binary artifacts.')
20 @depends('--enable-artifact-builds')
21 def artifact_builds(value):
22     if value:
23         return True
25 set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
27 imply_option('--enable-artifact-build-symbols',
28              depends(artifact_builds)(lambda v: False if v is None else None),
29              reason='--disable-artifact-builds')
31 option('--enable-artifact-build-symbols', nargs='?', choices=('full',),
32        help='Download symbols when artifact builds are enabled.')
34 @depends('--enable-artifact-build-symbols', 'MOZ_AUTOMATION', target)
35 def enable_artifact_build_symbols(value, automation, target):
36     if len(value):
37         return value[0]
38     if bool(value):
39         if target.os == 'Android' and not automation:
40             return 'full'
41         return True
42     return None
44 set_config('MOZ_ARTIFACT_BUILD_SYMBOLS',
45            enable_artifact_build_symbols)
47 @depends('--enable-artifact-builds')
48 def imply_disable_compile_environment(value):
49     if value:
50         return False
52 option(env='MOZ_COPY_PDBS',
53     help='For builds that do not support symbols in the normal fashion,'
54          ' generate and copy them into the resulting build archive.')
56 set_config('MOZ_COPY_PDBS', depends_if('MOZ_COPY_PDBS')(lambda _: True))
58 imply_option('--enable-compile-environment', imply_disable_compile_environment)
60 option('--disable-compile-environment',
61        help='Disable compiler/library checks')
63 @depends('--disable-compile-environment')
64 def compile_environment(compile_env):
65     if compile_env:
66         return True
68 set_config('COMPILE_ENVIRONMENT', compile_environment)
69 add_old_configure_assignment('COMPILE_ENVIRONMENT', compile_environment)
71 js_option('--disable-tests',
72           help='Do not build test libraries & programs')
74 @depends('--disable-tests')
75 def enable_tests(value):
76     if value:
77         return True
79 set_config('ENABLE_TESTS', enable_tests)
80 set_define('ENABLE_TESTS', enable_tests)
82 @depends(enable_tests)
83 def gtest_has_rtti(value):
84     if value:
85         return '0'
87 set_define('GTEST_HAS_RTTI', gtest_has_rtti)
89 @depends(target, enable_tests)
90 def linux_gtest_defines(target, enable_tests):
91     if enable_tests and target.os == 'Android':
92         return namespace(os_linux_android=True,
93                          use_own_tr1_tuple=True,
94                          has_clone='0')
96 set_define('GTEST_OS_LINUX_ANDROID',
97            linux_gtest_defines.os_linux_android)
98 set_define('GTEST_USE_OWN_TR1_TUPLE',
99            linux_gtest_defines.use_own_tr1_tuple)
100 set_define('GTEST_HAS_CLONE',
101            linux_gtest_defines.has_clone)
103 js_option('--enable-debug',
104           nargs='?',
105           help='Enable building with developer debug info '
106                '(using the given compiler flags).')
108 @depends('--enable-debug')
109 def moz_debug(debug):
110     if debug:
111         return bool(debug)
113 set_config('MOZ_DEBUG', moz_debug)
114 set_define('MOZ_DEBUG', moz_debug)
115 # Override any value MOZ_DEBUG may have from the environment when passing it
116 # down to old-configure.
117 add_old_configure_assignment('MOZ_DEBUG',
118                              depends('--enable-debug')(lambda x: bool(x)))
120 js_option('--enable-rust-debug',
121           default=depends(when='--enable-debug')(lambda: True),
122           help='{Build|Do not build} Rust code with debug assertions turned '
123                'on.')
125 @depends(when='--enable-rust-debug')
126 def debug_rust():
127     return True
129 set_config('MOZ_DEBUG_RUST', debug_rust)
130 set_define('MOZ_DEBUG_RUST', debug_rust)
132 js_option(env='MOZ_PGO', help='Build with profile guided optimizations')
134 set_config('MOZ_PGO', depends('MOZ_PGO')(lambda x: bool(x)))
136 include('build/moz.configure/toolchain.configure',
137         when='--enable-compile-environment')
139 include('build/moz.configure/pkg.configure')
140 # Make this assignment here rather than in pkg.configure to avoid
141 # requiring this file in unit tests.
142 add_old_configure_assignment('PKG_CONFIG', pkg_config)
144 include('build/moz.configure/memory.configure',
145         when='--enable-compile-environment')
146 include('build/moz.configure/headers.configure',
147         when='--enable-compile-environment')
148 include('build/moz.configure/warnings.configure',
149         when='--enable-compile-environment')
150 include('build/moz.configure/flags.configure',
151         when='--enable-compile-environment')
152 # rust.configure is included by js/moz.configure.
154 js_option('--enable-valgrind',
155           help='Enable Valgrind integration hooks')
157 valgrind_h = check_header('valgrind/valgrind.h', when='--enable-valgrind')
159 @depends('--enable-valgrind', valgrind_h)
160 def check_valgrind(valgrind, valgrind_h):
161     if valgrind:
162         if not valgrind_h:
163             die('--enable-valgrind specified but Valgrind is not installed')
164         return True
166 set_define('MOZ_VALGRIND', check_valgrind)
167 set_config('MOZ_VALGRIND', check_valgrind)
169 @depends(target, host)
170 def is_openbsd(target, host):
171     return target.kernel == 'OpenBSD' or host.kernel == 'OpenBSD'
173 option(env='SO_VERSION', nargs=1, default='1.0', when=is_openbsd,
174        help='Shared library version for OpenBSD systems')
176 @depends('SO_VERSION', when=is_openbsd)
177 def so_version(value):
178     return value
180 @template
181 def library_name_info_template(host_or_target):
182     assert host_or_target in {host, target}
183     compiler = {
184         host: host_c_compiler,
185         target: c_compiler,
186     }[host_or_target]
188     @depends(host_or_target, compiler, so_version)
189     def library_name_info_impl(host_or_target, compiler, so_version):
190         if host_or_target.kernel == 'WINNT':
191             # There aren't artifacts for mingw builds, so it's OK that the
192             # results are inaccurate in that case.
193             if compiler and compiler.type != 'clang-cl':
194                 return namespace(
195                     dll=namespace(prefix='', suffix='.dll'),
196                     lib=namespace(prefix='lib', suffix='a'),
197                     import_lib=namespace(prefix='lib', suffix='a'),
198                     rust_lib=namespace(prefix='', suffix='lib'),
199                     obj=namespace(prefix='', suffix='o'),
200                 )
202             return namespace(
203                 dll=namespace(prefix='', suffix='.dll'),
204                 lib=namespace(prefix='', suffix='lib'),
205                 import_lib=namespace(prefix='', suffix='lib'),
206                 rust_lib=namespace(prefix='', suffix='lib'),
207                 obj=namespace(prefix='', suffix='obj'),
208             )
210         elif host_or_target.kernel == 'Darwin':
211             return namespace(
212                 dll=namespace(prefix='lib', suffix='.dylib'),
213                 lib=namespace(prefix='lib', suffix='a'),
214                 import_lib=namespace(prefix=None, suffix=''),
215                 rust_lib=namespace(prefix='lib', suffix='a'),
216                 obj=namespace(prefix='', suffix='o'),
217             )
218         elif so_version:
219             so = '.so.%s' % so_version
220         else:
221             so = '.so'
223         return namespace(
224             dll=namespace(prefix='lib', suffix=so),
225             lib=namespace(prefix='lib', suffix='a'),
226             import_lib=namespace(prefix=None, suffix=''),
227             rust_lib=namespace(prefix='lib', suffix='a'),
228             obj=namespace(prefix='', suffix='o'),
229         )
231     return library_name_info_impl
233 host_library_name_info = library_name_info_template(host)
234 library_name_info = library_name_info_template(target)
236 set_config('DLL_PREFIX', library_name_info.dll.prefix)
237 set_config('DLL_SUFFIX', library_name_info.dll.suffix)
238 set_config('HOST_DLL_PREFIX', host_library_name_info.dll.prefix)
239 set_config('HOST_DLL_SUFFIX', host_library_name_info.dll.suffix)
240 set_config('LIB_PREFIX', library_name_info.lib.prefix)
241 set_config('LIB_SUFFIX', library_name_info.lib.suffix)
242 set_config('RUST_LIB_PREFIX', library_name_info.rust_lib.prefix)
243 set_config('RUST_LIB_SUFFIX', library_name_info.rust_lib.suffix)
244 set_config('OBJ_SUFFIX', library_name_info.obj.suffix)
245 # Lots of compilation tests depend on this variable being present.
246 add_old_configure_assignment('OBJ_SUFFIX', library_name_info.obj.suffix)
247 set_config('IMPORT_LIB_SUFFIX', library_name_info.import_lib.suffix)
248 set_define('MOZ_DLL_PREFIX', depends(library_name_info.dll.prefix)(lambda s: '"%s"' % s))
249 set_define('MOZ_DLL_SUFFIX', depends(library_name_info.dll.suffix)(lambda s: '"%s"' % s))
251 include(include_project_configure)
253 @depends('--help')
254 @imports(_from='mozbuild.backend', _import='backends')
255 def build_backends_choices(_):
256     return tuple(backends)
259 @deprecated_option('--enable-build-backend', nargs='+',
260                    choices=build_backends_choices)
261 def build_backend(backends):
262     if backends:
263         return tuple('+%s' % b for b in backends)
265 imply_option('--build-backends', build_backend)
268 @depends('--enable-artifact-builds', '--disable-compile-environment',
269          '--enable-build-backend', '--enable-project', '--enable-application',
270          '--help')
271 @imports('sys')
272 def build_backend_defaults(artifact_builds, compile_environment, requested_backends,
273                            project, application, _):
274     if application:
275         project = application[0]
276     elif project:
277         project = project[0]
279     if 'Tup' in requested_backends:
280         # As a special case, if Tup was requested, do not combine it with any
281         # Make based backend by default.
282         all_backends = []
283     elif artifact_builds:
284         all_backends = ['FasterMake+RecursiveMake']
285     else:
286         all_backends = ['RecursiveMake', 'FasterMake']
287     # Normally, we'd use target.os == 'WINNT', but a dependency on target
288     # would require target to depend on --help, as well as host and shell,
289     # and this is not a can of worms we can open at the moment.
290     if sys.platform == 'win32' and compile_environment and project != 'mobile/android':
291         all_backends.append('VisualStudio')
292     return tuple(all_backends) or None
294 option('--build-backends', nargs='+', default=build_backend_defaults,
295        choices=build_backends_choices, help='Build backends to generate')
297 @depends('--build-backends')
298 def build_backends(backends):
299     return backends
301 set_config('BUILD_BACKENDS', build_backends)
304 @depends(check_build_environment, build_backends)
305 @imports('glob')
306 def check_objdir_backend_reuse(build_env, backends):
307     # "Make based" might be RecursiveMake or a hybrid backend, so "Make" is
308     # intentionally vague for use with the substring match below.
309     incompatible_backends = (
310         ('Tup', 'Make'),
311         ('Make', 'Tup')
312     )
313     for backend_file in glob.iglob(os.path.join(build_env.topobjdir,
314                                                 'backend.*Backend')):
315         for prev, curr in incompatible_backends:
316             if prev in backend_file and any(curr in b for b in backends):
317                 die("The active objdir, %s, was previously "
318                     "used to build with a %s based backend. "
319                     "Change objdirs (by setting MOZ_OBJDIR in "
320                     "your mozconfig) or clobber to continue.\n",
321                     build_env.topobjdir, prev)
324 option('--disable-gtest-in-build',
325        help='Force disable building the gtest libxul during the build.',
326        when='--enable-compile-environment')
328 # Determine whether to build the gtest xul. This happens in automation
329 # on Android and Desktop platforms with the exception of:
330 #  - Windows PGO, where linking xul-gtest.dll takes too long;
331 #  - Android other than x86_64, where gtest is not required.
332 @depends('MOZ_PGO', build_project, target, 'MOZ_AUTOMATION', '--disable-gtest-in-build',
333          enable_tests, when='--enable-compile-environment')
334 def build_gtest(pgo, build_project, target, automation, enabled, enable_tests):
335     if not enable_tests or not enabled:
336         return None
337     if (automation and build_project in ('browser', 'comm/mail', 'mobile/android') and
338         not ((pgo and target.os == 'WINNT') or (target.os == 'Android' and target.cpu != 'x86_64'))):
339         return True
341 set_config('LINK_GTEST_DURING_COMPILE', build_gtest)
343 # Localization
344 # ==============================================================
345 option('--enable-ui-locale', default='en-US',
346        help='Select the user interface locale (default: en-US)')
348 set_config('MOZ_UI_LOCALE', depends('--enable-ui-locale')(lambda x: x))
350 # clang-plugin location
351 # ==============================================================
352 @depends(host_library_name_info, check_build_environment,
353          when='--enable-clang-plugin')
354 def clang_plugin_path(library_name_info, build_env):
355     topobjdir = build_env.topobjdir
356     if topobjdir.endswith('/js/src'):
357         topobjdir = topobjdir[:-7]
358     return os.path.abspath(
359         os.path.join(topobjdir, 'build', 'clang-plugin',
360                      '%sclang-plugin%s' % (library_name_info.dll.prefix,
361                                            library_name_info.dll.suffix))
362     )
364 add_old_configure_assignment('CLANG_PLUGIN', clang_plugin_path)
367 # Awk detection
368 # ==============================================================
369 awk = check_prog('AWK', ('gawk', 'mawk', 'nawk', 'awk'))
371 # Until the AWK variable is not necessary in old-configure
372 @depends(awk)
373 def awk_for_old_configure(value):
374     return value
376 add_old_configure_assignment('AWK', awk_for_old_configure)
379 # Perl detection
380 # ==============================================================
381 perl = check_prog('PERL', ('perl5', 'perl'))
383 # Until the PERL variable is not necessary in old-configure
384 @depends(perl)
385 def perl_for_old_configure(value):
386     return value
388 add_old_configure_assignment('PERL', perl_for_old_configure)
390 @template
391 def perl_version_check(min_version):
392     @depends(perl)
393     @checking('for minimum required perl version >= %s' % min_version)
394     def get_perl_version(perl):
395         return Version(check_cmd_output(
396             perl, '-e', 'print $]',
397             onerror=lambda: die('Failed to get perl version.')
398         ))
400     @depends(get_perl_version)
401     def check_perl_version(version):
402         if version < min_version:
403             die('Perl %s or higher is required.', min_version)
405     @depends(perl)
406     @checking('for full perl installation')
407     @imports('subprocess')
408     def has_full_perl_installation(perl):
409         ret = subprocess.call(
410             [perl, '-e', 'use Config; exit(!-d $Config{archlib})'])
411         return ret == 0
413     @depends(has_full_perl_installation)
414     def require_full_perl_installation(has_full_perl_installation):
415         if not has_full_perl_installation:
416             die('Cannot find Config.pm or $Config{archlib}. '
417                 'A full perl installation is required.')
419 perl_version_check('5.006')
422 # GNU make detection
423 # ==============================================================
424 option(env='MAKE', nargs=1, help='Path to GNU make')
426 @depends('MAKE', host)
427 def possible_makes(make, host):
428     candidates = []
429     if host.kernel == 'WINNT':
430         candidates.append('mingw32-make')
431     if make:
432         candidates.append(make[0])
433     if host.kernel == 'WINNT':
434         candidates.extend(('make', 'gmake'))
435     else:
436         candidates.extend(('gmake', 'make'))
437     return candidates
439 check_prog('GMAKE', possible_makes)
441 @depends(build_backends, build_project)
442 def tup_include(build_backends, build_project):
443     # We need to check the rustc version when building with tup, but
444     # rustc_info isn't available when configuring js (and build_backends isn't
445     # available from project-specific configure), so as a workaround we only
446     # include the file when we know we'll need it. This can be removed when
447     # we globally require a rustc recent enough to build with tup.
448     if build_project not in ('browser', 'mobile/android'):
449         return None
450     for backend in build_backends:
451         if 'Tup' in backend:
452             return 'build/moz.configure/tup.configure'
454 include(tup_include)
456 # watchman detection
457 # ==============================================================
459 option(env='WATCHMAN', nargs=1, help='Path to the watchman program')
461 @depends(host, 'WATCHMAN')
462 @checking('for watchman', callback=lambda w: w.path if w else 'not found')
463 def watchman(host, prog):
464     # On Windows, `watchman` is only supported on 64-bit hosts.
465     if host.os == 'WINNT' and host.cpu != 'x86_64':
466         return
468     if not prog:
469         prog = find_program('watchman')
471     if not prog:
472         return
474     # `watchman version` will talk to the Watchman daemon service.
475     # This can hang due to permissions problems. e.g.
476     # https://github.com/facebook/watchman/issues/376. So use
477     # `watchman --version` to prevent a class of failures.
478     out = check_cmd_output(prog, '--version', onerror=lambda: None)
479     if out is None:
480         return
482     return namespace(path=prog, version=Version(out.strip()))
484 @depends_if(watchman)
485 @checking('for watchman version')
486 def watchman_version(w):
487     return w.version
489 set_config('WATCHMAN', watchman.path)
491 @depends_all(hg_version, hg_config, watchman)
492 @checking('for watchman Mercurial integration')
493 @imports('os')
494 def watchman_hg(hg_version, hg_config, watchman):
495     if hg_version < Version('3.8'):
496         return 'no (Mercurial 3.8+ required)'
498     ext_enabled = False
499     mode_disabled = False
501     for k in ('extensions.fsmonitor', 'extensions.hgext.fsmonitor'):
502         if k in hg_config and hg_config[k] != '!':
503             ext_enabled = True
505     mode_disabled = hg_config.get('fsmonitor.mode') == 'off'
507     if not ext_enabled:
508         return 'no (fsmonitor extension not enabled)'
509     if mode_disabled:
510         return 'no (fsmonitor.mode=off disables fsmonitor)'
512     return True
514 # Miscellaneous programs
515 # ==============================================================
516 check_prog('XARGS', ('xargs',))
518 @depends(target)
519 def extra_programs(target):
520     if target.kernel == 'Darwin':
521         return namespace(
522             DSYMUTIL=('dsymutil', 'llvm-dsymutil'),
523             MKFSHFS=('newfs_hfs', 'mkfs.hfsplus'),
524             HFS_TOOL=('hfsplus',)
525         )
526     if target.os == 'GNU' and target.kernel == 'Linux':
527         return namespace(RPMBUILD=('rpmbuild',))
529 check_prog('DSYMUTIL', extra_programs.DSYMUTIL,
530            allow_missing=True)
531 check_prog('MKFSHFS', extra_programs.MKFSHFS,
532            allow_missing=True)
533 check_prog('HFS_TOOL', extra_programs.HFS_TOOL,
534            allow_missing=True)
535 check_prog('RPMBUILD', extra_programs.RPMBUILD,
536            allow_missing=True)
539 @depends(target)
540 @imports('os')
541 def makensis_progs(target):
542     if target.kernel != 'WINNT':
543         return
545     candidates = [
546         'makensis-3.01',
547         'makensis-3.0b3',
548         'makensis-3.0b1',
549         'makensis',
550     ]
552     # Look for nsis installed by msys environment. But only the 32-bit version.
553     # We use an absolute path and insert as the first entry so it is preferred
554     # over a 64-bit exe that may be in PATH.
555     if 'MSYSTEM_PREFIX' in os.environ:
556         prefix = os.path.dirname(os.environ['MSYSTEM_PREFIX'])
557         candidates.insert(0, os.path.join(prefix, 'mingw32', 'bin', 'makensis.exe'))
559     return tuple(candidates)
561 nsis = check_prog('MAKENSISU', makensis_progs, allow_missing=True)
563 # Make sure the version of makensis is up to date.
564 @depends_if(nsis)
565 @checking('for NSIS version')
566 @imports('re')
567 def nsis_version(nsis):
568     nsis_min_version = '3.0b1'
569     out = check_cmd_output(nsis, '-version',
570                            onerror=lambda: die('Failed to get nsis version.'))
571     m = re.search(r'(?<=v)[0-9]+\.[0-9]+((a|b|rc)[0-9]+)?', out)
573     if not m:
574         raise FatalCheckError('Unknown version of makensis')
575     ver = Version(m.group(0))
577     # Versions comparisons don't quite work well with beta versions, so ensure
578     # it works for the non-beta version.
579     if ver < nsis_min_version and (ver >= '3.0a' or ver < '3'):
580         raise FatalCheckError('To build the installer you must have NSIS'
581                               ' version %s or greater in your path'
582                               % nsis_min_version)
584     return ver
586 # And that makensis is 32-bit (but only on Windows).
587 @depends_if(nsis, when=depends(host)(lambda h: h.kernel == 'WINNT'))
588 @checking('for 32-bit NSIS')
589 def nsis_binary_type(nsis):
590     bin_type = windows_binary_type(nsis)
591     if bin_type != 'win32':
592         raise FatalCheckError('%s is not a 32-bit Windows application' % nsis)
594     return 'yes'
596 # And any flags we have to give to makensis
597 @depends(host)
598 def nsis_flags(host):
599     if host.kernel != 'WINNT':
600         return '-nocd'
601     return ''
603 set_config('MAKENSISU_FLAGS', nsis_flags)
605 check_prog('7Z', ('7z', '7za'), allow_missing=True, when=target_is_windows)
608 @depends(host_c_compiler, c_compiler, bindgen_config_paths)
609 def llvm_objdump(host_c_compiler, c_compiler, bindgen_config_paths):
610     clang = None
611     for compiler in (host_c_compiler, c_compiler):
612         if compiler and compiler.type == 'clang':
613             clang = compiler.compiler
614             break
615         elif compiler and compiler.type == 'clang-cl':
616             clang = os.path.join(os.path.dirname(compiler.compiler), 'clang')
617             break
619     if not clang and bindgen_config_paths:
620         clang = bindgen_config_paths.clang_path
621     llvm_objdump = 'llvm-objdump'
622     if clang:
623         out = check_cmd_output(clang, '--print-prog-name=llvm-objdump',
624                                onerror=lambda: None)
625         if out:
626             llvm_objdump = out.rstrip()
627     return (llvm_objdump,)
630 llvm_objdump = check_prog('LLVM_OBJDUMP', llvm_objdump, what='llvm-objdump',
631                           when='--enable-compile-environment',
632                           paths=toolchain_search_path)
634 add_old_configure_assignment('LLVM_OBJDUMP', llvm_objdump)
637 # Please do not add configure checks from here on.
639 # Fallthrough to autoconf-based configure
640 include('build/moz.configure/old.configure')
642 # JS Subconfigure.
643 include('js/sub.configure', when=compile_environment & toolkit)
646 @depends(check_build_environment, build_project)
647 @imports('__sandbox__')
648 @imports('glob')
649 @imports(_from='os.path', _import='exists')
650 def config_status_deps(build_env, build_project):
652     topsrcdir = build_env.topsrcdir
653     topobjdir = build_env.topobjdir
655     if not topobjdir.endswith('js/src'):
656         extra_deps = [os.path.join(topobjdir, '.mozconfig.json')]
657     else:
658         # mozconfig changes may impact js configure.
659         extra_deps = [os.path.join(topobjdir[:-7], '.mozconfig.json')]
661     confvars = os.path.join(topsrcdir, build_project, 'confvars.sh')
662     if exists(confvars):
663         extra_deps.append(confvars)
665     return list(__sandbox__._all_paths) + extra_deps + [
666         os.path.join(topsrcdir, 'CLOBBER'),
667         os.path.join(topsrcdir, 'configure'),
668         os.path.join(topsrcdir, 'js', 'src', 'configure'),
669         os.path.join(topsrcdir, 'configure.in'),
670         os.path.join(topsrcdir, 'js', 'src', 'configure.in'),
671         os.path.join(topsrcdir, 'nsprpub', 'configure'),
672         os.path.join(topsrcdir, 'config', 'milestone.txt'),
673         os.path.join(topsrcdir, 'browser', 'config', 'version.txt'),
674         os.path.join(topsrcdir, 'browser', 'config', 'version_display.txt'),
675         os.path.join(topsrcdir, 'build', 'virtualenv_packages.txt'),
676         os.path.join(topsrcdir, 'python', 'mozbuild', 'mozbuild', 'virtualenv.py'),
677         os.path.join(topsrcdir, 'testing', 'mozbase', 'packages.txt'),
678         os.path.join(topsrcdir, 'aclocal.m4'),
679         os.path.join(topsrcdir, 'old-configure.in'),
680         os.path.join(topsrcdir, 'js', 'src', 'aclocal.m4'),
681         os.path.join(topsrcdir, 'js', 'src', 'old-configure.in'),
682     ] + glob.glob(os.path.join(topsrcdir, 'build', 'autoconf', '*.m4'))
684 set_config('CONFIG_STATUS_DEPS', config_status_deps)
685 # Please do not add anything after setting config_dep_paths.