X-Git-Url: http://git.jankratochvil.net/?p=macros.git;a=blobdiff_plain;f=AutoGen.pm;h=554310a921fd83d15a9deeff5a8717910348138b;hp=aa28398a2f200b321253a88f3e552c152a2221a7;hb=d2a8675c8edfc62d3b4d237163f2406288425181;hpb=f6f4d5b5dfa615753c7bdd3ac3b7e15cfd2c506f diff --git a/AutoGen.pm b/AutoGen.pm index aa28398..554310a 100644 --- a/AutoGen.pm +++ b/AutoGen.pm @@ -63,6 +63,23 @@ Supported parameters: '.($Options{"help"} || ""); } +sub checkcommandversion +{ +my($class,$command,$version)=@_; + + local *F; + do { open F,$_ or confess "Open $_: $!"; } for ("$command --version|"); + local $/; + undef $/; + my $command_out=; + close F; + my $command_version=($command_out=~m#([\d.]+)#)[0]; + confess "$command(1) version not found in its output" if !$command_version; + confess "'$command' version $version or higher required" + # Do not take 3rd+ numbers as it would not be a number + if ($command_version=~/^(\d+[.]\d+)/)[0]<$version; +} + sub _readfile { my($filename)=@_; @@ -120,6 +137,8 @@ my(@files)=@_; my $nocheck=shift @files if $files[0] eq "nocheck"; my $dest=pop @files; + # expand pattern to properly match © resulting filenames count + @files=map({ glob $_; } @files); @files==copy @files,$dest or $nocheck or confess "$!"; } @@ -130,6 +149,8 @@ my(@files)=@_; my $nocheck=shift @files if $files[0] eq "nocheck"; my $flag=shift @files if ref $files[0]; + # expand pattern to properly match &remove resulting filenames count + @files=map({ glob $_; } @files); @files==remove((!$flag ? () : $flag),@files) or $nocheck or confess "$!"; } @@ -143,6 +164,23 @@ my(@files)=@_; _remove @files; } +sub _prepdist +{ +my($class,$name)=@_; + + my($specsrc)=map((-e $_ ? $_ : "$name.spec.in"),"$name.spec.m4.in"); + my $spec=_readfile $specsrc; + $spec=~s/\\\n/ /gs; + my $configure_args=($spec=~/^[%]configure\b[ \t]*(.*)$/m)[0]; + $configure_args=~s/--disable-gtk-doc\b/--enable-gtk-doc/g; # optional; gtk-doc reqd for 'make dist' + $class->run(%Options, + "ARGV"=>[qw(--copy)], + "configure_args"=>[split /\s+/,$configure_args], + ); + _remove "ChangeLog"; # force its rebuild by Makefile/rcs2log + _system "make dist $name.spec"; +} + # $args{ # "sign"=>bool, # }, @@ -154,15 +192,7 @@ my($class,%args)=@_; _remove "nocheck",\1, _rpmeval("_tmppath" )."/$name-*-root", _rpmeval("_builddir")."/$name-*"; - my($specsrc)=map((-e $_ ? $_ : "$name.spec.in"),"$name.spec.m4.in"); - my $spec=_readfile $specsrc; - $spec=~s/\\\n/ /gs; - $class->run(%Options, - "ARGV"=>["--copy"], - "configure_args"=>[split /\s+/,($spec=~/^[%]configure\b[ \t]*(.*)$/m)[0]], - ); - _remove "ChangeLog"; # force its rebuild by Makefile/rcs2log - _system "make dist $name.spec"; + $class->_prepdist($name); _copy "$name-*.tar.gz",_rpmeval("_sourcedir"); _system(join(" ","rpmbuild", "-ba", @@ -174,7 +204,27 @@ my($class,%args)=@_; _system "make dist-tarZ" if $Options{"dist-tarZ"}; _move _rpmeval("_srcrpmdir")."/$name-*.src.rpm","."; _move _rpmeval("_rpmdir")."/"._rpmeval("_target_cpu")."/$name-*."._rpmeval("_target_cpu").".rpm","."; - _system "ls -l $name-*"; + _system "ls -l $name-*"; + exit 0; # should never return +} + +# $args{ +# "sign"=>bool, +# }, +sub _debbuild +{ +my($class,%args)=@_; + + my $name=$Options{"name"}; + $class->_prepdist($name); + _system "tar xzf $name-*.tar.gz"; + _remove "$name-*.tar.gz"; # permit "cd $name-*" below + _system(join(" ","cd $name-*;dpkg-buildpackage", + "-rfakeroot", + ($args{"sign"} ? () : ("-us","-uc")), + )); + _remove \1,"$name-*"; + _system "ls -l ${name}_*"; exit 0; # should never return } @@ -228,6 +278,8 @@ sub _cleanfiles ./ABOUT-NLS ./-[0-9]* ./-devel-[0-9]* ./.spec ./.m4 ./.spec.m4 + ./debian/tmp ./debian/ + ./_[0-9]* ./macros/macros.dep ./po/Makefile.in.in ./po/POTFILES* ./po/cat-id-tbl.c ./po/cat-id-tbl.tmp ./po/*.gmo ./po/*.mo ./po/stamp-cat-id ./po/.pot ./po/ChangeLog @@ -238,11 +290,16 @@ sub _cleanfiles sgml* tmpl* html* + xml *.txt *.txt.bak + *.new + *.sgml *.args *.hierarchy *.signals + *.interfaces + *.prerequisites )); }),$Options{"gtk-doc-dir"}), map((!$_ ? () : do { my $dir=$_; map("$dir/$_",qw( *.html @@ -352,6 +409,8 @@ my($class,%options)=@_; print _help() and confess if !GetOptions( "rpm" ,sub { $class->_rpmbuild("sign"=>1); }, "rpmtest" ,sub { $class->_rpmbuild("sign"=>0); }, + "deb" ,sub { $class->_debbuild("sign"=>1); }, + "debtest" ,sub { $class->_debbuild("sign"=>0); }, "dist" ,\$Options{"ARGV_dist"}, "copy!" ,\$Options{"ARGV_copy"}, "fullclean",\$Options{"ARGV_fullclean"},