author L. David Baron <>
Thu, 12 Mar 2015 23:28:55 -0700
changeset 264315 a0f267629f118ac1ad570e0cf6fb8b0d76228bc2
parent 158715 20a4b8ad2107aa23f9aae1aa7e63f03edcd7b0e5
child 337400 68da139d0866977c0ada86319fa94388f2255446
permissions -rw-r--r--
Bug 1142352 - Add a configure test for the gcc version of the host compiler when cross compiling. r=glandium The duplication of the code higher up is a little bit annoying, but I don't see an easy way to avoid that. It's also still quite far from duplicating everything. I tested locally with a Fennec build that if I bump the requirement from 4.6 to 4.9, I get the expected build error.

# 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()
    path_to_new = header_path('new', compiler)

    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)