change log for rtems-tools (2010-08-09)

rtems-vc at rtems.org rtems-vc at rtems.org
Mon Aug 9 05:10:34 UTC 2010


 *ccj*:
2010-08-09      Chris Johns <chrisj at rtems.org>

        * specbuilder/perl.prov, specbuilder/perl.req: New.
        * specbuilder/defaults.py: The config.sub path is a sub-dir of the
        command.
        * specbuilder/setup.py: Fix make bug. Install RPMLIB files when
        creating the directory.
        * specbuilder/spec.py: Add '%check'.

M    1.2  ChangeLog
M    1.2  specbuilder/specbuilder/defaults.py
A    1.1  specbuilder/specbuilder/perl.prov
A    1.1  specbuilder/specbuilder/perl.req
M    1.2  specbuilder/specbuilder/setup.py
M    1.2  specbuilder/specbuilder/spec.py

diff -u rtems-tools/ChangeLog:1.1 rtems-tools/ChangeLog:1.2
--- rtems-tools/ChangeLog:1.1	Sun Aug  8 20:29:43 2010
+++ rtems-tools/ChangeLog	Sun Aug  8 23:50:30 2010
@@ -1,5 +1,14 @@
 2010-08-09	Chris Johns <chrisj at rtems.org>
 
+	* specbuilder/perl.prov, specbuilder/perl.req: New.
+	* specbuilder/defaults.py: The config.sub path is a sub-dir of the
+	command.
+	* specbuilder/setup.py: Fix make bug. Install RPMLIB files when
+	creating the directory.
+	* specbuilder/spec.py: Add '%check'.
+
+2010-08-09	Chris Johns <chrisj at rtems.org>
+
 	* specbuilder, specbuilder/sb-build, specbuilder/sb-crossgcc,
 	specbuilder/sb-setup, specbuilder/sb-specdump,
 	specbuilder/sb-status, specbuilder/specbuilder/.cvsignore,

diff -u rtems-tools/specbuilder/specbuilder/defaults.py:1.1 rtems-tools/specbuilder/specbuilder/defaults.py:1.2
--- rtems-tools/specbuilder/specbuilder/defaults.py:1.1	Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/defaults.py	Sun Aug  8 23:50:30 2010
@@ -151,7 +151,7 @@
 }
 
 class command_line:
-    """Process the command line in a common way across all speculater commands."""
+    """Process the command line in a common way across all SpecBuilder commands."""
 
     _defaults = { 'params'   : [],
                   'warn-all' : '0',
@@ -175,8 +175,8 @@
                         '--warn-all' : '_warn_all',
                         '--no-clean' : '_no_clean' }
 
-    _target_triplets = { '--host'   :   '_host',
-                         '--build'  :  '_build',
+    _target_triplets = { '--host'   : '_host',
+                         '--build'  : '_build',
                          '--target' : '_target' }
 
     def __init__(self, argv):
@@ -273,7 +273,8 @@
                                     # make sure it is ok.
                                     #
                                     e = execute.capture_execution()
-                                    config_sub = os.path.join(self.command_path, 'config.sub')
+                                    config_sub = os.path.join(self.command_path, 
+                                                              'specbuilder', 'config.sub')
                                     exit_code, proc, output = e.shell(config_sub + ' ' + value)
                                     if exit_code == 0:
                                         value = output

diff -u /dev/null rtems-tools/specbuilder/specbuilder/perl.prov:1.1
--- /dev/null	Mon Aug  9 00:10:34 2010
+++ rtems-tools/specbuilder/specbuilder/perl.prov	Sun Aug  8 23:50:30 2010
@@ -0,0 +1,199 @@
+#!/usr/bin/perl
+
+# RPM (and it's source code) is covered under two separate licenses.
+
+# The entire code base may be distributed under the terms of the GNU
+# General Public License (GPL), which appears immediately below.
+# Alternatively, all of the source code in the lib subdirectory of the
+# RPM source code distribution as well as any code derived from that
+# code may instead be distributed under the GNU Library General Public
+# License (LGPL), at the choice of the distributor. The complete text
+# of the LGPL appears at the bottom of this file.
+
+# This alternative is allowed to enable applications to be linked
+# against the RPM library (commonly called librpm) without forcing
+# such applications to be distributed under the GPL.
+
+# Any questions regarding the licensing of RPM should be addressed to
+# Erik Troan <ewt at redhat.com>.
+
+# a simple script to print the proper name for perl libraries.
+
+# To save development time I do not parse the perl grammmar but
+# instead just lex it looking for what I want.  I take special care to
+# ignore comments and pod's.
+
+# it would be much better if perl could tell us the proper name of a
+# given script.
+
+# The filenames to scan are either passed on the command line or if
+# that is empty they are passed via stdin.
+
+# If there are lines in the file which match the pattern
+#      (m/^\s*\$VERSION\s*=\s+/)
+# then these are taken to be the version numbers of the modules.
+# Special care is taken with a few known idioms for specifying version
+# numbers of files under rcs/cvs control.
+
+# If there are strings in the file which match the pattern
+#     m/^\s*\$RPM_Provides\s*=\s*["'](.*)['"]/i
+# then these are treated as additional names which are provided by the
+# file and are printed as well.
+
+# I plan to rewrite this in C so that perl is not required by RPM at
+# build time.
+
+# by Ken Estes Mail.com kestes at staff.mail.com
+
+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) {
+  if (length($require{$module}) == 0) {
+    print "perl($module)\n";
+  } else {
+
+    # I am not using rpm3.0 so I do not want spaces arround my
+    # operators. Also I will need to change the processing of the
+    # $RPM_* variable when I upgrade.
+
+    print "perl($module) = $require{$module}\n";
+  }
+}
+
+exit 0;
+
+
+
+sub process_file {
+
+  my ($file) = @_;
+  chomp $file;
+  
+  open(FILE, "<$file") || return;
+
+  my ($package, $version, $incomment, $inover) = ();
+
+  while (<FILE>) {
+    
+    # skip the documentation
+
+    # we should not need to have item in this if statement (it
+    # properly belongs in the over/back section) but people do not
+    # read the perldoc.
+
+    if (m/^=(head[1-4]|pod|item)/) {
+      $incomment = 1;
+    }
+
+    if (m/^=(cut)/) {
+      $incomment = 0;
+      $inover = 0;
+    }
+    
+    if (m/^=(over)/) {
+      $inover = 1;
+    }
+
+    if (m/^=(back)/) {
+      $inover = 0;
+    }
+
+    if ($incomment || $inover) {
+       next;
+    }
+    
+    # skip the data section
+    if (m/^__(DATA|END)__$/) {
+      last;
+    }
+
+    # not everyone puts the package name of the file as the first
+    # package name so we report all namespaces except some common
+    # false positives as if they were provided packages (really ugly).
+
+    if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) {
+      $package=$1;
+      undef $version;
+      if ($package eq 'main') {
+        undef $package;
+      } else {
+        # If $package already exists in the $require hash, it means
+        # the package definition is broken up over multiple blocks.
+        # In that case, don't stomp a previous $VERSION we might have
+        # found.  (See BZ#214496.)
+        $require{$package}=undef unless (exists $require{$package});
+      }
+    }
+
+    # after we found the package name take the first assignment to
+    # $VERSION as the version number. Exporter requires that the
+    # variable be called VERSION so we are safe.
+
+    # here are examples of VERSION lines from the perl distribution
+
+    #FindBin.pm:$VERSION = $VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/);
+    #ExtUtils/Install.pm:$VERSION = substr q$Revision$, 10;
+    #CGI/Apache.pm:$VERSION = (qw$Revision$)[1];
+    #DynaLoader.pm:$VERSION = $VERSION = "1.03";     # avoid typo warning
+    #General.pm:$Config::General::VERSION = 2.33;
+    # 
+    # or with the new "our" pragma you could (read will) see:
+    #
+    #    our $VERSION = '1.00'
+    if (($package) && (m/^\s*(our\s+)?\$(\Q$package\E::)?VERSION\s*=\s+/)) {
+
+      # first see if the version string contains the string
+      # '$Revision' this often causes bizzare strings and is the most
+      # common method of non static numbering.
+
+      if (m/(\$Revision: (\d+[.0-9]+))/) {
+	$version= $2; 
+      } elsif (m/[\'\"]?(\d+[.0-9]+)[\'\"]?/) {
+	
+	# look for a static number hard coded in the script
+	
+	$version= $1; 
+      }
+      $require{$package}=$version;
+    }
+  
+    # Allow someone to have a variable that defines virtual packages
+    # The variable is called $RPM_Provides.  It must be scoped with 
+    # "our", but not "local" or "my" (just would not make sense). 
+    # 
+    # For instance:
+    #  
+    #     $RPM_Provides = "blah bleah"
+    # 
+    # Will generate provides for "blah" and "bleah".
+    #
+    # 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*(our\s+)?\$RPM_Provides\s*=\s*["'](.*)['"]/i) {
+      foreach $_ (split(/\s+/, $2)) {
+	print "$_\n";
+      }
+    }
+
+  }
+
+  close(FILE) ||
+    die("$0: Could not close file: '$file' : $!\n");
+
+  return ;
+}

diff -u /dev/null rtems-tools/specbuilder/specbuilder/perl.req:1.1
--- /dev/null	Mon Aug  9 00:10:34 2010
+++ rtems-tools/specbuilder/specbuilder/perl.req	Sun Aug  8 23:50:30 2010
@@ -0,0 +1,247 @@
+#!/usr/bin/perl
+
+# RPM (and its source code) is covered under two separate licenses. 
+
+# The entire code base may be distributed under the terms of the GNU
+# General Public License (GPL), which appears immediately below.
+# Alternatively, all of the source code in the lib subdirectory of the
+# RPM source code distribution as well as any code derived from that
+# code may instead be distributed under the GNU Library General Public
+# License (LGPL), at the choice of the distributor. The complete text
+# of the LGPL appears at the bottom of this file.
+
+# This alternatively is allowed to enable applications to be linked
+# against the RPM library (commonly called librpm) without forcing
+# such applications to be distributed under the GPL.
+
+# Any questions regarding the licensing of RPM should be addressed to
+# Erik Troan <ewt at redhat.com>.
+
+# a simple makedepend like script for perl.
+ 
+# To save development time I do not parse the perl grammmar but
+# instead just lex it looking for what I want.  I take special care to
+# ignore comments and pod's.
+
+# It would be much better if perl could tell us the dependencies of a
+# given script.
+
+# The filenames to scan are either passed on the command line or if
+# that is empty they are passed via stdin.
+
+# If there are strings in the file which match the pattern
+#     m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i
+# then these are treated as additional names which are required by the
+# file and are printed as well.
+
+# I plan to rewrite this in C so that perl is not required by RPM at
+# build time.
+
+# by Ken Estes Mail.com kestes at staff.mail.com
+
+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) {
+  if (length($require{$module}) == 0) {
+    print "perl($module)\n";
+  } else {
+
+    # I am not using rpm3.0 so I do not want spaces around my
+    # operators. Also I will need to change the processing of the
+    # $RPM_* variable when I upgrade.
+
+    print "perl($module) >= $require{$module}\n";
+  }
+}
+
+exit 0;
+
+
+
+sub process_file {
+  
+  my ($file) = @_;
+  chomp $file;
+  
+  open(FILE, "<$file") || return;
+  
+  while (<FILE>) {
+    
+    # skip the "= <<" block
+
+    if ( ( m/^\s*\$(.*)\s*=\s*<<\s*["'](.*)['"]/) ||
+         ( m/^\s*\$(.*)\s*=\s*<<\s*(.*);/) ) {
+      $tag = $2;
+      while (<FILE>) {
+        ( $_ =~ /^$tag/) && last;
+      }
+    }
+
+    # skip q{} quoted sections - just hope we don't have curly brackets
+    # within the quote, nor an escaped hash mark that isn't a comment
+    # marker, such as occurs right here. Draw the line somewhere.
+    if ( m/^.*\Wq[qxwr]?\s*([\{\(\[#|\/])[^})\]#|\/]*$/ && ! m/^\s*(require|use)\s/ ) {
+      $tag = $1;
+      $tag =~ tr/{\(\[\#|\//})]#|\//;
+      while (<FILE>) {
+        ( $_ =~ m/\}/ ) && last;
+      }
+    }
+
+    # skip the documentation
+
+    # we should not need to have item in this if statement (it
+    # properly belongs in the over/back section) but people do not
+    # read the perldoc.
+
+    if ( (m/^=(head[1-4]|pod|item)/) .. (m/^=(cut)/) ) {
+      next;
+    }
+
+    if ( (m/^=(over)/) .. (m/^=(back)/) ) {
+      next;
+    }
+    
+    # skip the data section
+    if (m/^__(DATA|END)__$/) {
+      last;
+    }
+
+    # Each keyword can appear multiple times.  Don't
+    #  bother with datastructures to store these strings,
+    #  if we need to print it print it now.
+    #
+	# Again allow for "our".
+    if ( m/^\s*(our\s+)?\$RPM_Requires\s*=\s*["'](.*)['"]/i) {
+      foreach $_ (split(/\s+/, $2)) {
+	print "$_\n";
+      }
+    }
+
+    if ( 
+
+# ouch could be in a eval, perhaps we do not want these since we catch
+# an exception they must not be required
+
+#   eval { require Term::ReadLine } or die $@;
+#   eval "require Term::Rendezvous;" or die $@;
+#   eval { require Carp } if defined $^S; # If error/warning during compilation,
+
+
+	(m/^(\s*)         # we hope the inclusion starts the line
+	 (require|use)\s+(?!\{)     # do not want 'do {' loops
+	 # quotes around name are always legal
+	 [\'\"]?([^\;\ \'\"\t]*)[\'\"]?[\t\;\ ]
+	 # the syntax for 'use' allows version requirements
+	 \s*([.0-9]*)
+	 /x)
+       ) {
+      my ($whitespace, $statement, $module, $version) = ($1, $2, $3,$4);
+
+      # we only consider require statements that are flush against
+      # the left edge. any other require statements give too many
+      # false positives, as they are usually inside of an if statement
+      # as a fallback module or a rarely used option
+
+      ($whitespace ne "" && $statement eq "require") && next;
+
+      # if there is some interpolation of variables just skip this
+      # dependency, we do not want
+      #        do "$ENV{LOGDIR}/$rcfile";
+   
+      ($module =~ m/\$/) && next;
+
+      # skip if the phrase was "use of" -- shows up in gimp-perl, et al.
+      next if $module eq 'of';
+
+      # if the module ends in a comma we probaly caught some
+      # documentation of the form 'check stuff,\n do stuff, clean
+      # stuff.' there are several of these in the perl distribution
+
+      ($module  =~ m/[,>]$/) && next;
+
+      # if the module name starts in a dot it is not a module name.
+      # Is this necessary?  Please give me an example if you turn this
+      # back on.
+
+      #      ($module =~ m/^\./) && next;
+
+      # if the module ends with .pm strip it to leave only basename.
+      # starts with /, which means its an absolute path to a file
+      if ($module =~ m(^/)) {
+        print "$module\n";
+        next;
+      }
+
+      # sometimes people do use POSIX qw(foo), or use POSIX(qw(foo)) etc.
+      # we can strip qw.*$, as well as (.*$:
+      $module =~ s/qw.*$//;
+      $module =~ s/\(.*$//;
+
+      $module =~ s/\.pm$//;
+
+      # some perl programmers write 'require URI/URL;' when 
+      # they mean 'require URI::URL;'
+
+      $module =~ s/\//::/;
+
+      # trim off trailing parentheses if any.  Sometimes people pass
+      # the module an empty list.
+
+      $module =~ s/\(\s*\)$//;
+
+      if ( $module =~ m/^v?([0-9._]+)$/ ) {
+      # if module is a number then both require and use interpret that
+      # to mean that a particular version of perl is specified
+
+      my $ver=$1;
+      if ($ver =~ /5.00/) {
+        print "perl >= 0:$ver\n";
+        next;
+      }
+      else {
+        print "perl >= 1:$ver\n";
+        next;
+      }
+
+      };
+
+      # ph files do not use the package name inside the file.
+      # perlmodlib documentation says:
+      
+      #       the .ph files made by h2ph will probably end up as
+      #       extension modules made by h2xs.
+      
+      # so do not expend much effort on these.
+
+
+      # there is no easy way to find out if a file named systeminfo.ph
+      # will be included with the name sys/systeminfo.ph so only use the
+      # basename of *.ph files
+
+      ($module  =~ m/\.ph$/) && next;
+
+      $require{$module}=$version;
+      $line{$module}=$_;
+    }
+    
+  }
+
+  close(FILE) ||
+    die("$0: Could not close file: '$file' : $!\n");
+  
+  return ; 
+}

diff -u rtems-tools/specbuilder/specbuilder/setup.py:1.1 rtems-tools/specbuilder/specbuilder/setup.py:1.2
--- rtems-tools/specbuilder/specbuilder/setup.py:1.1	Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/setup.py	Sun Aug  8 23:50:30 2010
@@ -25,6 +25,7 @@
 # Setup a series of directories ready for building with the Spec Builder.
 #
 
+import errno
 import os
 import shutil
 
@@ -48,9 +49,8 @@
     """Set up the various directories in a specified path"""
 
     _dirs = [ 'TARS',
-              'TARS',
               'SPECS',
-              'SOURCE',
+              'SOURCES',
               'RPMLIB',
               'BUILD',
               'TMP' ]
@@ -74,7 +74,19 @@
 
     def make(self, path):
         for d in setup._dirs:
-            self.mkdir(os.path.join(path, d))
+            try:
+                dst = os.path.join(path, d)
+                self.mkdir(dst)
+            except os.error, oerr:
+                if oerr[0] != errno.EEXIST:
+                    raise error.general('OS error: ' + str(oerr))
+            if d == 'RPMLIB':
+                for n in ['perl.prov', 'perl.req']:
+                    sf = os.path.join(self.opts.command_path, 'specbuilder', n)
+                    df = os.path.join(dst, n)
+                    self._output('installing: ' + df)
+                    if os.path.isfile(sf):
+                        shutil.copy(sf, df)
 
 def run():
     import sys
@@ -84,7 +96,7 @@
         _notice(opts, 'RTEMS Tools, Setup Spec Builder, v%s' % (version))
         for path in opts.params():
             s = setup(path, _defaults = _defaults, opts = opts)
-            s.make()
+            s.make(path)
             del s
     except error.general, gerr:
         print gerr

diff -u rtems-tools/specbuilder/specbuilder/spec.py:1.1 rtems-tools/specbuilder/specbuilder/spec.py:1.2
--- rtems-tools/specbuilder/specbuilder/spec.py:1.1	Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/spec.py	Sun Aug  8 23:50:30 2010
@@ -148,6 +148,7 @@
     _directive = [ '%description',
                    '%prep',
                    '%build',
+                   '%check',
                    '%install',
                    '%clean',
                    '%post',



--

Generated by Deluxe Loginfo [http://www.codewiz.org/projects/index.html#loginfo] 2.122 by Bernardo Innocenti <bernie at develer.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/vc/attachments/20100809/77271fac/attachment.html>


More information about the vc mailing list