author Gregory Szorc <>
Thu, 27 Jul 2017 14:12:35 -0700
changeset 420202 6504499c1689d9199c355e07164b849f9144ca2f
parent 337400 68da139d0866977c0ada86319fa94388f2255446
child 441900 828d43ec1b16edaac69c42f15561f26e209051f1
permissions -rw-r--r--
Bug 1384396 - Detect Watchman Mercurial integration in configure; r=nalexander Configure now detects VCS info. Configure now detects Watchman. We can combine the two so configure can detect if Mercurial is configured with Watchman enabled. This commit does two things: 1) collects the Mercurial config so it is available to downstream checks 2) examines the config for presence and state of the fsmonitor extension We don't yet do anything with the fsmonitor state. But it should be useful soon. Also, the return value is kinda wonky. This will almost certainly be improved as soon as there is an actual consumer. MozReview-Commit-ID: HyHZ2X8VI0h

# 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
from __future__ import print_function
import os, re, string, sys
from mozbuild.util import FileAvoidWrite

def find_in_path(file, searchpath):
    for dir in searchpath.split(os.pathsep):
        f = os.path.join(dir, file)
        if os.path.exists(f):
            return f
    return ''

def header_path(header, compiler):
    if compiler == 'gcc':
        # we use include_next on gcc
        return header
    elif compiler == 'msvc':
        return find_in_path(header, os.environ.get('INCLUDE', ''))
        # hope someone notices this ...
        raise NotImplementedError(compiler)

def is_comment(line):
    return re.match(r'\s*#.*', line)

def main(outdir, compiler, template_file, header_list_file):
    if not os.path.isdir(outdir):

    template = open(template_file, 'r').read()

    for header in open(header_list_file, 'r'):
        header = header.rstrip()
        if 0 == len(header) or is_comment(header):

        path = header_path(header, compiler)
        with FileAvoidWrite(os.path.join(outdir, header)) as f:

if __name__ == '__main__':
    if 5 != len(sys.argv):
  python {0} OUT_DIR ('msvc'|'gcc') TEMPLATE_FILE HEADER_LIST_FILE
""".format(sys.argv[0]), file=sys.stderr)