Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
build: handle output of localized gcc or clang
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
bnoordhuis committed Jun 30, 2012
1 parent f315029 commit f78ce08
Showing 1 changed file with 18 additions and 16 deletions.
34 changes: 18 additions & 16 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit f78ce08

Please sign in to comment.