Fix Fortran arguments on Win32.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 22 Apr 2002 04:32:17 +0000 (04:32 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 22 Apr 2002 04:32:17 +0000 (04:32 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@337 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Defaults.py
test/F77.py
test/F77FLAGS.py
test/SHF77.py
test/SHF77FLAGS.py

index 019b8e704ae1f6c14b9d6c1a334adc78417cfbd3..29857f9eaf65d783f9b2c2a5ba656a517a2d013a 100644 (file)
@@ -68,6 +68,8 @@ RELEASE 0.07 -
     that writes to a temporary file and uses the magic MSVC "link @file"
     argument syntax if the line is longer than 2K characters.
 
+  - Fix F77 command-line options on Win32 (use /Fo instead of -o).
+
   From Steve Leblanc:
 
   - Add the SConscriptChdir() method.
index a0b115770f5f190c149a787b9a80d0e4262eeec8..8856db527f1e64854b010f1169d770b70a7ad31a 100644 (file)
@@ -406,12 +406,12 @@ def make_win32_env_from_paths(include, lib, path):
         'CXXFILESUFFIX' : '.cc',
         'F77'        : 'g77',
         'F77FLAGS'   : '',
-        'F77COM'     : '$F77 $F77FLAGS $_INCFLAGS -c -o $TARGET $SOURCES',
-        'F77PPCOM'   : '$F77 $F77FLAGS $CPPFLAGS $_INCFLAGS -c -o $TARGET $SOURCES',
+        'F77COM'     : '$F77 $F77FLAGS $_INCFLAGS /c $SOURCES /Fo$TARGET',
+        'F77PPCOM'   : '$F77 $F77FLAGS $CPPFLAGS $_INCFLAGS /c $SOURCES /Fo$TARGET',
         'SHF77'      : '$F77',
         'SHF77FLAGS' : '$F77FLAGS',
-        'SHF77COM'   : '$SHF77 $SHF77FLAGS $_INCFLAGS -c -o $TARGET $SOURCES',
-        'SHF77PPCOM' : '$SHF77 $SHF77FLAGS $CPPFLAGS $_INCFLAGS -c -o $TARGET $SOURCES',
+        'SHF77COM'   : '$SHF77 $SHF77FLAGS $_INCFLAGS /c $SOURCES /Fo$TARGET',
+        'SHF77PPCOM' : '$SHF77 $SHF77FLAGS $CPPFLAGS $_INCFLAGS /c $SOURCES /Fo$TARGET',
         'LINK'       : 'link',
         'LINKFLAGS'  : '/nologo',
         # XXX - We'd like to do this as follows, but '$LINKCOM' in
index 40a749e4e9c9c9312735dfccae367ea772be2e4a..964682d2949407507decd3ebfa27192fde3197ca 100644 (file)
@@ -43,29 +43,47 @@ test = TestSCons.TestSCons()
 if sys.platform == 'win32':
 
     test.write('mylink.py', r"""
-import getopt
-import os
+import string
 import sys
 args = sys.argv[1:]
 while args:
     a = args[0]
     if a[0] != '/':
         break
-    args.pop(0)
-    if a[:5] == '/OUT:': out = a[5:]
+    args = args[1:]
+    if string.lower(a[:5]) == '/out:': out = a[5:]
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 for l in infile.readlines():
     if l[:5] != '#link':
        outfile.write(l)
 sys.exit(0)
+""")
+
+    test.write('myg77.py', r"""
+import sys
+args = sys.argv[1:]
+inf = None
+while args:
+    a = args[0]
+    args = args[1:]
+    if a[0] != '/':
+        if not inf:
+            inf = a
+        continue
+    if a[:3] == '/Fo': out = a[3:]
+infile = open(inf, 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:4] != '#g77':
+       outfile.write(l)
+sys.exit(0)
 """)
 
 else:
 
     test.write('mylink.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'o:')
 for opt, arg in opts:
@@ -78,9 +96,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
-test.write('myg77.py', r"""
+    test.write('myg77.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'co:')
 for opt, arg in opts:
index b3e7b3102694b294acc7f9b78e3218714391f164..5241e7b5f80b7b371b8852e93c2c0aedea09244b 100644 (file)
@@ -31,41 +31,66 @@ import TestSCons
 
 python = sys.executable
 
-if sys.platform == 'win32':
-    _exe = '.exe'
-else:
-    _exe = ''
-
 test = TestSCons.TestSCons()
 
 
-
 if sys.platform == 'win32':
 
+    _exe = '.exe'
+
+    o = ' -x /c'
+
     test.write('mylink.py', r"""
-import getopt
-import os
+import string
 import sys
 args = sys.argv[1:]
 while args:
     a = args[0]
     if a[0] != '/':
         break
-    args.pop(0)
-    if a[:5] == '/OUT:': out = a[5:]
+    args = args[1:]
+    if string.lower(a[:5]) == '/out:': out = a[5:]
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 for l in infile.readlines():
     if l[:5] != '#link':
        outfile.write(l)
 sys.exit(0)
+""")
+
+    test.write('myg77.py', r"""
+import sys
+args = sys.argv[1:]
+inf = None
+optstring = ''
+while args:
+    a = args[0]
+    args = args[1:]
+    if not a[0] in '/-':
+        if not inf:
+            inf = a
+        continue
+    if a[:3] == '/Fo':
+        out = a[3:]
+        continue
+    optstring = optstring + ' ' + a
+infile = open(inf, 'rb')
+outfile = open(out, 'wb')
+outfile.write(optstring + "\n")
+for l in infile.readlines():
+    if l[:4] != '#g77':
+       outfile.write(l)
+sys.exit(0)
 """)
 
 else:
 
+    _exe = ''
+
+    o = ' -x -c'
+
     test.write('mylink.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'o:')
 for opt, arg in opts:
@@ -78,9 +103,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
-test.write('myg77.py', r"""
+    test.write('myg77.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'co:x')
 optstring = ''
@@ -96,6 +120,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
+
+
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
                   F77 = r'%s myg77.py', F77FLAGS = '-x')
@@ -139,17 +165,17 @@ test.write('test6.FPP', r"""This is a .FPP file.
 
 test.run(arguments = '.', stderr = None)
 
-test.fail_test(test.read('test1' + _exe) != " -x -c\nThis is a .f file.\n")
+test.fail_test(test.read('test1' + _exe) != "%s\nThis is a .f file.\n" % o)
 
-test.fail_test(test.read('test2' + _exe) != " -x -c\nThis is a .for file.\n")
+test.fail_test(test.read('test2' + _exe) != "%s\nThis is a .for file.\n" % o)
 
-test.fail_test(test.read('test3' + _exe) != " -x -c\nThis is a .FOR file.\n")
+test.fail_test(test.read('test3' + _exe) != "%s\nThis is a .FOR file.\n" % o)
 
-test.fail_test(test.read('test4' + _exe) != " -x -c\nThis is a .F file.\n")
+test.fail_test(test.read('test4' + _exe) != "%s\nThis is a .F file.\n" % o)
 
-test.fail_test(test.read('test5' + _exe) != " -x -c\nThis is a .fpp file.\n")
+test.fail_test(test.read('test5' + _exe) != "%s\nThis is a .fpp file.\n" % o)
 
-test.fail_test(test.read('test6' + _exe) != " -x -c\nThis is a .FPP file.\n")
+test.fail_test(test.read('test6' + _exe) != "%s\nThis is a .FPP file.\n" % o)
 
 
 
index 5391170eedc404a3b6deb66778489e3234d51271..43c6485864139e0e5a0b4dcaaf017392eb247976 100644 (file)
@@ -43,29 +43,47 @@ test = TestSCons.TestSCons()
 if sys.platform == 'win32':
 
     test.write('mylink.py', r"""
-import getopt
-import os
+import string
 import sys
 args = sys.argv[1:]
 while args:
     a = args[0]
     if a[0] != '/':
         break
-    args.pop(0)
-    if a[:5] == '/OUT:': out = a[5:]
+    args = args[1:]
+    if string.lower(a[:5]) == '/out:': out = a[5:]
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 for l in infile.readlines():
     if l[:5] != '#link':
        outfile.write(l)
 sys.exit(0)
+""")
+
+    test.write('myg77.py', r"""
+import sys
+args = sys.argv[1:]
+inf = None
+while args:
+    a = args[0]
+    args = args[1:]
+    if a[0] != '/':
+        if not inf:
+            inf = a
+        continue
+    if a[:3] == '/Fo': out = a[3:]
+infile = open(inf, 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:4] != '#g77':
+       outfile.write(l)
+sys.exit(0)
 """)
 
 else:
 
     test.write('mylink.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'o:')
 for opt, arg in opts:
@@ -78,9 +96,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
-test.write('myg77.py', r"""
+    test.write('myg77.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'cf:o:')
 for opt, arg in opts:
@@ -93,6 +110,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
+
+
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
                   SHF77 = r'%s myg77.py')
index e8b5213209a339345aee46b58b743c83a4a05421..cb1e6f688abc16775eb1c59172148f4f69f10bd9 100644 (file)
@@ -42,30 +42,61 @@ test = TestSCons.TestSCons()
 
 if sys.platform == 'win32':
 
+    _exe = '.exe'
+
+    o = ' -x /c'
+
     test.write('mylink.py', r"""
-import getopt
-import os
+import string
 import sys
 args = sys.argv[1:]
 while args:
     a = args[0]
     if a[0] != '/':
         break
-    args.pop(0)
-    if a[:5] == '/OUT:': out = a[5:]
+    args = args[1:]
+    if string.lower(a[:5]) == '/out:': out = a[5:]
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 for l in infile.readlines():
     if l[:5] != '#link':
        outfile.write(l)
 sys.exit(0)
+""")
+
+    test.write('myg77.py', r"""
+import sys
+args = sys.argv[1:]
+inf = None
+optstring = ''
+while args:
+    a = args[0]
+    args = args[1:]
+    if not a[0] in '/-':
+        if not inf:
+            inf = a
+        continue
+    if a[:3] == '/Fo':
+        out = a[3:]
+        continue
+    optstring = optstring + ' ' + a
+infile = open(inf, 'rb')
+outfile = open(out, 'wb')
+outfile.write(optstring + "\n")
+for l in infile.readlines():
+    if l[:4] != '#g77':
+       outfile.write(l)
+sys.exit(0)
 """)
 
 else:
 
+    _exe = ''
+
+    o = ' -x -c'
+
     test.write('mylink.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'o:')
 for opt, arg in opts:
@@ -78,9 +109,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
-test.write('myg77.py', r"""
+    test.write('myg77.py', r"""
 import getopt
-import os
 import sys
 opts, args = getopt.getopt(sys.argv[1:], 'co:x')
 optstring = ''
@@ -96,6 +126,8 @@ for l in infile.readlines():
 sys.exit(0)
 """)
 
+
+
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
                   SHF77 = r'%s myg77.py', SHF77FLAGS = '-x')
@@ -139,17 +171,17 @@ test.write('test6.FPP', r"""This is a .FPP file.
 
 test.run(arguments = '.', stderr = None)
 
-test.fail_test(test.read('test1' + _exe) != " -x -c\nThis is a .f file.\n")
+test.fail_test(test.read('test1' + _exe) != "%s\nThis is a .f file.\n" % o)
 
-test.fail_test(test.read('test2' + _exe) != " -x -c\nThis is a .for file.\n")
+test.fail_test(test.read('test2' + _exe) != "%s\nThis is a .for file.\n" % o)
 
-test.fail_test(test.read('test3' + _exe) != " -x -c\nThis is a .FOR file.\n")
+test.fail_test(test.read('test3' + _exe) != "%s\nThis is a .FOR file.\n" % o)
 
-test.fail_test(test.read('test4' + _exe) != " -x -c\nThis is a .F file.\n")
+test.fail_test(test.read('test4' + _exe) != "%s\nThis is a .F file.\n" % o)
 
-test.fail_test(test.read('test5' + _exe) != " -x -c\nThis is a .fpp file.\n")
+test.fail_test(test.read('test5' + _exe) != "%s\nThis is a .fpp file.\n" % o)
 
-test.fail_test(test.read('test6' + _exe) != " -x -c\nThis is a .FPP file.\n")
+test.fail_test(test.read('test6' + _exe) != "%s\nThis is a .FPP file.\n" % o)