#!/usr/bin/tclsh8.6

# For each pattern line in incoming UC profile, guess if it's a
# literal file name associated with a shared library, and check their
# presence. For each library that is now absent, try finding a
# replacement having the same major version.

# Try handling both normal library versioning like
# libname.so.<MAJOR>.<minor>[.<subminor>] and ld.so-like versioning
# anything-major.minor.[subminor.]so (handling).

proc main {} {
    while {[gets stdin line]!=-1} {
	switch -glob $line {
	    "#*" - "" - "@*" -
	    "*\\\\*" - "*\\**" {puts $line; continue}
	    "/*.so*" {
		if {![file exists $line]} {
		    # puts "Upgrading $line"
		} else {
		    # file name valid
		    puts $line
		    continue
		}
		# puts "So $line"
		if {"so" eq [file extension $line]} {
		    puts $line
		    # puts "Literal nonstandard so $line"
		} else {
		    set i 3
		    set done 0
		    set fname $line
		    while {$i} {
			incr i -1
			set fname [file rootname $fname]
			if {"so" eq [file extension $fname]} {
			    # puts "Upgrading library not found"
			    break
			}
			if {[file exists $fname]} {
			    set fname [file readlink $fname]
			    # puts "New name is $line"
			    puts [file join [file dirname $line] $fname]
			    set done 1
			    break
			}
		    }
		    if {!$done} {
			puts $line
			puts stderr "W: no replacement for: $line"
			# puts "Cannot upgrade $line"
		    }
		}
	    }
	}
    }
}

main


# Local Variables:
# mode: tcl
# End:
