version 1.11, 2001/05/16 19:30:05
|
version 1.12, 2002/01/05 00:48:05
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
|
|
# Scott Harrison, September 30 |
# The LearningOnline Network with CAPA |
# Automatically generate RPM listing files |
# make_rpm.pl - make RedHat package manager file |
|
# |
|
# $Id$ |
|
# |
|
# Written by Scott Harrison, harris41@msu.edu |
|
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# 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 |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
|
# YEAR=2000 |
|
# 9/30,10/2,12/11,12/12,12/21 - Scott Harrison |
|
# YEAR=2001 |
|
# 1/8,1/10,1/13,1/23,5/16 - Scott Harrison |
|
# YEAR=2002 |
|
# 1/4 - Scott Harrison |
|
# |
|
### |
|
|
|
# Automatically generate RPM files |
# from file listing. |
# from file listing. |
|
|
# This script does actually "build" the RPM. |
# This script does actually "build" the RPM. |
Line 24
|
Line 61
|
|
|
unless (-e "/usr/lib/rpm/rpmrc") { |
unless (-e "/usr/lib/rpm/rpmrc") { |
print <<END; |
print <<END; |
ERROR: This script only works with a properly installed RPM builder application. |
ERROR: This script only works with a properly installed RPM builder |
|
application. |
Cannot find /usr/lib/rpm/rpmrc, so cannot generate customized rpmrc file. |
Cannot find /usr/lib/rpm/rpmrc, so cannot generate customized rpmrc file. |
Script aborting. |
Script aborting. |
END |
END |
Line 34 my ($tag,$version,$configuration_files,$
|
Line 72 my ($tag,$version,$configuration_files,$
|
@ARGV=(); |
@ARGV=(); |
|
|
if (!$version) { |
if (!$version) { |
print "Usage: <TAG> <VERSION> [CONFIGURATION_FILES] [DOCUMENTATION] [PATHPREFIX]\n"; |
print "Usage: <TAG> <VERSION> [CONFIGURATION_FILES] [DOCUMENTATION] ". |
|
"[PATHPREFIX]\n"; |
print "Standard input provides the list of files to work with.\n"; |
print "Standard input provides the list of files to work with.\n"; |
print "TAG, required descriptive tag. For example, a kerberos software package might be tagged as \"krb4\".\n"; |
print "TAG, required descriptive tag. For example, a kerberos software ". |
print "VERSION, required version. Needed to generate version information for the RPM. This should be in the format N.M where N and M are integers.\n"; |
"package might be tagged as \"krb4\".\n"; |
print "CONFIGURATION_FILES, optional comma-separated listing of files to be treated as configuration files by RPM (and thus subject to saving during RPM upgrades).\n"; |
print "VERSION, required version. Needed to generate version information". |
print "DOCUMENTATION, optional comma-separated listing of files to be treated as documentation files by RPM (and thus subject to being placed in the /usr/doc/RPM-NAME directory during RPM installation).\n"; |
" for the RPM. This should be in the format N.M where N and M are ". |
print "PATHPREFIX, optional path to be removed from file listing. This is in case you are building an RPM from files elsewhere than root-level. Note, this still depends on a root directory hierarchy after PATHPREFIX.\n"; |
"integers.\n"; |
|
print "CONFIGURATION_FILES, optional comma-separated listing of files to ". |
|
"be treated as configuration files by RPM (and thus subject to saving". |
|
" during RPM upgrades).\n"; |
|
print "DOCUMENTATION, optional comma-separated listing of files to be ". |
|
"treated as documentation files by RPM (and thus subject to being ". |
|
"placed in the /usr/doc/RPM-NAME directory during RPM installation).". |
|
"\n"; |
|
print "PATHPREFIX, optional path to be removed from file listing. This ". |
|
"is in case you are building an RPM from files elsewhere than ". |
|
"root-level. Note, this still depends on a root directory hierarchy ". |
|
"after PATHPREFIX.\n"; |
exit; |
exit; |
} |
} |
|
|
Line 58 my $file;
|
Line 108 my $file;
|
my $binaryroot="$tag/BinaryRoot"; |
my $binaryroot="$tag/BinaryRoot"; |
my ($type,$size,$octalmode,$user,$group); |
my ($type,$size,$octalmode,$user,$group); |
|
|
$currentdir=`pwd`; chop $currentdir; $invokingdir=$currentdir; $currentdir.="/$tag"; |
$currentdir=`pwd`; chop $currentdir; $invokingdir=$currentdir; |
|
$currentdir.="/$tag"; |
|
|
open (IN,"</usr/lib/rpm/rpmrc") or die("Can't open /usr/lib/rpm/rpmrc"); |
open (IN,"</usr/lib/rpm/rpmrc") or die("Can't open /usr/lib/rpm/rpmrc"); |
@lines=<IN>; |
@lines=<IN>; |
Line 245 END
|
Line 296 END
|
} |
} |
open (SPEC,">$tag/SPECS/LON-CAPA-$tag-$version.spec"); |
open (SPEC,">$tag/SPECS/LON-CAPA-$tag-$version.spec"); |
|
|
|
my $vendor='Laboratory for Instructional Technology Education, Division of '. |
|
'Science and Mathematics Education, Michigan State University.'; |
|
|
print SPEC <<END; |
print SPEC <<END; |
Summary: Files for the $tag component of LON-CAPA. |
Summary: Files for the $tag component of LON-CAPA. |
Name: LON-CAPA-$tag |
Name: LON-CAPA-$tag |
Version: $version |
Version: $version |
Release: 1 |
Release: 1 |
Vendor: Laboratory for Instructional Technology Education, Division of Science and Mathematics Education, Michigan State University. |
Vendor: $vendor |
BuildRoot: $currentdir/BuildRoot |
BuildRoot: $currentdir/BuildRoot |
Copyright: Michigan State University patents may apply. |
Copyright: Michigan State University patents may apply. |
Group: Utilities/System |
Group: Utilities/System |
Line 316 foreach $file (<>) {
|
Line 370 foreach $file (<>) {
|
$file=~s/^$pathprefix//; |
$file=~s/^$pathprefix//; |
} |
} |
if ($type eq "files") { |
if ($type eq "files") { |
push @{$BinaryRootMakefile{$type}},"\tinstall -D -m $octalmode $pathprefix$file $binaryroot$file\n"; |
push @{$BinaryRootMakefile{$type}},"\tinstall -D -m $octalmode ". |
push @{$Makefile{$type}},"\tinstall -D -m $octalmode \$(SOURCE)$file \$(ROOT)$file\n"; |
"$pathprefix$file $binaryroot$file\n"; |
push @{$dotspecfile{$type}},"$config\%attr($octalmode,$user,$group) $file\n"; |
push @{$Makefile{$type}},"\tinstall -D -m $octalmode ". |
|
"\$(SOURCE)$file \$(ROOT)$file\n"; |
|
push @{$dotspecfile{$type}},"$config\%attr($octalmode,$user,". |
|
"$group) $file\n"; |
} |
} |
elsif ($type eq "directories") { |
elsif ($type eq "directories") { |
push @{$BinaryRootMakefile{$type}},"\tinstall -m $octalmode -d $binaryroot$file\n"; |
push @{$BinaryRootMakefile{$type}},"\tinstall -m $octalmode -d ". |
push @{$Makefile{$type}},"\tinstall -m $octalmode -d \$(SOURCE)$file \$(ROOT)$file\n"; |
"$binaryroot$file\n"; |
push @{$dotspecfile{$type}},"\%dir \%attr($octalmode,$user,$group) $file\n"; |
push @{$Makefile{$type}},"\tinstall -m $octalmode -d ". |
|
"\$(SOURCE)$file \$(ROOT)$file\n"; |
|
push @{$dotspecfile{$type}},"\%dir \%attr($octalmode,$user,". |
|
"$group) $file\n"; |
} |
} |
elsif ($type eq "links") { |
elsif ($type eq "links") { |
my $link=$size; # I use the size variable to pass the link value from the subroutine find_info |
my $link=$size; # I use the size variable to pass the link value |
|
# from the subroutine find_info |
$link=~s/^$pathprefix//; |
$link=~s/^$pathprefix//; |
push @{$BinaryRootMakefile{$type}},"\tln -s $link $binaryroot$file\n"; |
push @{$BinaryRootMakefile{$type}}, |
|
"\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"; |
} |
} |
Line 356 close SPEC;
|
Line 418 close SPEC;
|
`make -f $tag/BinaryRootMakefile files`; |
`make -f $tag/BinaryRootMakefile files`; |
`make -f $tag/BinaryRootMakefile links`; |
`make -f $tag/BinaryRootMakefile links`; |
|
|
print `cd $currentdir/SOURCES; tar czvf LON-CAPA-$tag-$version.tar.gz LON-CAPA-$tag-$version`; |
my $command="cd $currentdir/SOURCES; tar czvf LON-CAPA-$tag-$version.tar.gz ". |
print `cd $currentdir/SPECS; rpm --rcfile=./rpmrc -ba LON-CAPA-$tag-$version.spec; cd ../RPMS/i386; cp LON-CAPA-$tag-$version-1.i386.rpm $invokingdir/.`; |
"LON-CAPA-$tag-$version"; |
|
print `$command`; |
|
$command="cd $currentdir/SPECS; rpm --rcfile=./rpmrc -ba ". |
|
"LON-CAPA-$tag-$version.spec; cd ../RPMS/i386; cp ". |
|
"LON-CAPA-$tag-$version-1.i386.rpm $invokingdir/."; |
|
print `$command`; |
print `cd $invokingdir; rm -Rf $tag`; |
print `cd $invokingdir; rm -Rf $tag`; |
|
|
sub find_info { |
sub find_info { |