Fix #2830 for the old gcc bug on SmartOS
authorShigeki Ohtsu <ohtsu@iij.ad.jp>
Mon, 27 Feb 2012 11:32:13 +0000 (20:32 +0900)
committerisaacs <i@izs.me>
Mon, 27 Feb 2012 20:02:25 +0000 (12:02 -0800)
common.gypi
configure

index 1dbef02..699230a 100644 (file)
       'Release': {
         'conditions': [
           [ 'OS!="solaris"', {
-            'cflags': [ '-fomit-frame-pointer' ]
+              'cflags': [ '-O3','-fomit-frame-pointer', '-fdata-sections', '-ffunction-sections' ],
+          }],
+          [ 'OS=="solaris" and gcc_optimize_level =="-O3"', {
+              'cflags': [ '-O3', '-fdata-sections', '-ffunction-sections' ],   
+          }],
+          [ 'OS=="solaris" and gcc_optimize_level =="-O"', {
+              'cflags': [ '-O', '-fdata-sections', '-ffunction-sections' ], # For bug fix of #2830     
           }],
-        ],
-        # 'defines': [ 'NDEBUG' ],
-        'cflags': [ '-O3', '-fdata-sections', '-ffunction-sections' ],
-        'conditions': [
           ['target_arch=="x64"', {
             'msvs_configuration_platform': 'x64',
           }],
index 537757e..7140946 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,10 +1,10 @@
 #!/usr/bin/env python
-
 import optparse
 import os
 import pprint
 import subprocess
 import sys
+from distutils.version import StrictVersion
 
 root_dir = os.path.dirname(__file__)
 sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
@@ -200,6 +200,17 @@ def host_arch():
 def target_arch():
   return host_arch()
 
+def gcc_optimize_level():
+  cc = ['gcc']
+  cmd = cc + [ '-dumpversion' ]
+  p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+  p.stdin.write('\n')
+  out = p.communicate()[0]
+  gcc_version = (str(out).split('\n'))[0]
+  if StrictVersion(gcc_version) >= '4.6.1':
+    return '-O3'
+  else:
+    return '-O'
 
 def configure_node(o):
   # TODO add gdb
@@ -214,7 +225,7 @@ def configure_node(o):
   # TODO move to node.gyp
   if sys.platform == 'sunos5':
     o['variables']['visibility'] = '' # FIXME -fvisibility=hidden, should be a gcc check
-
+    o['variables']['gcc_optimize_level'] = gcc_optimize_level() # For bug fix of #2830
 
 def configure_libz(o):
   o['variables']['node_shared_zlib'] = b(options.shared_zlib)