| 21 | 
  | 
#  Filename     :  $RCSfile: filepp,v $ | 
| 22 | 
  | 
#  Author       :  $Author: tim $ | 
| 23 | 
  | 
#  Maintainer   :  Darren Miller: darren@cabaret.demon.co.uk | 
| 24 | 
< | 
#  File version :  $Revision: 1.4 $ | 
| 25 | 
< | 
#  Last changed :  $Date: 2004-10-11 14:51:57 $ | 
| 24 | 
> | 
#  File version :  $Revision: 1.5 $ | 
| 25 | 
> | 
#  Last changed :  $Date: 2004-10-11 21:10:28 $ | 
| 26 | 
  | 
#  Description  :  Main program | 
| 27 | 
  | 
#  Licence      :  GNU copyleft | 
| 28 | 
  | 
# | 
| 280 | 
  | 
 all other arguments are assumed to be input files | 
| 281 | 
  | 
"; | 
| 282 | 
  | 
 | 
| 283 | 
– | 
# graph for dependency files | 
| 284 | 
– | 
my $dependencyGraph; | 
| 283 | 
  | 
 | 
| 284 | 
  | 
# visited table | 
| 285 | 
  | 
my %visitedTable = (); | 
| 301 | 
  | 
 | 
| 302 | 
  | 
# case of basename of fortran 90 module | 
| 303 | 
  | 
my $modBasenameCase = "lower"; | 
| 304 | 
+ | 
 | 
| 305 | 
+ | 
#flag for generating dependency, by default, it is off | 
| 306 | 
+ | 
my $dependency = 0; | 
| 307 | 
+ | 
 | 
| 308 | 
+ | 
#skip system header file | 
| 309 | 
+ | 
my $skipSysInclude = 0; | 
| 310 | 
+ | 
 | 
| 311 | 
+ | 
#saved command line define macro | 
| 312 | 
+ | 
my @savedDefine; | 
| 313 | 
+ | 
 | 
| 314 | 
  | 
############################################################################## | 
| 315 | 
  | 
# SetDebug - controls debugging level | 
| 316 | 
  | 
############################################################################## | 
| 1945 | 
  | 
    } | 
| 1946 | 
  | 
    # else assume filename given without "" or <>, naughty but allowed | 
| 1947 | 
  | 
     | 
| 1948 | 
+ | 
    #if skipSysInclude option is turned on, skip current file | 
| 1949 | 
+ | 
    if ($skipSysInclude && $sysinclude) { | 
| 1950 | 
+ | 
        return; | 
| 1951 | 
+ | 
    } | 
| 1952 | 
+ | 
     | 
| 1953 | 
  | 
    # check for file in current directory | 
| 1954 | 
  | 
    if($sysinclude == 0) { | 
| 1955 | 
  | 
        # get name of directory base file is in | 
| 2233 | 
  | 
sub Write | 
| 2234 | 
  | 
{ | 
| 2235 | 
  | 
    my $string = shift; | 
| 2236 | 
< | 
    #print(OUTPUT $string); | 
| 2236 | 
> | 
     | 
| 2237 | 
> | 
    if(!$dependency){ | 
| 2238 | 
> | 
        print(OUTPUT $string); | 
| 2239 | 
> | 
    } | 
| 2240 | 
  | 
} | 
| 2241 | 
  | 
 | 
| 2242 | 
  | 
 | 
| 2484 | 
  | 
    $f90module =~ s/\s+$//; | 
| 2485 | 
  | 
    $f90module = uc($f90module); | 
| 2486 | 
  | 
     | 
| 2487 | 
< | 
    print " " . $objDir . GetModBasename($f90module) . "." . $modSuffix . "\\\n"; | 
| 2487 | 
> | 
    print " " . $objDir . GetModBasename($f90module) . "." . $modSuffix . " \\\n"; | 
| 2488 | 
  | 
} | 
| 2489 | 
  | 
 | 
| 2490 | 
  | 
############################################################################## | 
| 2511 | 
  | 
        } | 
| 2512 | 
  | 
} | 
| 2513 | 
  | 
 | 
| 2514 | 
+ | 
############################################################################## | 
| 2515 | 
+ | 
# Clean Visited Table | 
| 2516 | 
+ | 
############################################################################## | 
| 2517 | 
+ | 
sub cleanVisited { | 
| 2518 | 
+ | 
    my $visitedFile; | 
| 2519 | 
+ | 
    foreach $visitedFile (keys %visitedTable) { | 
| 2520 | 
+ | 
        delete $visitedTable{$visitedFile}; | 
| 2521 | 
+ | 
    } | 
| 2522 | 
+ | 
 | 
| 2523 | 
+ | 
} | 
| 2524 | 
+ | 
 | 
| 2525 | 
  | 
sub AddModule { | 
| 2526 | 
  | 
        my $modulename = shift; | 
| 2527 | 
  | 
 | 
| 2578 | 
  | 
        return $modname; | 
| 2579 | 
  | 
} | 
| 2580 | 
  | 
 | 
| 2581 | 
+ | 
sub RestoreCommandLineDefine { | 
| 2582 | 
+ | 
    my $macro; | 
| 2583 | 
+ | 
     | 
| 2584 | 
+ | 
    foreach $macro(@savedDefine) { | 
| 2585 | 
+ | 
        Define($macro); | 
| 2586 | 
+ | 
    } | 
| 2587 | 
+ | 
} | 
| 2588 | 
+ | 
 | 
| 2589 | 
+ | 
sub SaveCommandLineDefine { | 
| 2590 | 
+ | 
    my $macro = shift; | 
| 2591 | 
+ | 
    push @savedDefine, $macro; | 
| 2592 | 
+ | 
} | 
| 2593 | 
  | 
############################################################################## | 
| 2594 | 
  | 
# Main routine | 
| 2595 | 
  | 
############################################################################## | 
| 2634 | 
  | 
        } | 
| 2635 | 
  | 
        # add macro and defn to hash table | 
| 2636 | 
  | 
        Define($macro." ".$defn); | 
| 2637 | 
+ | 
         | 
| 2638 | 
+ | 
        #save define macro from command line | 
| 2639 | 
+ | 
        #it will be restored when next source file is processed | 
| 2640 | 
+ | 
        SaveCommandLineDefine($macro." ".$defn); | 
| 2641 | 
  | 
    } | 
| 2642 | 
  | 
 | 
| 2643 | 
  | 
    # Debugging turned on: -d | 
| 2768 | 
  | 
    } | 
| 2769 | 
  | 
 | 
| 2770 | 
  | 
    # Module paths: -Minclude or -M include | 
| 2771 | 
< | 
    elsif(substr($ARGV[$i], 0, 2) eq "-M") { | 
| 2772 | 
< | 
        # -M include format | 
| 2773 | 
< | 
        if(length($ARGV[$i]) == 2) { | 
| 2774 | 
< | 
            if($i+1 >= $argc) { | 
| 2775 | 
< | 
                Error("Argument to `-M' is missing"); | 
| 2776 | 
< | 
            } | 
| 2777 | 
< | 
            AddModulePath($ARGV[++$i]); | 
| 2778 | 
< | 
        } | 
| 2779 | 
< | 
        # -Minclude format | 
| 2780 | 
< | 
        else { | 
| 2781 | 
< | 
            AddModulePath(substr($ARGV[$i], 2)); | 
| 2782 | 
< | 
        } | 
| 2783 | 
< | 
    } | 
| 2771 | 
> | 
    #elsif(substr($ARGV[$i], 0, 2) eq "-M") { | 
| 2772 | 
> | 
    #   # -M include format | 
| 2773 | 
> | 
    #   if(length($ARGV[$i]) == 2) { | 
| 2774 | 
> | 
    #       if($i+1 >= $argc) { | 
| 2775 | 
> | 
    #           Error("Argument to `-M' is missing"); | 
| 2776 | 
> | 
    #       } | 
| 2777 | 
> | 
    #       AddModulePath($ARGV[++$i]); | 
| 2778 | 
> | 
    #   } | 
| 2779 | 
> | 
    #   # -Minclude format | 
| 2780 | 
> | 
    #   else { | 
| 2781 | 
> | 
    #       AddModulePath(substr($ARGV[$i], 2)); | 
| 2782 | 
> | 
    #   } | 
| 2783 | 
> | 
    #} | 
| 2784 | 
  | 
 | 
| 2785 | 
  | 
    # use module | 
| 2786 | 
< | 
    elsif($ARGV[$i] eq "-m") { | 
| 2787 | 
< | 
        if($i+1 >= $argc) { | 
| 2788 | 
< | 
            Error("Argument to `-m' is missing"); | 
| 2789 | 
< | 
        } | 
| 2790 | 
< | 
        UseModule($ARGV[++$i]); | 
| 2786 | 
> | 
    #elsif($ARGV[$i] eq "-m") { | 
| 2787 | 
> | 
    #   if($i+1 >= $argc) { | 
| 2788 | 
> | 
    #       Error("Argument to `-m' is missing"); | 
| 2789 | 
> | 
    #   } | 
| 2790 | 
> | 
    #   UseModule($ARGV[++$i]); | 
| 2791 | 
> | 
    #} | 
| 2792 | 
> | 
 | 
| 2793 | 
> | 
    # make dependency | 
| 2794 | 
> | 
    elsif($ARGV[$i] eq "-M") { | 
| 2795 | 
> | 
        $dependency = 1; | 
| 2796 | 
  | 
    } | 
| 2797 | 
< | 
     | 
| 2797 | 
> | 
 | 
| 2798 | 
> | 
    # make dependency (skip system header files) | 
| 2799 | 
> | 
    elsif($ARGV[$i] eq "-MM") { | 
| 2800 | 
> | 
        $dependency = 1; | 
| 2801 | 
> | 
        $skipSysInclude = 1; | 
| 2802 | 
> | 
    } | 
| 2803 | 
> | 
 | 
| 2804 | 
  | 
    #case of basename of fortran module | 
| 2805 | 
  | 
    elsif($ARGV[$i] eq "-mc") { | 
| 2806 | 
  | 
        my $tempVar = lc($ARGV[++$i]); | 
| 2944 | 
  | 
    } | 
| 2945 | 
  | 
     | 
| 2946 | 
  | 
    #clean visitedTable | 
| 2947 | 
< | 
    %visitedTable = (); | 
| 2947 | 
> | 
    cleanVisited(); | 
| 2948 | 
> | 
     | 
| 2949 | 
> | 
    #clear all define | 
| 2950 | 
> | 
    UndefAll(); | 
| 2951 | 
> | 
     | 
| 2952 | 
> | 
    #restore command line define | 
| 2953 | 
> | 
    RestoreCommandLineDefine(); | 
| 2954 | 
> | 
     | 
| 2955 | 
> | 
    #print dependency rule | 
| 2956 | 
  | 
    print "\n"; | 
| 2957 | 
< | 
    print $objDir . GetObjFile($base_file) . " : "; | 
| 2957 | 
> | 
    print $objDir . GetObjFile($base_file) . " : " . $base_file . " \\"; | 
| 2958 | 
> | 
    print "\n"; | 
| 2959 | 
> | 
 | 
| 2960 | 
  | 
    Parse($base_file); | 
| 2961 | 
  | 
    # close output file if in overwrite mode | 
| 2962 | 
  | 
    if($overwrite) { CloseOutputFile(); }     |