Support for additional UNIX variants: (Christian Engel)
[scons.git] / src / engine / SCons / Tool / g++.py
index d2274a507956f84970de6c3d043b08959fed66b2..d641a6c9c7173c19c03fd38e972d70d8c1b6fa1b 100644 (file)
@@ -9,7 +9,7 @@ selection method.
 """
 
 #
-# Copyright (c) 2001, 2002 Steven Knight
+# __COPYRIGHT__
 #
 # Permission is hereby granted, free of charge, to any person obtaining
 # a copy of this software and associated documentation files (the
@@ -34,35 +34,55 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
+import string
+import re
 
 import SCons.Defaults
 import SCons.Tool
 import SCons.Util
 
-compilers = ['c++', 'g++']
+cplusplus = __import__('c++', globals(), locals(), [])
 
-CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
-if os.path.normcase('.c') != os.path.normcase('.C'):
-    CXXSuffixes.append('.C')
+compilers = ['g++']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for g++ to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
-    for suffix in CXXSuffixes:
-        static_obj.add_action(suffix, SCons.Defaults.CXXAction)
-        shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction)
+    cplusplus.generate(env)
 
-    env['CXX']        = env.Detect(compilers) or 'c++'
-    env['CXXFLAGS']   = '$CCFLAGS'
-    env['CXXCOM']     = '$CXX $CXXFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
-    env['SHCXX']      = '$CXX'
-    env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC'
-    env['SHCXXCOM']   = '$SHCXX $SHCXXFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
-    env['INCPREFIX']  = '-I'
-    env['INCSUFFIX']  = ''
+    env['CXX']        = env.Detect(compilers)
+
+    # platform specific settings
+    if env['PLATFORM'] == 'cygwin':
+        env['SHCXXFLAGS'] = '$CXXFLAGS'
+    elif env['PLATFORM'] == 'aix':
+        # Original line from Christian Engel added -DPIC:
+        #env['SHCXXFLAGS'] = '$CXXFLAGS -DPIC -mminimal-toc'
+        env['SHCXXFLAGS'] = '$CXXFLAGS -mminimal-toc'
+        env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
+        env['SHOBJSUFFIX'] = '$OBJSUFFIX'
+    elif env['PLATFORM'] == 'hpux':
+        # Original line from Christian Engel added -DPIC:
+        #env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC -DPIC'
+        env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC'
+        env['SHOBJSUFFIX'] = '.pic.o'
+    elif env['PLATFORM'] == 'sunos':
+        # Original line from Christian Engel added -DPIC:
+        #env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC -DPIC'
+        env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC'
+        env['SHOBJSUFFIX'] = '.pic.o'
+    else:
+        # Original line from Christian Engel added -DPIC:
+        #env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC -DPIC'
+        env['SHCXXFLAGS'] = '$CXXFLAGS -fPIC'
+    # determine compiler version
+    if env['CXX']:
+        line = os.popen(env['CXX'] + ' --version').readline()
+        match = re.search(r'[0-9]+(\.[0-9]+)+', line)
+        if match:
+            env['CXXVERSION'] = match.group(0)
 
-    env['CXXFILESUFFIX'] = '.cc'
 
 def exists(env):
     return env.Detect(compilers)