Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2012-06-30 19:49:31 +0400
committerBen Noordhuis <info@bnoordhuis.nl>2012-06-30 19:49:37 +0400
commitf78ce087ba195540c8293f57a0a774c1de9e19bb (patch)
tree5020d7df7b5cce13ad38e7e7e27273f344b04f5c /configure
parentf3150292687e04332e1ae252817ee703fe316a70 (diff)
build: handle output of localized gcc or clang
Before this commit, we used to scan the output of `$CC -v` for strings like "gcc version x.y.z". It was pointed out that this approach fails with localized versions of gcc because those print (for example) "gcc versiĆ³n x.y.z". Use the output of `$CC --version` instead and only look at the first line.
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure34
1 files changed, 18 insertions, 16 deletions
diff --git a/configure b/configure
index c0e096e788e..7bf4536e25b 100755
--- a/configure
+++ b/configure
@@ -262,22 +262,24 @@ def host_arch():
def target_arch():
return host_arch()
+
def compiler_version():
- try:
- proc = subprocess.Popen(CC.split() + ['-v'], stderr=subprocess.PIPE)
- except OSError:
- return (False, False, None)
- lines = proc.communicate()[1].split('\n')
- version_line = None
- for i, line in enumerate(lines):
- if 'version' in line:
- version_line = line
- if not version_line:
- return (False, False, None)
- version = version_line.split("version")[1].strip().split()[0].split(".")
- if not version:
- return (False, False, None)
- return ('LLVM' in version_line, 'clang' in CC, tuple(version))
+ proc = subprocess.Popen(CC.split() + ['--version'], stdout=subprocess.PIPE)
+ version_line = proc.communicate()[0].split('\n')[0]
+
+ if 'clang' in version_line:
+ version, is_clang = version_line.split()[2], True
+ elif 'gcc' in version_line:
+ version, is_clang = version_line.split()[-1], False
+ else:
+ raise Exception(
+ 'Unknown compiler. Please open an issue at ' +
+ 'https://github.com/joyent/node/issues and ' +
+ 'include the output of `%s --version`' % CC)
+
+ version = tuple(map(int, version.split('.')))
+ return (version, is_clang)
+
def configure_node(o):
# TODO add gdb
@@ -288,7 +290,7 @@ def configure_node(o):
o['variables']['target_arch'] = options.dest_cpu or target_arch()
o['default_configuration'] = 'Debug' if options.debug else 'Release'
- is_llvm, is_clang, cc_version = compiler_version()
+ cc_version, is_clang = compiler_version()
# turn off strict aliasing if gcc < 4.6.0 unless it's llvm-gcc
# see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45883