21 |
|
# Filename : $RCSfile: filepp,v $ |
22 |
|
# Author : $Author: tim $ |
23 |
|
# Maintainer : Darren Miller: darren@cabaret.demon.co.uk |
24 |
< |
# File version : $Revision: 1.3 $ |
25 |
< |
# Last changed : $Date: 2004-10-06 22:19:33 $ |
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 |
|
# |
32 |
|
|
33 |
|
use strict "vars"; |
34 |
|
use strict "subs"; |
35 |
– |
#use Graph; |
35 |
|
# Used to all filepp to work with any char, not just ascii, |
36 |
|
# feel free to remove this if it causes you problems |
37 |
< |
use bytes; |
37 |
> |
#use bytes; |
38 |
|
|
39 |
|
# version number of program |
40 |
|
my $VERSION = '1.7.1'; |
41 |
|
|
42 |
|
# list of paths to search for modules, normal Perl list + module dir |
43 |
< |
push(@INC, "/home/maul/gezelter/tim/code/OOPSE-2.0/scripts/filepp-1.7.1/modules/f90dpend/"); |
43 |
> |
#push(@INC, "/home/maul/gezelter/tim/code/OOPSE-2.0/scripts/filepp-1.7.1/modules/f90dpend/"); |
44 |
|
|
45 |
|
# index of keywords supported and functions to deal with them |
46 |
|
my %Keywords = ( |
280 |
|
all other arguments are assumed to be input files |
281 |
|
"; |
282 |
|
|
284 |
– |
# graph for dependency files |
285 |
– |
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(); } |