diff options
-rwxr-xr-x | rpmbuildupdate | 922 |
1 files changed, 452 insertions, 470 deletions
diff --git a/rpmbuildupdate b/rpmbuildupdate index e0af0fe..cbd2f14 100755 --- a/rpmbuildupdate +++ b/rpmbuildupdate @@ -38,28 +38,28 @@ sub system_die { sub file_not_found { - my ($basename) = @_; - ! -f $basename and return 1; - # sometimes, the webserver return a webpage when the file is not found, instead of letting wget fails - # see wget http://www.wesnoth.org/files/wesnoth-0.7.1.tar.bz2 - # So if the file is a html page, then it is a error and it should be removed. - is_html($basename) and do { rm_rf($basename); return 1 }; - return 0; + my ($basename) = @_; + ! -f $basename and return 1; + # sometimes, the webserver return a webpage when the file is not found, instead of letting wget fails + # see wget http://www.wesnoth.org/files/wesnoth-0.7.1.tar.bz2 + # So if the file is a html page, then it is a error and it should be removed. + is_html($basename) and do { rm_rf($basename); return 1 }; + return 0; } sub is_html { - my ($basename) = @_; - `file $basename` =~ /HTML/i and return 1; - return 0; + my ($basename) = @_; + `file $basename` =~ /HTML/i and return 1; + return 0; } sub download { - my $wget = "wget -N -q"; - my ($url)=@_; - my $temp = basename($url); - print "Trying to fetch $url...\n"; - system("$wget $url;"); - -f $temp && ! is_html($temp) && $temp !~ /.bz2$/ && system_die("bzme $temp", "Cannot convert $temp"); + my $wget = "wget -N -q"; + my ($url)=@_; + my $temp = basename($url); + print "Trying to fetch $url...\n"; + system("$wget $url;"); + -f $temp && ! is_html($temp) && $temp !~ /.bz2$/ && system_die("bzme $temp", "Cannot convert $temp"); } sub fetch { @@ -102,521 +102,503 @@ sub fetch_http { rm_rf($basename) if $config{nobuild}; download($url); - foreach ('.tar.gz', '.tgz', '.zip') - { - ($turl = $url) =~ s/\.tar\.bz2/$_/; - download($turl) if file_not_found($basename); + foreach ('.tar.gz', '.tgz', '.zip') { + ($turl = $url) =~ s/\.tar\.bz2/$_/; + download($turl) if file_not_found($basename); } return ! file_not_found($basename); } sub fill_global_variable { - my ($pkgrpm) = @_; - $top = $config{top} || `rpm --eval '%_topdir'`; - chomp($top); - if ($config{log}) - { - my $basename = basename($pkgrpm); - mkdir_p("$top/log"); - my $logfile = "$top/log/${basename}.log"; - $log = " >> $logfile 2>&1"; - print "Logs are in $logfile\n"; - } else { - $log = ""; - } - $rpm = qq(rpm --define "_topdir $top"); + my ($pkgrpm) = @_; + $top = $config{top} || `rpm --eval '%_topdir'`; + chomp($top); + if ($config{log}) { + my $basename = basename($pkgrpm); + mkdir_p("$top/log"); + my $logfile = "$top/log/${basename}.log"; + $log = " >> $logfile 2>&1"; + print "Logs are in $logfile\n"; + } else { + $log = ""; + } + $rpm = qq(rpm --define "_topdir $top"); } sub build_from_spec { - my ($spec_path, $newversion) = @_; - my $rpm_tag = (split(/\n/,`rpm -q $config{rpmoption} --queryformat '%{NAME} %{VERSION} %{RELEASE}\n' --specfile $spec_path`))[0]; - my ($pkg, $version, $release) = split(/ /, $rpm_tag); - fill_global_variable($pkg); - $spec_path = File::Spec->rel2abs($spec_path); - chdir("$top/SOURCES") or die "Unable to chdir to $top/SOURCES"; - build($spec_path,$pkg,$version,$release,$newversion); + my ($spec_path, $newversion) = @_; + my $rpm_tag = (split(/\n/,`rpm -q $config{rpmoption} --queryformat '%{NAME} %{VERSION} %{RELEASE}\n' --specfile $spec_path`))[0]; + my ($pkg, $version, $release) = split(/ /, $rpm_tag); + fill_global_variable($pkg); + $spec_path = File::Spec->rel2abs($spec_path); + chdir("$top/SOURCES") or die "Unable to chdir to $top/SOURCES"; + build($spec_path,$pkg,$version,$release,$newversion); } sub build_from_repository { - my ($pkg, $newversion) = @_; - my $pkge = $pkg; - $pkge =~ s/\+/\\+/; - my $found = 0; - my $pkgrpm; - - foreach my $srpm_dir (split(/,/, $config{srpms})) { - opendir(MP, $srpm_dir) or die "$srpm_dir is not a directory"; - my @rpms = readdir(MP); - foreach (@rpms) - { - if (m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) - { $config{src} = $pkgrpm = "$srpm_dir/$_"; $found = 1; last } - } - closedir(MP); - last if $found; - } - if ($found == 0) { print "Package $pkg has no source, skipping.\n\n"; return } - build_from_src($pkgrpm,$newversion); + my ($pkg, $newversion) = @_; + my $pkge = $pkg; + $pkge =~ s/\+/\\+/; + my $found = 0; + my $pkgrpm; + + foreach my $srpm_dir (split(/,/, $config{srpms})) { + opendir(MP, $srpm_dir) or die "$srpm_dir is not a directory"; + my @rpms = readdir(MP); + foreach (@rpms) { + if (m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) { + $config{src} = $pkgrpm = "$srpm_dir/$_"; + $found = 1; + last; + } + } + closedir(MP); + last if $found; + } + if ($found == 0) { + print "Package $pkg has no source, skipping.\n\n"; + return; + } + build_from_src($pkgrpm,$newversion); } sub build_from_src { - $_ = shift; - my $newversion = shift; - my $b = basename($_); - die "Cannot parse the name of rpm " if $b !~ m|^(.*)-([^-]+)-([^-]+)\.[^\.]+\.rpm|; + my ($pkgrpm, $newversion) = @_; + my $b = basename($pkgrpm); + die "Cannot parse the name of rpm " if $b !~ m|^(.*)-([^-]+)-([^-]+)\.[^\.]+\.rpm|; - my $pkgrpm = $_; - my $pkg = $1; - - $pkgrpm = File::Spec->rel2abs($pkgrpm); - fill_global_variable($pkgrpm); - my $found = 0; - my ($version, $release); + my $pkg = $1; + + $pkgrpm = File::Spec->rel2abs($pkgrpm); + fill_global_variable($pkgrpm); + my $found = 0; + my ($version, $release); - chdir("$top/SOURCES") or die "Unable to chdir to $top/SOURCES"; - - my $pkge = $pkg; - $pkge =~ s/\+/\\+/; - - my $pkgrpm_basename = basename($pkgrpm); - if ($pkgrpm_basename =~ m|^(.*)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) - { $pkg=$1; $version = $2; $release = $3 } - - if ($config{deps}) - { - system_die("sudo /usr/sbin/urpmi --auto --force $pkgrpm $log"); - } - - system_die("$rpm -ivh $pkgrpm $log"); - - my $spec_path="../SPECS/$pkg.spec"; - build($spec_path,$pkg,$version,$release,$newversion); + chdir("$top/SOURCES") or die "Unable to chdir to $top/SOURCES"; + + my $pkge = $pkg; + $pkge =~ s/\+/\\+/; + + my $pkgrpm_basename = basename($pkgrpm); + if ($pkgrpm_basename =~ m|^(.*)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) { + $pkg = $1; + $version = $2; + $release = $3; + } + + if ($config{deps}) { + system_die("sudo /usr/sbin/urpmi --auto --force $pkgrpm $log"); + } + + system_die("$rpm -ivh $pkgrpm $log"); + + my $spec_path="../SPECS/$pkg.spec"; + build($spec_path,$pkg,$version,$release,$newversion); } sub build { - my ($spec_path, $pkg, $version, $release, $newversion) = @_; - my ($message, $spec, @url, %specvars); - my ($newrelease, $release_prefix) = ($1,$2) if $release =~ /^(.*\d+)(\D*)$/g; - - if ($newversion) { - print "===> Building $pkg $newversion\n"; - } else { - print "===> Rebuilding $pkg\n"; - } + my ($spec_path, $pkg, $version, $release, $newversion) = @_; + my ($message, $spec, @url, %specvars); + my ($newrelease, $release_prefix) = ($1,$2) if $release =~ /^(.*\d+)(\D*)$/g; + + if ($newversion) { + print "===> Building $pkg $newversion\n"; + } else { + print "===> Rebuilding $pkg\n"; + } + + if (! defined($newversion)) { + $newversion = $version; + my @tmp = split(/\./,$newrelease); + $tmp[-1]++; + $newrelease = join('.',@tmp) . $release_prefix; + $message = $config{message} || '- Rebuild'; + } else { + $message = $config{message} || '- New release %%VERSION'; + $newrelease = "1$release_prefix"; + } + $newrelease = $config{release} if $config{release}; + + + my $SPECFILE; + if (!open($SPECFILE, $spec_path)) { + print STDERR "Unable to open spec file $spec_path.\n"; + return; + } + + my $tar_ball=''; + while (<$SPECFILE>) { + # Doing a s/// version + s/\%define\s+version\s+$version/\%define version $newversion/g; + s/Version:\s+$version/Version: $newversion/g; + s/Release\s*:\s*$release/Release: $newrelease/; + s/\%define(\s+)release(\s+)(.*)/\%define release $newrelease/; + + eval $config{execute} if $config{execute}; - if (! defined($newversion)) { - $newversion = $version; - my @tmp = split(/\./,$newrelease); - $tmp[-1]++; - $newrelease = join('.',@tmp) . $release_prefix; - $message = $config{message} || '- Rebuild'; - } else { - $message = $config{message} || '- New release %%VERSION'; - $newrelease = "1$release_prefix"; + $spec .= $_; + push(@url, $2) if /(Source[0-9]*)\s*:\s+((?:ftp|svns?|https?):\S+)/i; + $tar_ball=$2 if /(Source[0-9]*)\s*:\s+([^:\s]+)/i && ! $tar_ball; + + # For %vars ! + $specvars{$1} = $2 if /\%define\s+(\S+?)\s+(\S+)/g; + foreach my $i ('url', 'name', 'version', 'release') { + $specvars{$i} = $1 if !$specvars{$i} && /$i\s*:\s+(\S+)/gi; + } + + if (/(:?^|[^%])\%changelog/g) { + $message =~ s/\%\%VERSION/$newversion/; + my @l = getpwuid($<); + my $packager = `rpm --eval '\%packager'`; + chomp($packager); + # if macro is undefined + $packager =~ s/\%packager//g; + my $email = $packager ? $packager : $l[6] . ($ENV{EMAIL} ? " <$ENV{EMAIL}>" : " <$l[0]\@mandrakesoft.com>"); + $spec .= "* " . `LC_TIME=C date '+%a %b %d %Y'|tr -d '\n'` . " $email $newversion-$newrelease\n"; + $spec .= "$message\n\n"; } - $newrelease = $config{release} if $config{release}; + } + close($SPECFILE); + + + if (!$url[0]) { + print "URL of sources was not found ! Trying to guess it with url tag ...\n"; - my $SPECFILE; - if (!open($SPECFILE, $spec_path)) + my $url = $specvars{url}; + # add jabberstudio, collabnet, http://www.sourcefubar.net/, http://sarovar.org/ + my @sf_like = ( { + download => 'http://prdownloads.sourceforge.net/$1/$2' , + regexp => 'http://(.*)\.(?:sourceforge|sf)\.net/?(.*)' + }, + { # to test + download => 'http://download.gna.org/$1/$2', + regexp => 'https?://gna.org/projects/([^/]*)/(.*)' + }, { - print STDERR "Unable to open spec file $spec_path.\n"; - return; + download => 'http://download.berlios.de/$1/$2' , + regexp => 'http://(.*)\.berlios.de/(.*)' + }, + { # to test , and to merge with regular savanah ? + download => 'http://savannah.nongnu.org/download//$1/$2', + regexp => 'https?://savannah.nongnu.org/projects/([^/]*)/(.*)' + }, + { # to test + download => 'http://savannah.gnu.org/download//$1/$2', + regexp => 'https?://savannah.gnu.org/projects/([^/]*)/(.*)' + }, + ); + + # http://jabberstudio.org/files/ejogger/ + # http://jabberstudio.org/projects/ejogger/project/view.php + foreach my $sf (@sf_like) { + if ( $url =~ m/$sf->{regexp}/ ) { + $sf->{download} =~ s/^/"/; + $sf->{download} =~ s/$/"/; + $url =~ s/$sf->{regexp}/"$sf->{download}"/eeg; + } } - - my $tar_ball=''; - while (<$SPECFILE>) - { - # Doing a s/// version - s/\%define\s+version\s+$version/\%define version $newversion/g; - s/Version:\s+$version/Version: $newversion/g; - s/Release\s*:\s*$release/Release: $newrelease/; - s/\%define(\s+)release(\s+)(.*)/\%define release $newrelease/; - - eval $config{execute} if $config{execute}; - - $spec .= $_; - push(@url, $2) if /(Source[0-9]*)\s*:\s+((?:ftp|svns?|https?):\S+)/i; - $tar_ball=$2 if /(Source[0-9]*)\s*:\s+([^:\s]+)/i && ! $tar_ball; - - # For %vars ! - $specvars{$1} = $2 if /\%define\s+(\S+?)\s+(\S+)/g; - foreach my $i ('url', 'name', 'version', 'release') - { - $specvars{$i} = $1 if !$specvars{$i} && /$i\s*:\s+(\S+)/gi; - } - - if (/(:?^|[^%])\%changelog/g) - { - $message =~ s/\%\%VERSION/$newversion/; - my @l = getpwuid($<); - my $packager = `rpm --eval '\%packager'`; - chomp($packager); - # if macro is undefined - $packager =~ s/\%packager//g; - my $email = $packager ? $packager : $l[6] . ($ENV{EMAIL} ? " <$ENV{EMAIL}>" : " <$l[0]\@mandrakesoft.com>"); - $spec .= "* " . `LC_TIME=C date '+%a %b %d %Y'|tr -d '\n'` . " $email $newversion-$newrelease\n"; - $spec .= "$message\n\n"; - } - + + push(@url, "$url/$tar_ball") + } + + my $found = 0; + + foreach (@url) { + # Replace variable from spec (%blabla) + while (/\%/) { + s/\%\{(.*?)\}/$specvars{$1}/g; + s/\%(\w+)/$specvars{$1}/g; + s/\%\{name\}/$pkg/gi; + s/\%\{version\}/$newversion/gi; } - close($SPECFILE); + my $basename = basename($_); - if (!$url[0]) - { - print "URL of sources was not found ! Trying to guess it with url tag ...\n"; - - my $url = $specvars{url}; - # add jabberstudio, collabnet, http://www.sourcefubar.net/, http://sarovar.org/ - my @sf_like = ( { - download => 'http://prdownloads.sourceforge.net/$1/$2' , - regexp => 'http://(.*)\.(?:sourceforge|sf)\.net/?(.*)' - }, - { # to test - download => 'http://download.gna.org/$1/$2', - regexp => 'https?://gna.org/projects/([^/]*)/(.*)' - }, - { - download => 'http://download.berlios.de/$1/$2' , - regexp => 'http://(.*)\.berlios.de/(.*)' - }, - { # to test , and to merge with regular savanah ? - download => 'http://savannah.nongnu.org/download//$1/$2', - regexp => 'https?://savannah.nongnu.org/projects/([^/]*)/(.*)' - }, - { # to test - download => 'http://savannah.gnu.org/download//$1/$2', - regexp => 'https?://savannah.gnu.org/projects/([^/]*)/(.*)' - }, - ); - - # http://jabberstudio.org/files/ejogger/ - # http://jabberstudio.org/projects/ejogger/project/view.php - foreach my $sf (@sf_like) - { - if ( $url =~ m/$sf->{regexp}/ ) - { - $sf->{download} =~ s/^/"/; - $sf->{download} =~ s/$/"/; - $url =~ s/$sf->{regexp}/"$sf->{download}"/eeg; - } - } - - push(@url, "$url/$tar_ball") - } + rm_rf("${top}/SOURCES/$basename") if $config{nobuild}; - my $found = 0; + # GNOME: add the major version to the URL automatically + # for example: ftp://ftp://ftp.gnome.org/pub/GNOME/sources/ORbit2/ORbit2-2.10.0.tar.bz2 + # is rewritten in ftp://ftp.gnome.org/pub/GNOME/sources/ORbit2/2.10/ORbit2-2.10.0.tar.bz2 + if (m!ftp.gnome.org/pub/GNOME/sources/!) { + (my $major = $newversion) =~ s/([^.]+\.[^.]+).*/$1/; + s!(.*/)(.*)!$1$major/$2!; + } - foreach (@url) - { - # Replace variable from spec (%blabla) - while (/\%/) - { - s/\%\{(.*?)\}/$specvars{$1}/g; - s/\%(\w+)/$specvars{$1}/g; - s/\%\{name\}/$pkg/gi; - s/\%\{version\}/$newversion/gi; + # download from Fedora rpms + if (/ftp\.redhat\.com/) { + opendir(MP, $config{fedora}) or die "$config{fedora} is not a directory"; + my @rpmsrh = readdir(MP); + + my $pkgrpmrh; + my $pkge = $pkg; + $pkge =~ s/\+/\\+/; + + foreach (@rpmsrh) { + if (m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) { + $pkgrpmrh = $_; + last; } + } + + closedir(MP); - my $basename = basename($_); - - rm_rf("${top}/SOURCES/$basename") if $config{nobuild}; - - # GNOME: add the major version to the URL automatically - # for example: ftp://ftp://ftp.gnome.org/pub/GNOME/sources/ORbit2/ORbit2-2.10.0.tar.bz2 - # is rewritten in ftp://ftp.gnome.org/pub/GNOME/sources/ORbit2/2.10/ORbit2-2.10.0.tar.bz2 - if (m!ftp.gnome.org/pub/GNOME/sources/!) - { - (my $major = $newversion) =~ s/([^.]+\.[^.]+).*/$1/; - s!(.*/)(.*)!$1$major/$2!; - } - - # download from Fedora rpms - if (/ftp\.redhat\.com/) - { - opendir(MP, $config{fedora}) or die "$config{fedora} is not a directory"; - my @rpmsrh = readdir(MP); - - my $pkgrpmrh; - my $pkge = $pkg; - $pkge =~ s/\+/\\+/; - - foreach (@rpmsrh) - { - if (m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|) - { $pkgrpmrh = $_; last } - } - - closedir(MP); - - print "Trying from fedora($basename): $config{fedora}/$pkgrpmrh\n"; - system_die("cd ${top}/SOURCES; rpm2cpio $config{fedora}/$pkgrpmrh | cpio -id $basename", "Rpm extraction failed"); - - if (! -f "${top}/SOURCES/$basename") - { - (my $bname = $basename) =~ s/bz2/gz/; - print "Trying from fedora($bname): $config{fedora}/$pkgrpmrh\n"; - system("cd ${top}/SOURCES; rpm2cpio $config{fedora}/$pkgrpmrh | cpio -id $bname; bzme $bname", "rpm recompression failed"); - } - } - # download from sourceforge mirrors - if (m!http://prdownloads.sourceforge.net!) - { - foreach my $site ("http://ovh.dl.sourceforge.net/sourceforge/", - "http://heanet.dl.sourceforge.net/sourceforge/", - "http://aleron.dl.sourceforge.net/sourceforge/", - "http://keihanna.dl.sourceforge.net/sourceforge/", - "http://belnet.dl.sourceforge.net/sourceforge/", - "http://unc.dl.sourceforge.net/sourceforge/", - "http://twtelecom.dl.sourceforge.net/sourceforge/", - ) - { - (my $dest = $_) =~ s!http://prdownloads.sourceforge.net/!$site!; - last if fetch_http($dest); - } - } - # download specified url - if (! -f "${top}/SOURCES/$basename") - { - fetch($_); - } + print "Trying from fedora($basename): $config{fedora}/$pkgrpmrh\n"; + system_die("cd ${top}/SOURCES; rpm2cpio $config{fedora}/$pkgrpmrh | cpio -id $basename", "Rpm extraction failed"); - $found++ if -e $basename; - chmod(0644, "${top}/SOURCES/$basename"); + if (! -f "${top}/SOURCES/$basename") { + (my $bname = $basename) =~ s/bz2/gz/; + print "Trying from fedora($bname): $config{fedora}/$pkgrpmrh\n"; + system("cd ${top}/SOURCES; rpm2cpio $config{fedora}/$pkgrpmrh | cpio -id $bname; bzme $bname", "rpm recompression failed"); + } } - - # some specs have no source ( php ) - $found++ if ! $tar_ball; - - unless ($config{noupdate}) - { - # TODO use output ? - open($SPECFILE, ">$spec_path") or die "Unable to open $pkg.spec"; - print $SPECFILE $spec; - close($SPECFILE); + # download from sourceforge mirrors + if (m!http://prdownloads.sourceforge.net!) { + foreach my $site ("http://ovh.dl.sourceforge.net/sourceforge/", + "http://heanet.dl.sourceforge.net/sourceforge/", + "http://aleron.dl.sourceforge.net/sourceforge/", + "http://keihanna.dl.sourceforge.net/sourceforge/", + "http://belnet.dl.sourceforge.net/sourceforge/", + "http://unc.dl.sourceforge.net/sourceforge/", + "http://twtelecom.dl.sourceforge.net/sourceforge/", + ) + { + (my $dest = $_) =~ s!http://prdownloads.sourceforge.net/!$site!; + last if fetch_http($dest); + } } - - if (!$found) - { - print "Unable to download file: URL is not valid ! :-(\n\n"; - return; - } elsif ($config{nobuild}) { - print "All files downloaded\n"; - return; + # download specified url + if (! -f "${top}/SOURCES/$basename") { + fetch($_); } - if (system("$rpm -ba $config{rpmoption} $spec_path $log")) - { - print "Binary build fails: building source only\n"; - system("$rpm -bs $config{rpmoption} --nodeps $spec_path $log"); - } + $found++ if -e $basename; + chmod(0644, "${top}/SOURCES/$basename"); + } + + # some specs have no source ( php ) + $found++ if ! $tar_ball; + + unless ($config{noupdate}) { + # TODO use output ? + open($SPECFILE, ">$spec_path") or die "Unable to open $pkg.spec"; + print $SPECFILE $spec; + close($SPECFILE); + } + + if (!$found) { + print "Unable to download file: URL is not valid ! :-(\n\n"; + return; + } elsif ($config{nobuild}) { + print "All files downloaded\n"; + return; + } + + if (system("$rpm -ba $config{rpmoption} $spec_path $log")) { + print "Binary build fails: building source only\n"; + system("$rpm -bs $config{rpmoption} --nodeps $spec_path $log"); + } } sub wget_check { - my $wgetv = `wget --version`; - $wgetv =~ /Wget/ or die "You need `wget' binary for FTP/HTTP download\n"; + my $wgetv = `wget --version`; + $wgetv =~ /Wget/ or die "You need `wget' binary for FTP/HTTP download\n"; } sub parse_argv { - my $conf = AppConfig->new({ CASE => 1, ERROR => \&usage }); - - $conf->define("rpmmon", - { ARGS => "=s", - ALIAS => "r", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("release", - { ARGS => "=s", - DEFAULT => "", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("srpms", - { ARGS => "=s", - ALIAS => "m", - DEFAULT => "/mnt/BIG/distrib/cooker/SRPMS/", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("src", - { ARGS => "=s", - ALIAS => "s", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - $conf->define("spec", - { ARGS => "=s", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("rpmoption", - { ARGS => "=s", - DEFAULT => "", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("fedora", - { ARGS => "=s", - ALIAS => "h", - DEFAULT => "/mnt/BIG/distrib/fedora/development/SRPMS/", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("deps", - { ALIAS => "d", - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_NONE } - ); - - $conf->define("nosource", - { ALIAS => "n", - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_NONE } - ); - $conf->define("noupdate", - { - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_NONE } - ); - - $conf->define("top", - { ARGS => "=t", - ALIAS => "h", - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - $conf->define("nobuild", - { ALIAS => "c", - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_NONE } - ); - - $conf->define("log", - { ALIAS => "l", - DEFAULT => 0, - ARGCOUNT => AppConfig::ARGCOUNT_NONE } - ); - $conf->define("changelog", - { - ARGS => "=s", - # default is defined at the beggining of build - # as it depend if this is a new version or a simple rebuild - DEFAULT => "", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - $conf->define("execute", - { ARGS => "=s", - DEFAULT => "", - ARGCOUNT => AppConfig::ARGCOUNT_ONE } - ); - - foreach my $f ('/etc/rpmbuildupdate.conf', "$ENV{HOME}/.rpmbuildupdaterc") - { - -f $f && $conf->file($f); - } - $conf->args; - $config{rpmmon} = $conf->get("rpmmon"); - $config{deps} = $conf->get("deps"); - $config{srpms} = $conf->get("srpms"); - $config{spec} = $conf->get("spec"); - $config{src} = $conf->get("src"); - $config{release} = $conf->get("release"); - $config{noupdate} = $conf->get("noupdate"); - $config{nosource} = $conf->get("nosource"); - $config{fedora} = $conf->get("fedora"); - $config{top} = $conf->get("top"); - $config{nobuild} = $conf->get("nobuild"); - $config{message} = $conf->get("changelog"); - $config{rpmoption} = $conf->get("rpmoption"); - $config{log} = $conf->get("log"); - $config{execute} = $conf->get("execute"); + my $conf = AppConfig->new({ CASE => 1, ERROR => \&usage }); + + $conf->define("rpmmon", { + ARGS => "=s", + ALIAS => "r", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("release", { + ARGS => "=s", + DEFAULT => "", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("srpms", { + ARGS => "=s", + ALIAS => "m", + DEFAULT => "/mnt/BIG/distrib/cooker/SRPMS/", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("src", { + ARGS => "=s", + ALIAS => "s", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("spec", { + ARGS => "=s", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("rpmoption", { + ARGS => "=s", + DEFAULT => "", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("fedora", { + ARGS => "=s", + ALIAS => "h", + DEFAULT => "/mnt/BIG/distrib/fedora/development/SRPMS/", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("deps", { + ALIAS => "d", + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_NONE + }); + + $conf->define("nosource", { + ALIAS => "n", + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_NONE + }); + + $conf->define("noupdate", { + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_NONE + }); + + $conf->define("top", { + ARGS => "=t", + ALIAS => "h", + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("nobuild", { + ALIAS => "c", + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_NONE + }); + + $conf->define("log", { + ALIAS => "l", + DEFAULT => 0, + ARGCOUNT => AppConfig::ARGCOUNT_NONE + }); + + $conf->define("changelog", { + ARGS => "=s", + # default is defined at the beggining of build + # as it depend if this is a new version or a simple rebuild + DEFAULT => "", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + $conf->define("execute", { + ARGS => "=s", + DEFAULT => "", + ARGCOUNT => AppConfig::ARGCOUNT_ONE + }); + + foreach my $f ('/etc/rpmbuildupdate.conf', "$ENV{HOME}/.rpmbuildupdaterc") { + -f $f && $conf->file($f); + } + $conf->args; + $config{rpmmon} = $conf->get("rpmmon"); + $config{deps} = $conf->get("deps"); + $config{srpms} = $conf->get("srpms"); + $config{spec} = $conf->get("spec"); + $config{src} = $conf->get("src"); + $config{release} = $conf->get("release"); + $config{noupdate} = $conf->get("noupdate"); + $config{nosource} = $conf->get("nosource"); + $config{fedora} = $conf->get("fedora"); + $config{top} = $conf->get("top"); + $config{nobuild} = $conf->get("nobuild"); + $config{message} = $conf->get("changelog"); + $config{rpmoption} = $conf->get("rpmoption"); + $config{log} = $conf->get("log"); + $config{execute} = $conf->get("execute"); } sub usage { - print "rpmbuildupdate v0.4 helps you build up to date RPMs.\n\n"; - print "By Julien Danjou\n"; - print "Copyright (c) 2003-2004 by MandrakeSoft.\n"; - print "This is free software under the GPL License.\n"; - print "Usage: rpmbuildupdate [options] [pkg] [newversion]\n\n"; - - print " --rpmmon <file>: parse output of rpmmon from file\n"; - print " --srpms <path_to_srpms>: specify SRPMS path, separate folder with a comma\n"; - print " --src <src.rpm file> <new version>: build new version from this source RPM\n"; - print " --spec <spec file> <new version>: build new version from this spec file\n"; - print " --rpmoption <rpm option>: use this option when rebuilding ( --with , mainly )\n"; - print " --release <mdk_release>: release version of package (default: 1mdk)\n"; - print " --changelog <changelog message>: use a alternate message. \%\%VERSION is replace by version\n"; - print " --deps: install builds dependencies\n"; - print " --log: log builds\n"; - print " --nosource: do not install source from (urpmi x.src.rpm)\n"; - print " --noupdate: do not touch to the spec file\n"; - print " --top <dir>: specify rpm top dir (default: `rpm --eval \%_topdir`)\n"; - print " --nobuild|-c: do not build the package. Only download files.\n"; - print " --execute <command>: execute an arbitrary perl command for each line of the spec file\n"; - exit 0; + print "rpmbuildupdate v0.4 helps you build up to date RPMs.\n\n"; + print "By Julien Danjou\n"; + print "Copyright (c) 2003-2004 by MandrakeSoft.\n"; + print "This is free software under the GPL License.\n"; + print "Usage: rpmbuildupdate [options] [pkg] [newversion]\n\n"; + + print " --rpmmon <file>: parse output of rpmmon from file\n"; + print " --srpms <path_to_srpms>: specify SRPMS path, separate folder with a comma\n"; + print " --src <src.rpm file> <new version>: build new version from this source RPM\n"; + print " --spec <spec file> <new version>: build new version from this spec file\n"; + print " --rpmoption <rpm option>: use this option when rebuilding ( --with , mainly )\n"; + print " --release <mdk_release>: release version of package (default: 1mdk)\n"; + print " --changelog <changelog message>: use a alternate message. \%\%VERSION is replace by version\n"; + print " --deps: install builds dependencies\n"; + print " --log: log builds\n"; + print " --nosource: do not install source from (urpmi x.src.rpm)\n"; + print " --noupdate: do not touch to the spec file\n"; + print " --top <dir>: specify rpm top dir (default: `rpm --eval \%_topdir`)\n"; + print " --nobuild|-c: do not build the package. Only download files.\n"; + print " --execute <command>: execute an arbitrary perl command for each line of the spec file\n"; + exit 0; } sub parse_rpmmon { - my $f = shift; - -f $f or die "Error: $f is not a file.\n"; - - open(my $RPMMON, $f); - while (<$RPMMON>) - { - build_from_repository($1, $3) if /^\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/; - build_from_repository($2, $4) if /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/; - } - close($RPMMON); + my ($f) = @_; + -f $f or die "Error: $f is not a file.\n"; + + open(my $RPMMON, $f); + while (<$RPMMON>) { + build_from_repository($1, $3) if /^\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/; + build_from_repository($2, $4) if /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/; + } + close($RPMMON); } sub check_dir { - $_ = shift; - foreach my $dir (split(/,/)) - { - -d $dir or die $dir . " is not a directory.\n"; - } + my ($list) = @_; + foreach my $dir (split(/,/, $list)) { + -d $dir or die $dir . " is not a directory.\n"; + } } sub main { - parse_argv; - wget_check; - if ($config{rpmmon}) { - print($config{srpms}); - parse_rpmmon($config{rpmmon}) - } else { - my ($new_version,$name); - if ($config{src} or $config{spec}) - { - $new_version = $ARGV[0] || undef; - } - elsif ($ARGV[0]) - { - $name= $ARGV[0]; $new_version = $ARGV[1]; - if (-f $name) - { - $name =~ /.spec$/ and $config{spec} = $name; - # FIXME better auto detection with nosrc.rpm ? - $name =~ /.src.rpm$/ and $config{src} = $name; - } - } - if ($config{src}) { - build_from_src($config{src}, $new_version) - } elsif ($config{spec}) { - build_from_spec($config{spec},$new_version) - } elsif ($name) { - check_dir($config{srpms}); - build_from_repository($name,$new_version) - } else { - usage - } + parse_argv; + wget_check; + if ($config{rpmmon}) { + print($config{srpms}); + parse_rpmmon($config{rpmmon}) + } else { + my ($new_version,$name); + if ($config{src} or $config{spec}) { + $new_version = $ARGV[0] || undef; + } elsif ($ARGV[0]) { + $name= $ARGV[0]; $new_version = $ARGV[1]; + if (-f $name) { + $name =~ /.spec$/ and $config{spec} = $name; + # FIXME better auto detection with nosrc.rpm ? + $name =~ /.src.rpm$/ and $config{src} = $name; + } } + if ($config{src}) { + build_from_src($config{src}, $new_version) + } elsif ($config{spec}) { + build_from_spec($config{spec},$new_version) + } elsif ($name) { + check_dir($config{srpms}); + build_from_repository($name,$new_version) + } else { + usage; + } + } } main; |