#!/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 () { # 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 ; }