Diff for /loncom/build/make_rpm.pl between versions 1.20 and 1.21

version 1.20, 2002/07/03 21:17:56 version 1.21, 2002/12/18 17:56:34
Line 14 Line 14
 #  #
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
 # This file is part of the LearningOnline Network with CAPA (LON-CAPA).  # This file was written to help the LearningOnline Network with CAPA (LON-CAPA)
   # project.
 #  #
 # LON-CAPA is free software; you can redistribute it and/or modify  # LON-CAPA is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by  # it under the terms of the GNU General Public License as published by
Line 37 Line 38
 # YEAR=2001  # YEAR=2001
 # 1/8,1/10,1/13,1/23,5/16 - Scott Harrison  # 1/8,1/10,1/13,1/23,5/16 - Scott Harrison
 # YEAR=2002  # YEAR=2002
 # 1/4,1/8,1/9,2/13,4/7 - Scott Harrison  # 1/4,1/8,1/9,2/13,4/7,12/18 - Scott Harrison
 #  #
 ###  ###
   
Line 68 Line 69
 ##                                                                           ##  ##                                                                           ##
 ###############################################################################  ###############################################################################
   
   my $VERSION = 2.0;
   
 use strict;  use strict;
   
 # ------------------------ Check to see if RPM builder application is available  # ------------------------ Check to see if RPM builder application is available
   
 unless (-e '/usr/lib/rpm/rpmrc') { # part of the expected rpm software package  unless (-e '/usr/lib/rpm/rpmrc') # part of the expected rpm software package
     {
     print(<<END);      print(<<END);
 **** ERROR **** This script only works with a properly installed RPM builder  **** ERROR **** This script only works with a properly installed RPM builder
 application.    application.  
Line 80  Cannot find /usr/lib/rpm/rpmrc, so canno Line 84  Cannot find /usr/lib/rpm/rpmrc, so canno
 Script aborting.  Script aborting.
 END  END
     exit(1);      exit(1);
 }    }
   
 # ---------------------------------------------- Read in command-line arguments  # ---------------------------------------------- Read in command-line arguments
   
 my ($tag,$version,$configuration_files,$documentation_files,  my ($tag,$version,$release,$configuration_files,$documentation_files,
     $pathprefix,$customize)=@ARGV;      $pathprefix,$customize)=@ARGV;
 @ARGV=(); # read standard input based on a pipe, not a command-line argument  @ARGV=(); # read standard input based on a pipe, not a command-line argument
   
 # standardize pathprefix argument  # standardize pathprefix argument
 $pathprefix=~s/\/$//; # OTHERWISE THE BEGINNING SLASH MIGHT BE REMOVED  $pathprefix=~s/\/$//; # OTHERWISE THE BEGINNING SLASH MIGHT BE REMOVED
   
 if (!$version) {# version should be defined and string length greater than zero  if (!$version) # version should be defined and string length greater than zero
     {
     print(<<END);      print(<<END);
 See "perldoc make_rpm.pl" for more information.  See "perldoc make_rpm.pl" for more information.
   
 Usage:   Usage: 
            <STDIN> | perl make_rpm.pl <TAG> <VERSION> [CONFIGURATION_FILES]             <STDIN> | perl make_rpm.pl <TAG> <VERSION> <RELEASE>
            [DOCUMENTATION_FILES] [PATHPREFIX] [CUSTOMIZATION_XML]     [CONFIGURATION_FILES] [DOCUMENTATION_FILES] [PATHPREFIX]
      [CUSTOMIZATION_XML]
   
 Standard input provides the list of files to work with.  Standard input provides the list of files to work with.
 TAG, required descriptive tag.  For example, a kerberos software  TAG, required descriptive tag.  For example, a kerberos software
Line 106  the generation of a temporary directory; Line 112  the generation of a temporary directory;
 a pre-existing directory named ./TAG.)  a pre-existing directory named ./TAG.)
 VERSION, required version.  Needed to generate version information  VERSION, required version.  Needed to generate version information
 for the RPM.  It is recommended that this be in the format N.M where N and  for the RPM.  It is recommended that this be in the format N.M where N and
 M are integers.  M are integers.  For example, 0.3, 4.1, and 8.9 are all valid version numbers.
   RELEASE, required release number.  Needed to generate release information
   for the RPM.  This is typically an integer, but can also be given descriptive
   text such as 'rh7' or 'mandrake8a'.
 CONFIGURATION_FILES, optional comma-separated listing of files to  CONFIGURATION_FILES, optional comma-separated listing of files to
 be treated as configuration files by RPM (and thus subject to saving  be treated as configuration files by RPM (and thus subject to saving
 during RPM upgrades).  during RPM upgrades).
Line 123  description, and pre-installation script Line 132  description, and pre-installation script
 "perldoc make_rpm.pl").  "perldoc make_rpm.pl").
 END  END
     exit(1);      exit(1);
 }    }
   
 # ----- Generate temporary directories (subdirs of first command-line argument)  # ----- Generate temporary directories (subdirs of first command-line argument)
   
 # Do some error-checking related to important first command-line argument.  # Do some error-checking related to important first command-line argument.
 if ($tag=~/\W/) { # non-alphanumeric characters cause problems  if ($tag=~/[^\w-]/) # non-alphanumeric characters cause problems
     {
     print(<<END);      print(<<END);
 **** ERROR **** Invalid tag name "$tag"  **** ERROR **** Invalid tag name "$tag"
 (The first command-line argument must be alphanumeric characters without  (The first command-line argument must be alphanumeric characters without
 spaces.)  spaces.)
 END  END
     exit(1);      exit(1);
 }    }
 if (-e $tag) { # do not overwrite or conflict with existing data  if (-e $tag) # do not overwrite or conflict with existing data
     {
     print(<<END);      print(<<END);
 **** ERROR **** a file or directory "./$tag" already exists  **** ERROR **** a file or directory "./$tag" already exists
 (This program needs to generate a temporary directory named "$tag".)  (This program needs to generate a temporary directory named "$tag".)
 END  END
     exit(1);      exit(1);
 }    }
   
 print('Generating temporary directory ./'.$tag."\n");  print('Generating temporary directory ./'.$tag."\n");
 mkdir($tag,0755) or die("**** ERROR **** cannot generate $tag directory\n");  mkdir($tag,0755) or die("**** ERROR **** cannot generate $tag directory\n");
Line 171  my @lines=<IN>; Line 182  my @lines=<IN>;
 close(IN);  close(IN);
   
 open(RPMRC,">$tag/SPECS/rpmrc");  open(RPMRC,">$tag/SPECS/rpmrc");
 foreach my $line (@lines) {  foreach my $line (@lines)
     if ($line=~/^macrofiles/) {    {
       if ($line=~/^macrofiles/)
         {
  chomp($line);   chomp($line);
  $line.=":$currentdir/SPECS/rpmmacros\n";   $line.=":$currentdir/SPECS/rpmmacros\n";
     }        }
     print(RPMRC $line);      print(RPMRC $line);
 }    }
 close(RPMRC);  close(RPMRC);
   
 open(RPMMACROS,">$tag/SPECS/rpmmacros");  open(RPMMACROS,">$tag/SPECS/rpmmacros");
Line 193  close(RPMMACROS); Line 206  close(RPMMACROS);
 # ------------------------- Perform variable initializations and customizations  # ------------------------- Perform variable initializations and customizations
   
 my $cu=''; # string that holds customization XML file contents  my $cu=''; # string that holds customization XML file contents
 if (length($customize)>0) {  if (length($customize)>0)
     {
     print('Reading in XML-formatted customizations from '.$customize."\n");      print('Reading in XML-formatted customizations from '.$customize."\n");
     open(IN,"<$customize") or      open(IN,"<$customize") or
     (      (
Line 203  if (length($customize)>0) { Line 217  if (length($customize)>0) {
     my @clines=(<IN>);      my @clines=(<IN>);
     $cu=join('',@clines);      $cu=join('',@clines);
     close(IN);      close(IN);
 }    }
   
 # tv - temporary variable (if it exists inside the XML document) then use it,  # tv - temporary variable (if it exists inside the XML document) then use it,
 # otherwise don't overwrite existing values of variables  # otherwise don't overwrite existing values of variables
Line 217  $tv=grabtag('name',$cu,1); $name=$tv if Line 231  $tv=grabtag('name',$cu,1); $name=$tv if
 $name=~s/\<tag \/\>/$tag/g;  $name=~s/\<tag \/\>/$tag/g;
   
 # (When in doubt, be paranoid about overwriting things.)  # (When in doubt, be paranoid about overwriting things.)
 if (-e "$name-$version-1.i386.rpm") {  if (-e "$name-$version-1.i386.rpm")
     {
     print(`cd $invokingdir; rm -Rf $tag`); # clean temporary filespace in use      print(`cd $invokingdir; rm -Rf $tag`); # clean temporary filespace in use
     die("**** ERROR **** $name-$version-1.i386.rpm already exists.\n");      die("**** ERROR **** $name-$version-1.i386.rpm already exists.\n");
 }    }
   
 my $requires='';  my $requires='';
 # read in relevant requires info from customization file (if applicable)  # read in relevant requires info from customization file (if applicable)
Line 247  my $copyright="not specified here"; Line 262  my $copyright="not specified here";
 $tv=grabtag('copyright',$cu,1); $copyright=$tv if $tv;  $tv=grabtag('copyright',$cu,1); $copyright=$tv if $tv;
 $copyright=~s/\<tag \/\>/$tag/g;  $copyright=~s/\<tag \/\>/$tag/g;
   
 open(SPEC,">$tag/SPECS/$name-$version.spec");  my $rpmgroup="Utilities/System";
   # read in copyright from customization if available
   $tv=grabtag('group',$cu,1); $rpmgroup=$tv if $tv;
   $rpmgroup=~s/\<tag \/\>/$tag/g;
   
 my $vendor='Me';  my $vendor='Me';
 # read in vendor from customization if available  # read in vendor from customization if available
Line 267  $pre=~s/\<tag \/\>/$tag/g; Line 285  $pre=~s/\<tag \/\>/$tag/g;
 # ------------------------------------- Print header information for .spec file  # ------------------------------------- Print header information for .spec file
 print('Print header information for .spec file'."\n");  print('Print header information for .spec file'."\n");
   
   open(SPEC,">$tag/SPECS/$name-$version.spec");
 print(SPEC <<END);  print(SPEC <<END);
 Summary: $summary  Summary: $summary
 Name: $name  Name: $name
 Version: $version  Version: $version
 Release: 1  Release: $release
 Vendor: $vendor  Vendor: $vendor
 BuildRoot: $currentdir/BuildRoot  BuildRoot: $currentdir/BuildRoot
 Copyright: $copyright  Copyright: $copyright
 Group: Utilities/System  Group: $rpmgroup
 Source: $name-$version.tar.gz  Source: $name-$version.tar.gz
 AutoReqProv: $autoreqprov  AutoReqProv: $autoreqprov
 $requires  $requires
Line 310  my %BinaryRootMakefile; Line 329  my %BinaryRootMakefile;
 my %Makefile;  my %Makefile;
 my %dotspecfile;  my %dotspecfile;
   
 foreach my $file (<>) {  foreach my $file (<>)
     {
     chomp($file);      chomp($file);
     my $comment="";      my $comment="";
     if ($file=~/\s+\#(.*)$/) {      if ($file=~/\s+\#(.*)$/)
         {
  $file=~s/\s+\#(.*)$//;   $file=~s/\s+\#(.*)$//;
  $comment=$1;   $comment=$1;
     }        }
     my $directive="";      my $directive="";
     if ($comment=~/config\(noreplace\)/) {      if ($comment=~/config\(noreplace\)/)
         {
  $directive="\%config(noreplace) ";   $directive="\%config(noreplace) ";
     }        }
     elsif ($comment=~/config/) {      elsif ($comment=~/config/)
         {
  $directive="\%config ";   $directive="\%config ";
     }        }
     elsif ($comment=~/doc/) {      elsif ($comment=~/doc/)
         {
  $directive="\%doc";   $directive="\%doc";
     }        }
     if (($type,$size,$octalmode,$user,$group)=find_info($file)) {      if (($type,$size,$octalmode,$user,$group)=find_info($file))
         {
  $octalmode="0" . $octalmode if length($octalmode)<4;   $octalmode="0" . $octalmode if length($octalmode)<4;
  if ($pathprefix) {   if ($pathprefix)
             {
     $file=~s/^$pathprefix//;      $file=~s/^$pathprefix//;
  }    }
  if ($type eq "files") {   if ($type eq "files")
             {
     push(@{$BinaryRootMakefile{$type}},"\tinstall -D -m $octalmode ".      push(@{$BinaryRootMakefile{$type}},"\tinstall -D -m $octalmode ".
  "$pathprefix$file $binaryroot$file\n");   "$pathprefix$file $binaryroot$file\n");
     push(@{$Makefile{$type}},"\tinstall -D -m $octalmode ".      push(@{$Makefile{$type}},"\tinstall -D -m $octalmode ".
  "\$(SOURCE)$file \$(ROOT)$file\n");   "\$(SOURCE)$file \$(ROOT)$file\n");
     push(@{$dotspecfile{$type}},"$directive\%attr($octalmode,$user,".      push(@{$dotspecfile{$type}},"$directive\%attr($octalmode,$user,".
  "$group) $file\n");   "$group) $file\n");
  }    }
  elsif ($type eq "directories") {   elsif ($type eq "directories")
             {
     push(@{$BinaryRootMakefile{$type}},"\tinstall -m $octalmode -d ".      push(@{$BinaryRootMakefile{$type}},"\tinstall -m $octalmode -d ".
  "$binaryroot$file\n");   "$binaryroot$file\n");
     push(@{$Makefile{$type}},"\tinstall -m $octalmode -d ".      push(@{$Makefile{$type}},"\tinstall -m $octalmode -d ".
  "\$(SOURCE)$file \$(ROOT)$file\n");   "\$(SOURCE)$file \$(ROOT)$file\n");
     push(@{$dotspecfile{$type}},"\%dir \%attr($octalmode,$user,".      push(@{$dotspecfile{$type}},"\%dir \%attr($octalmode,$user,".
  "$group) $file\n");   "$group) $file\n");
  }    }
  elsif ($type eq "links") {   elsif ($type eq "links")
             {
     my $link=$size; # I use the size variable to pass the link value      my $link=$size; # I use the size variable to pass the link value
                             # from the subroutine find_info                              # from the subroutine find_info
     $link=~s/^$pathprefix//;      $link=~s/^$pathprefix//;
Line 356  foreach my $file (<>) { Line 385  foreach my $file (<>) {
          "\tln -s $link $binaryroot$file\n");           "\tln -s $link $binaryroot$file\n");
     push(@{$Makefile{$type}},"\tln -s $link \$(ROOT)$file\n");      push(@{$Makefile{$type}},"\tln -s $link \$(ROOT)$file\n");
     push(@{$dotspecfile{$type}},"\%attr(-,$user,$group) $file\n");      push(@{$dotspecfile{$type}},"\%attr(-,$user,$group) $file\n");
  }    }
     }        }
 }    }
   
 # -------------------------------------- Generate SRPM and BinaryRoot Makefiles  # -------------------------------------- Generate SRPM and BinaryRoot Makefiles
 print('Generate SRPM and BinaryRoot Makefiles.'."\n");  print('Generate SRPM and BinaryRoot Makefiles.'."\n");
Line 370  mkdir("$tag/SOURCES/$name-$version",0755 Line 399  mkdir("$tag/SOURCES/$name-$version",0755
   
 open(OUTS,">$tag/SOURCES/$name-$version/Makefile");  open(OUTS,">$tag/SOURCES/$name-$version/Makefile");
 open(OUTB, ">$tag/BinaryRootMakefile");  open(OUTB, ">$tag/BinaryRootMakefile");
 foreach $type ("directories","files","links") {  foreach $type ("directories","files","links")
     {
     print(OUTS "$type\:\n");      print(OUTS "$type\:\n");
     print(OUTS join("",@{$Makefile{$type}})) if $Makefile{$type};      print(OUTS join("",@{$Makefile{$type}})) if $Makefile{$type};
     print(OUTS "\n");      print(OUTS "\n");
Line 379  foreach $type ("directories","files","li Line 409  foreach $type ("directories","files","li
  if $BinaryRootMakefile{$type};   if $BinaryRootMakefile{$type};
     print(OUTB "\n");      print(OUTB "\n");
     print(SPEC join("",@{$dotspecfile{$type}})) if $dotspecfile{$type};      print(SPEC join("",@{$dotspecfile{$type}})) if $dotspecfile{$type};
 }    }
 close(OUTB);  close(OUTB);
 close(OUTS);  close(OUTS);
   
Line 397  print('Build a tarball and then run the Line 427  print('Build a tarball and then run the
 my $command="cd $currentdir/SOURCES; tar czvf $name-$version.tar.gz ".  my $command="cd $currentdir/SOURCES; tar czvf $name-$version.tar.gz ".
     "$name-$version";      "$name-$version";
 print(`$command`);  print(`$command`);
 $command="cd $currentdir/SPECS; rpm --rcfile=./rpmrc -ba ".  
     "$name-$version.spec; cd ../RPMS/i386; cp -v ".  # ----------------------------------------- Define commands to be executed.
     "$name-$version-1.i386.rpm $invokingdir/.";  # command1a works for rpm version <=4.0.2
   # command1b works for rpm version >4.0.4
   
   my $arch = 'i386';
   
   my $command1a="cd $currentdir/SPECS; rpm --rcfile=./rpmrc --target=$arch -ba ".
       "$name-$version.spec";
   
   my $rpmcommand = 'rpm';
   if (`rpmbuild --version`) {$rpmcommand = 'rpmbuild';}
   my $command1b="cd $currentdir/SPECS; $rpmcommand --rcfile=./rpmrc ".
       "-ba --target $arch ".
       "$name-$version.spec";
   
   # ---------------------------------------------- Run the "rpm -ba" command.
   # The strategy here is to...try one approach, and then the other.
   print "$command1a\n";
   print (`$command1a`);
   if ($?!=0)
     {
       print(<<END);
   **** WARNING **** RPM compilation failed for rpm version 4.0.2 command syntax
   (...trying another command syntax...)
   END
       print "$command1b\n";
       print (`$command1b`);
       if ($?!=0)
         {
       print(<<END);
   **** ERROR **** RPM compilation failed for rpm version 4.0.4 command syntax
   (...no more syntax choices to try...)
   END
           exit(1);
         }
     }
   
   # -------------------------------------------------------- Retrieve binary rpm.
   $command="cd $currentdir/RPMS/$arch; cp -v ".
       "$name-$version-$release.$arch.rpm $invokingdir/.";
 print(`$command`);  print(`$command`);
   
 # --------------------------------------------------------- clean everything up  # --------------------------------------------------------- clean everything up
Line 411  print('Success. Script complete.'."\n"); Line 479  print('Success. Script complete.'."\n");
   
 # ----------------------------------------------------------------- SUBROUTINES  # ----------------------------------------------------------------- SUBROUTINES
 # ----- Subroutine: find_info - recursively gather information from a directory  # ----- Subroutine: find_info - recursively gather information from a directory
 sub find_info {  sub find_info
     {
     my ($file)=@_;      my ($file)=@_;
     my $line='';      my $line='';
     if (($line=`find $file -type f -prune`)=~/^$file\n/) {      my $safefile = $file;
       $safefile =~ s/\+/\\+/g; # Better regular expression matching.
       if (($line=`find $file -type f -prune`)=~/^$safefile\n/)
         {
  $line=`find $file -type f -prune -printf "\%s\t\%m\t\%u\t\%g"`;   $line=`find $file -type f -prune -printf "\%s\t\%m\t\%u\t\%g"`;
  return("files",split(/\t/,$line));   return("files",split(/\t/,$line));
     }        }
     elsif (($line=`find $file -type d -prune`)=~/^$file\n/) {      elsif (($line=`find $file -type d -prune`)=~/^$safefile\n/)
         {
  $line=`find $file -type d -prune -printf "\%s\t\%m\t\%u\t\%g"`;   $line=`find $file -type d -prune -printf "\%s\t\%m\t\%u\t\%g"`;
  return("directories",split(/\t/,$line));   return("directories",split(/\t/,$line));
     }        }
     elsif (($line=`find $file -type l -prune`)=~/^$file\n/) {      elsif (($line=`find $file -type l -prune`)=~/^$safefile\n/)
         {
  $line=`find $file -type l -prune -printf "\%l\t\%m\t\%u\t\%g"`;   $line=`find $file -type l -prune -printf "\%l\t\%m\t\%u\t\%g"`;
  return("links",split(/\t/,$line));   return("links",split(/\t/,$line));
     }        }
     die("**** ERROR **** $file is neither a directory, soft link, or file.\n");      die("**** ERROR **** $file is neither a directory, soft link, or file.\n");
 }    }
   
 # ------------------------- Subroutine: grabtag - grab a tag from an xml string  # ------------------------- Subroutine: grabtag - grab a tag from an xml string
 sub grabtag {  sub grabtag
     {
     my ($tag,$text,$clean)=@_;      my ($tag,$text,$clean)=@_;
     # meant to be quick and dirty as opposed to a formal state machine parser      # meant to be quick and dirty as opposed to a formal state machine parser
     my $value='';      my $value='';
     $cu=~/\<$tag\>(.*?)\<\/$tag\>/s;       $cu=~/\<$tag\>(.*?)\<\/$tag\>/s; 
     $value=$1; $value=~s/^\s+//;      $value=$1; $value=~s/^\s+//;
     if ($clean==1) {      if ($clean==1)
         {
  $value=~s/\n\s/ /g;   $value=~s/\n\s/ /g;
  $value=~s/\s\n/ /g;   $value=~s/\s\n/ /g;
  $value=~s/\n/ /g;   $value=~s/\n/ /g;
  $value=~s/\s+$//;   $value=~s/\s+$//;
     }        }
     return($value);      return($value);
 }    }
   
 # ----------------------------------------------------- Plain Old Documentation  # ----------------------------------------------------- Plain Old Documentation
   
Line 455  make_rpm.pl - cleanly generate an rpm in Line 531  make_rpm.pl - cleanly generate an rpm in
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
 Usage: <STDIN> | make_rpm.pl <TAG> <VERSION>  Usage: <STDIN> | make_rpm.pl <TAG> <VERSION> <RELEASE>
        [CONFIGURATION_FILES] [DOCUMENTATION_FILES]         [CONFIGURATION_FILES] [DOCUMENTATION_FILES]
        [PATHPREFIX] [CUSTOMIZATION_XML]         [PATHPREFIX] [CUSTOMIZATION_XML]
   
Line 527  I<VERSION> ($version), B<required> versi Line 603  I<VERSION> ($version), B<required> versi
 information for the RPM.  This should be in the format N.M where N and M are  information for the RPM.  This should be in the format N.M where N and M are
 integers.  integers.
   
   I<RELEASE> ($release), B<required> release number.  Needed to generate release
   information for the RPM.  This is typically an integer, but can also be given
   descriptive text such as 'rh7' or 'mandrake8a'.
   
 I<CONFIGURATION_FILES>, B<optional> comma-separated listing of files to  I<CONFIGURATION_FILES>, B<optional> comma-separated listing of files to
 be treated as configuration files by RPM (and thus subject to saving  be treated as configuration files by RPM (and thus subject to saving
 during RPM upgrades).  Configuration files can also be specified in  during RPM upgrades).  Configuration files can also be specified in
Line 552  description, and pre-installation script Line 632  description, and pre-installation script
 =head2 Examples  =head2 Examples
   
  bash$ find /notreallyrootdir | perl make_rpm.pl \   bash$ find /notreallyrootdir | perl make_rpm.pl \
        makemoney 3.1 '' \         makemoney 3.1 1 '' \
        '/usr/doc/man/man3/makemoney.3' \         '/usr/doc/man/man3/makemoney.3' \
        /notreallyrootdir         /notreallyrootdir
  would generate makemoney-3.1-1.i386.rpm   would generate makemoney-3.1-1.i386.rpm
   
  bash$ find /usr/local/bin | \   bash$ find /usr/local/bin | \
        perl make_rpm.pl mybinfiles 1.0         perl make_rpm.pl mybinfiles 1.0 2
  would generate mybinfiles-1.0-1.i386.rpm   would generate mybinfiles-1.0-2.i386.rpm
   
    bash$ echo '/sycamore33/tree.txt' | \
          perl make_rpm.pl sycamore 1.0 2 '' '' '/sycamore33'
    would generate sycamore-1.0-2.i386.rpm
    Note that the generated sycamore rpm would install files at the root
    '/' directory (not underneath /sycamore33); thus a file named
    '/tree.txt' is created, NOT '/sycamore33/tree.txt'.
   
  bash$ find /home/joe/romeodir/buildloc | \   bash$ find /home/joe/romeodir/buildloc | \
        perl make_rpm.pl romeo \         perl make_rpm.pl romeo \
        1.0 '' '' '/home/joe/romeodir/buildloc' customize.xml         1.0 3 '' '' '/home/joe/romeodir/buildloc' customize.xml
  would generate romeo with customizations from customize.xml.   would generate romeo with customizations from customize.xml.
    Note that the generated romeo rpm would install files at the root
    '/' directory (not underneath /home/joe/romedir/buildloc).
   
 The I<CUSTOMIZATION_XML> argument represents a way to customize the  The I<CUSTOMIZATION_XML> argument represents a way to customize the
 numerous variables associated with RPMs.  This argument represents  numerous variables associated with RPMs.  This argument represents
Line 690  information, three of which are mandator Line 779  information, three of which are mandator
   
 =item *  =item *
   
 (required) a descriptive tag and a version tag for the naming of the  (required) a descriptive tag, version tag, and release tag for the naming of
 RPM software package;  the RPM software package;
   
 =item *  =item *
   
Line 715  generated under the directory from which Line 804  generated under the directory from which
   
 For example, user "joe" running  For example, user "joe" running
   
  cat file_list.txt | make_rpm.pl krb4 1.0   cat file_list.txt | make_rpm.pl krb4 1.0 1
   
 would temporarily generate F</home/joe/krb4/>.  would temporarily generate F</home/joe/krb4/>.
   

Removed from v.1.20  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>