mirror of
https://github.com/nasa/trick.git
synced 2025-04-07 19:34:23 +00:00
Print library dependencies in order as the user wrote them
When getting the library dependencies we store them in an array now that is in the order they are written and use that for everything. refs #105
This commit is contained in:
parent
119e7908d3
commit
e12ddbcfe1
@ -40,14 +40,16 @@ sub read_lib_deps($@) {
|
||||
read_lib_deps($indent + 1 , @resolved_files) ;
|
||||
}
|
||||
}
|
||||
} elsif ( exists $ENV{TRICK_VERBOSE_BUILD} ) {
|
||||
print "Previously processed " , " " x $indent, "$l\n" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Update any possibly out of date lib_dep files
|
||||
if ( scalar @ARGV ) {
|
||||
# Arguments to the executable are rescanned. New makefile is made if any library dependencies
|
||||
# changed
|
||||
# Arguments are all files (headers and source) that are newer than the makefile.
|
||||
# Keep track if any dependencies changed
|
||||
for my $f ( @ARGV ) {
|
||||
my $deps_changed ;
|
||||
my @resolved_files ;
|
||||
@ -66,7 +68,9 @@ if ( $any_deps_changed == 0 ) {
|
||||
exit ;
|
||||
}
|
||||
|
||||
# Start the top level files which are all of the header files and S_define
|
||||
# If we are here dependencies have changed, or we're running for the first time.
|
||||
# Read in dependency tree starting at the roots. The dependency tree starts with all of the
|
||||
# header files ICG processed and the lib deps listed in the S_define file.
|
||||
open FILE, "build/ICG_processed" or die 'cannot open build/ICG_processed' ;
|
||||
my (@top_file_names) = <FILE> ;
|
||||
close FILE ;
|
||||
@ -84,8 +88,6 @@ read_lib_deps(0, @top_file_names) ;
|
||||
|
||||
my ($n , $f , $k , $i , $m);
|
||||
my $num_inc_objs ;
|
||||
my %all_mis_depends ;
|
||||
my %temp_hash ;
|
||||
my @all_cfly_files ;
|
||||
my @all_read_only_libs ;
|
||||
my @all_compile_libs ;
|
||||
@ -149,6 +151,7 @@ foreach $n ( @all_compile_libs ) {
|
||||
|
||||
# sort and weed out duplicate files
|
||||
foreach $k ( keys %files_by_dir ) {
|
||||
my %temp_hash ;
|
||||
foreach $n ( qw{ c f l y h C cc cxx cpp c++} ) {
|
||||
undef %temp_hash ;
|
||||
@{$files_by_dir{$k}{$n}} = sort grep ++$temp_hash{$_} < 2, @{$files_by_dir{$k}{$n}} ;
|
||||
|
@ -37,6 +37,7 @@ sub get_lib_deps ($$) {
|
||||
$file_path_dir =~ s/\/include$// ;
|
||||
|
||||
my %resolved_files ;
|
||||
my @ordered_resolved_files ;
|
||||
foreach my $l (@lib_list) {
|
||||
my $found = 0 ;
|
||||
$l =~ s/\(|\)|\s+//g ;
|
||||
@ -48,7 +49,10 @@ sub get_lib_deps ($$) {
|
||||
foreach my $inc ( dirname($source_file_name) , @inc_paths) {
|
||||
if ( -e "$inc/$rel_dir" ) {
|
||||
my $f = abs_path("$inc/$rel_dir") . "/" . basename($l) ;
|
||||
$resolved_files{$f} = 1 ;
|
||||
if ( ! exists $resolved_files{$f} ) {
|
||||
$resolved_files{$f} = 1 ;
|
||||
push @ordered_resolved_files , $f ;
|
||||
}
|
||||
$found = 1 ;
|
||||
last ;
|
||||
}
|
||||
@ -58,7 +62,10 @@ sub get_lib_deps ($$) {
|
||||
if ( -e "$inc/$l" ) {
|
||||
#print "found $inc/$l$ext\n" ;
|
||||
my $f = abs_path(dirname("$inc/$l")) . "/" . basename("$inc/$l") ;
|
||||
$resolved_files{$f} = 1 ;
|
||||
if ( ! exists $resolved_files{$f} ) {
|
||||
$resolved_files{$f} = 1 ;
|
||||
push @ordered_resolved_files , $f ;
|
||||
}
|
||||
$found = 1 ;
|
||||
last ;
|
||||
}
|
||||
@ -72,27 +79,38 @@ sub get_lib_deps ($$) {
|
||||
if ( -e "$inc/$rel_dir/$base$ext" ) {
|
||||
#print "found $inc/$l$ext\n" ;
|
||||
my $f = abs_path("$inc/$rel_dir") . "/$base$ext" ;
|
||||
$resolved_files{$f} = 1 ;
|
||||
if ( ! exists $resolved_files{$f} ) {
|
||||
$resolved_files{$f} = 1 ;
|
||||
push @ordered_resolved_files , $f ;
|
||||
}
|
||||
$found = 1 ;
|
||||
last ;
|
||||
}
|
||||
elsif ( -e "$inc/$rel_dir/src/$base$ext" ) {
|
||||
#print "found $inc/src/$l$ext\n" ;
|
||||
my $f = abs_path("$inc/$rel_dir/src") . "/$base$ext" ;
|
||||
$resolved_files{$f} = 1 ;
|
||||
if ( ! exists $resolved_files{$f} ) {
|
||||
$resolved_files{$f} = 1 ;
|
||||
push @ordered_resolved_files , $f ;
|
||||
}
|
||||
$found = 1 ;
|
||||
last ;
|
||||
}
|
||||
}
|
||||
last if ( $found == 1 ) ;
|
||||
}
|
||||
# file not found, append the "o" we stripped for the error message
|
||||
$l .= "o" ;
|
||||
}
|
||||
|
||||
if ( $found == 0 ) {
|
||||
print STDERR "[33mWarning: Could not find dependency $l[0m\n" ;
|
||||
if ( $l =~ /^(sim_services)/ or $l =~ /^(er7_utils)/ ) {
|
||||
print STDERR "[33mWarning: Not necessary to list $1 dependencies $l[0m\n" ;
|
||||
} else {
|
||||
print STDERR "[33mWarning: Could not find dependency $l[0m\n" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (sort keys %resolved_files) ;
|
||||
return (@ordered_resolved_files) ;
|
||||
}
|
||||
|
||||
sub write_lib_deps($) {
|
||||
@ -100,14 +118,18 @@ sub write_lib_deps($) {
|
||||
my ($source_file_name) = @_ ;
|
||||
my $contents ;
|
||||
{
|
||||
# read file in slurp mode. Keep the scope of undefining $/ to just this read
|
||||
# read source file in slurp mode. Keep the scope of undefining $/ (slurp) to this read
|
||||
local $/ = undef ;
|
||||
open SOURCE, $source_file_name or warn 'cannot read $source_file_name' ;
|
||||
$contents = <SOURCE> ;
|
||||
close SOURCE ;
|
||||
}
|
||||
# Get the library dependencies
|
||||
my (@resolved_files) = get_lib_deps($contents, $source_file_name) ;
|
||||
# Remove a self dependency if it exists
|
||||
@resolved_files = grep { $_ ne $source_file_name } @resolved_files ;
|
||||
|
||||
# Build the library dependencies file name to store results
|
||||
my ( $file, $dir, $suffix) = fileparse($source_file_name, qr/\.[^.]*/) ;
|
||||
my ($lib_dep_file_name) = "build$dir${file}.lib_deps" ;
|
||||
if ( ! -e "build$dir" ) {
|
||||
@ -115,6 +137,8 @@ sub write_lib_deps($) {
|
||||
}
|
||||
|
||||
if ( -e $lib_dep_file_name ) {
|
||||
# If the library dependeny file exists open the old lib dep file
|
||||
# and compare the new and old lists.
|
||||
open OLDLIBDEP, "$lib_dep_file_name" ;
|
||||
my @old_resolved = <OLDLIBDEP> ;
|
||||
close OLDLIBDEP ;
|
||||
@ -127,15 +151,18 @@ sub write_lib_deps($) {
|
||||
$deps_changed = 1 ;
|
||||
}
|
||||
} else {
|
||||
# If the library dependeny does not exist, the deps changed.
|
||||
$deps_changed = 1 ;
|
||||
}
|
||||
|
||||
# if the library dependencies changed, write out the new dependency list
|
||||
if ( $deps_changed ) {
|
||||
open LIBDEP, ">$lib_dep_file_name" ;
|
||||
print LIBDEP map {"$_\n"} @resolved_files ;
|
||||
close LIBDEP ;
|
||||
}
|
||||
|
||||
# return the deps changed flag and the list of dependencies
|
||||
return $deps_changed , @resolved_files ;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user