diff options
Diffstat (limited to 'scripts/tcl.req')
-rw-r--r-- | scripts/tcl.req | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/scripts/tcl.req b/scripts/tcl.req new file mode 100644 index 000000000..43c5920c9 --- /dev/null +++ b/scripts/tcl.req @@ -0,0 +1,101 @@ +#!/usr/bin/perl + +# tcl.req - a simple makedepends like script for tcl. + +# I plan to rewrite this in C so that perl is not required by RPM at +# build time. + +# by Ken Estes Mail.com kestes@staff.mail.com + +use File::Basename; + +if ("@ARGV") { + foreach (@ARGV) { + process_file($_); + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + process_file($_); + } +} + + +foreach $module (sort keys %require) { + print "tcl($module)\n"; +} + +exit 0; + + + +sub process_file { + + my ($file) = @_; + chomp $file; + + open(FILE, "<$file")|| + die("$0: Could not open file: '$file' : $!\n"); + + while (<FILE>) { + + # Each keyword can appear multiple times. Don't + # bother with datastructures to store these strings, + # if we need to print it print it now. + + if ( m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i) { + foreach $_ (spit(/\s+/, $1)) { + print "$_\n"; + } + } + + s/\#.*//; + + # Each keyword can appear multiple times. Don't + # bother with datastructures to store these strings, + # if we need to print it print it now. + + if ( m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i) { + foreach $_ (spit(/\s+/, $1)) + print "$_\n"; + } + + +# we wish to capture these source statements: + +# source "$PATH/lib/util.tcl" +# source "comconf.tcl" +# if {[catch {source $env(CONTROL_PANEL_LIB_DIR)/bindings.tcl}] != 0} { + + # quick check to see if the complex regexps could possibly match. + # This should speed things up. + + (m/source/) || next; + + # note we include parethesis and '$' and '\' in the pattern + + if ( + (m!source\s+([\'\"])?([0-9A-Za-z/._\-\\\(\)\$]+)!) + ) { + + my ($module) = $2; + + # If there is some interpolation of variables, + # see if taking the basename will give us the filename. + + ($module =~ m/\$/) && + ($module = basename($module)); + + ($module =~ m/\$/) || + ($require{$module}=1); + } + } + + close(FILE)|| + die("$0: Could not close file: '$file' : $!\n"); + + return ; +} |