summaryrefslogtreecommitdiff
path: root/scripts/tcl.req
blob: 43c5920c9e0d041ad864052618683a0755a2dba1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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 ; 
}