Use -lfrtbegin when linking fortran in gcc3; Cygwin fixes. (Chad Austin)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 27 May 2003 12:14:50 +0000 (12:14 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 27 May 2003 12:14:50 +0000 (12:14 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@698 fdb21ef1-2011-0410-befe-b5e4ea1792b1

etc/TestSCons.py
test/BuildDir.py
test/CVS.py
test/F77.py
test/F77FLAGS.py
test/F77PATH.py
test/SHF77FLAGS.py
test/scan-once.py

index a87b55aac884caa151ef236bf835bdd316095671..f23c5da242f23775f96d52fd95a2da6e0312a751 100644 (file)
@@ -24,34 +24,57 @@ import TestCmd
 
 python = TestCmd.python_executable
 
+
+def gccFortranLibs():
+    """Test whether -lfrtbegin is required.  This can probably be done in
+    a more reliable way, but using popen3 is relatively efficient."""
+
+    libs = ['g2c']
+
+    try:
+        import popen2
+        stderr = popen2.popen3('gcc -v')[2]
+    except OSError:
+        return libs
+
+    for l in stderr.readlines():
+        list = string.split(l)
+        if len(list) > 3 and list[:2] == ['gcc', 'version']:
+            if list[2][:2] == '3.':
+                libs = ['frtbegin'] + libs
+                break
+    return libs
+
+
 if sys.platform == 'win32':
     _exe   = '.exe'
     _obj   = '.obj'
     _shobj = '.obj'
     _dll   = '.dll'
     lib_   = ''
-    fortran_lib = 'g2c'
+    fortran_lib = gccFortranLibs()
 elif sys.platform == 'cygwin':
     _exe   = '.exe'
     _obj   = '.o'
     _shobj = '.os'
     _dll   = '.dll'
     lib_   = ''
-    fortran_lib = 'g2c'
+    fortran_lib = gccFortranLibs()
 elif string.find(sys.platform, 'irix') != -1:
     _exe   = ''
     _obj   = '.o'
     _shobj = '.o'
     _dll   = '.so'
     lib_   = 'lib'
-    fortran_lib = 'ftn'
+    fortran_lib = ['ftn']
 else:
     _exe   = ''
     _obj   = '.o'
     _shobj = '.os'
     _dll   = '.so'
     lib_   = 'lib'
-    fortran_lib = 'g2c'
+    fortran_lib = gccFortranLibs()
+
 
 class TestFailed(Exception):
     def __init__(self, args=None):
index 9c37f2cad9cbfc40b014e94c0976440523e2efc2..f38505e53905960391481d128f518127082a2b9e 100644 (file)
@@ -30,10 +30,8 @@ import sys
 import time
 import TestSCons
 
-if sys.platform == 'win32':
-    _exe = '.exe'
-else:
-    _exe = ''
+_exe = TestSCons._exe
+fortran_runtime = TestSCons.fortran_lib
 
 test = TestSCons.TestSCons()
 
@@ -92,14 +90,6 @@ SConscript('../build/var5/SConscript', "env")
 SConscript('../build/var6/SConscript', "env")
 """)
 
-if string.find(sys.platform, 'irix') != -1:
-    fortran_runtime = 'ftn'
-
-    # f77 does NOT work on cruncher
-    test.no_result()
-else:
-    fortran_runtime = 'g2c'
-
 test.subdir(['work1', 'src'])
 test.write(['work1', 'src', 'SConscript'], """
 import os
@@ -133,8 +123,8 @@ except:
 
 if f77 and env.Detect(env['F77']):
     env.Command(target='b2.f', source='b2.in', action=buildIt)
-    env.Copy(LIBS = [r'%s']).Program(target='bar2', source='b2.f')
-    env.Copy(LIBS = [r'%s']).Program(target='bar1', source='b1.f')
+    env.Copy(LIBS = %s).Program(target='bar2', source='b2.f')
+    env.Copy(LIBS = %s).Program(target='bar1', source='b1.f')
 """ % (fortran_runtime, fortran_runtime))
 
 test.write(['work1', 'src', 'f1.c'], r"""
index 33fbe0fb0f23c42bd362a5fce96300a12383af18..1ce28d6ddb52941743e7cbc5402c4d5bf50da312 100644 (file)
@@ -235,7 +235,7 @@ test.subdir(['work3'])
 test.write(['work3', 'SConstruct'], """\
 import os
 env = Environment(ENV = { 'PATH' : os.environ['PATH'] })
-env.SourceCode('.', env.CVS(':pserver:anonymous:@cvs.sourceforge.net:/cvsroot/scons'))
+env.SourceCode('.', env.CVS(':pserver:anonymous@cvs.sourceforge.net:/cvsroot/scons'))
 env.Install('install', 'scons/SConstruct')
 """)
 
index b4ef9bf4d01b47cd7b47c349bbb036bf83d0442d..94c7c773a09c198f3631c3a6d4255c5a7f4a491a 100644 (file)
@@ -158,7 +158,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = r'%s')
+foo = Environment(LIBS = %s)
 f77 = foo.Dictionary('F77')
 bar = foo.Copy(F77 = r'%s wrapper.py ' + f77)
 foo.Program(target = 'foo', source = 'foo.f')
index 6b9253b8bbbde596ccac08c0b5035d02d885782e..027a02f02c88ae75b37189e997613de92f5659f2 100644 (file)
@@ -161,7 +161,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = r'%s')
+foo = Environment(LIBS = %s)
 f77 = foo.Dictionary('F77')
 bar = foo.Copy(F77 = r'%s wrapper.py ' + f77, F77FLAGS = '-Ix')
 foo.Program(target = 'foo', source = 'foo.f')
index f3dd48332692e47fa7bf81728d61cb7162cf69de..af3a9c92233c7a2d4df5158dc2aff76f99d63377 100644 (file)
@@ -28,11 +28,7 @@ import os
 import sys
 import TestSCons
 
-if sys.platform == 'win32':
-    _exe = '.exe'
-else:
-    _exe = ''
-
+_exe = TestSCons._exe
 FTN_LIB = TestSCons.fortran_lib
 
 prog = 'prog' + _exe
@@ -49,14 +45,14 @@ if not test.detect('F77', 'g77'):
 test.subdir('include', 'subdir', ['subdir', 'include'], 'inc2')
 
 test.write('SConstruct', """
-env = Environment(F77PATH = ['$FOO'], LIBS = r'%s', FOO='include')
+env = Environment(F77PATH = ['$FOO'], LIBS = %s, FOO='include')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f')
 env.Program(target='prog', source=obj)
 SConscript('subdir/SConscript', "env")
 
 BuildDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(F77PATH=[include], LIBS = r'%s')
+env = Environment(F77PATH=[include], LIBS = %s)
 SConscript('variant/SConscript', "env")
 """ % (FTN_LIB, FTN_LIB))
 
@@ -161,14 +157,14 @@ test.up_to_date(arguments = args)
 
 # Change F77PATH and make sure we don't rebuild because of it.
 test.write('SConstruct', """
-env = Environment(F77PATH = Split('inc2 include'), LIBS = r'%s')
+env = Environment(F77PATH = Split('inc2 include'), LIBS = %s)
 obj = env.Object(target='foobar/prog', source='subdir/prog.f')
 env.Program(target='prog', source=obj)
 SConscript('subdir/SConscript', "env")
 
 BuildDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(F77PATH=['inc2', include], LIBS = r'%s')
+env = Environment(F77PATH=['inc2', include], LIBS = %s)
 SConscript('variant/SConscript', "env")
 """ % (FTN_LIB, FTN_LIB))
 
@@ -196,7 +192,7 @@ test.up_to_date(arguments = args)
 
 # Check that a null-string F77PATH doesn't blow up.
 test.write('SConstruct', """
-env = Environment(F77PATH = '', LIBS = r'%s')
+env = Environment(F77PATH = '', LIBS = %s)
 env.Library('foo', source = 'empty.f')
 """ % FTN_LIB)
 
index 27c6603c2b90263406f9612812927dcb995a2c60..261f6388c812ba3a9140d0b143a2cdd5a1a39d3e 100644 (file)
@@ -127,7 +127,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = r'%s')
+foo = Environment(LIBS = %s)
 shf77 = foo.Dictionary('SHF77')
 bar = foo.Copy(SHF77 = r'%s wrapper.py ' + shf77, SHF77FLAGS = '-Ix')
 foo.SharedLibrary(target = 'foo/foo', source = 'foo.f')
index f629db659276099fe7b53f1b12dfb5abc19c5535..ea4dbee0b3d89000eee83dc4aa6398e7abbfccce 100644 (file)
@@ -303,6 +303,9 @@ import re
 for k in fromdict.keys():
     if k != "ENV" and k != "SCANNERS" and k != "CFLAGS" and k != "CXXFLAGS" \
     and not SCons.Util.is_Dict(fromdict[k]):
+        # the next line fails in Cygwin because it tries to do env.subst on
+        # $RMIC $RMICFLAGS -d ${TARGET.attributes.java_lookupdir} ...
+        # when $TARGET is None, so $TARGET.attributes throws an exception
         todict[k] = env.subst(str(fromdict[k]))
 todict["CFLAGS"] = fromdict["CPPFLAGS"] + " " + \
     string.join(map(lambda x: "-I" + x, env["CPPPATH"])) + " " + \