From 937589546767b90421de4862d376c20778cc400b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Fri, 16 Dec 2011 16:29:16 +0000 Subject: [PATCH] Resync configure. --- org.glite.jobid.api-c/configure | 299 ++++++++++++++++++++++----- org.glite.jobid.api-cpp/configure | 299 ++++++++++++++++++++++----- org.glite.jobid.api-java/configure | 299 ++++++++++++++++++++++----- org.glite.lb.client-java/configure | 299 ++++++++++++++++++++++----- org.glite.lb.client/configure | 299 ++++++++++++++++++++++----- org.glite.lb.common/configure | 299 ++++++++++++++++++++++----- org.glite.lb.doc/configure | 299 ++++++++++++++++++++++----- org.glite.lb.emi-lb/configure | 299 ++++++++++++++++++++++----- org.glite.lb.harvester/configure | 299 ++++++++++++++++++++++----- org.glite.lb.logger-msg/configure | 299 ++++++++++++++++++++++----- org.glite.lb.logger/configure | 299 ++++++++++++++++++++++----- org.glite.lb.server/configure | 299 ++++++++++++++++++++++----- org.glite.lb.state-machine/configure | 299 ++++++++++++++++++++++----- org.glite.lb.types/configure | 299 ++++++++++++++++++++++----- org.glite.lb.utils/configure | 299 ++++++++++++++++++++++----- org.glite.lb.ws-interface/configure | 299 ++++++++++++++++++++++----- org.glite.lb.ws-test/configure | 299 ++++++++++++++++++++++----- org.glite.lb.yaim/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.db/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.gsoap-plugin/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.gss/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.jp-interface/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.log/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.maildir/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.server-bones/configure | 299 ++++++++++++++++++++++----- org.glite.lbjp-common.trio/configure | 299 ++++++++++++++++++++++----- 26 files changed, 6422 insertions(+), 1352 deletions(-) diff --git a/org.glite.jobid.api-c/configure b/org.glite.jobid.api-c/configure index 16595a2..45b5c78 100755 --- a/org.glite.jobid.api-c/configure +++ b/org.glite.jobid.api-c/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.jobid.api-cpp/configure b/org.glite.jobid.api-cpp/configure index 16595a2..45b5c78 100755 --- a/org.glite.jobid.api-cpp/configure +++ b/org.glite.jobid.api-cpp/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.jobid.api-java/configure b/org.glite.jobid.api-java/configure index 16595a2..45b5c78 100755 --- a/org.glite.jobid.api-java/configure +++ b/org.glite.jobid.api-java/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.client-java/configure b/org.glite.lb.client-java/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.client-java/configure +++ b/org.glite.lb.client-java/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.client/configure b/org.glite.lb.client/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.client/configure +++ b/org.glite.lb.client/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.common/configure b/org.glite.lb.common/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.common/configure +++ b/org.glite.lb.common/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.doc/configure b/org.glite.lb.doc/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.doc/configure +++ b/org.glite.lb.doc/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.emi-lb/configure b/org.glite.lb.emi-lb/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.emi-lb/configure +++ b/org.glite.lb.emi-lb/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.harvester/configure b/org.glite.lb.harvester/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.harvester/configure +++ b/org.glite.lb.harvester/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.logger-msg/configure b/org.glite.lb.logger-msg/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.logger-msg/configure +++ b/org.glite.lb.logger-msg/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.logger/configure b/org.glite.lb.logger/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.logger/configure +++ b/org.glite.lb.logger/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.server/configure b/org.glite.lb.server/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.server/configure +++ b/org.glite.lb.server/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.state-machine/configure b/org.glite.lb.state-machine/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.state-machine/configure +++ b/org.glite.lb.state-machine/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.types/configure b/org.glite.lb.types/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.types/configure +++ b/org.glite.lb.types/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.utils/configure b/org.glite.lb.utils/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.utils/configure +++ b/org.glite.lb.utils/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.ws-interface/configure b/org.glite.lb.ws-interface/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.ws-interface/configure +++ b/org.glite.lb.ws-interface/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.ws-test/configure b/org.glite.lb.ws-test/configure index 16595a2..45b5c78 100755 --- a/org.glite.lb.ws-test/configure +++ b/org.glite.lb.ws-test/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lb.yaim/configure b/org.glite.lb.yaim/configure index 16595a2..45b5c78 100644 --- a/org.glite.lb.yaim/configure +++ b/org.glite.lb.yaim/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.db/configure b/org.glite.lbjp-common.db/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.db/configure +++ b/org.glite.lbjp-common.db/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.gsoap-plugin/configure b/org.glite.lbjp-common.gsoap-plugin/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.gsoap-plugin/configure +++ b/org.glite.lbjp-common.gsoap-plugin/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.gss/configure b/org.glite.lbjp-common.gss/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.gss/configure +++ b/org.glite.lbjp-common.gss/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.jp-interface/configure b/org.glite.lbjp-common.jp-interface/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.jp-interface/configure +++ b/org.glite.lbjp-common.jp-interface/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.log/configure b/org.glite.lbjp-common.log/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.log/configure +++ b/org.glite.lbjp-common.log/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.maildir/configure b/org.glite.lbjp-common.maildir/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.maildir/configure +++ b/org.glite.lbjp-common.maildir/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.server-bones/configure b/org.glite.lbjp-common.server-bones/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.server-bones/configure +++ b/org.glite.lbjp-common.server-bones/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { diff --git a/org.glite.lbjp-common.trio/configure b/org.glite.lbjp-common.trio/configure index 16595a2..45b5c78 100755 --- a/org.glite.lbjp-common.trio/configure +++ b/org.glite.lbjp-common.trio/configure @@ -59,6 +59,14 @@ my %enable_nodes; my %disable_nodes; my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1); +my %package = ( + 'maintainer' => 'CESNET Product Teams ', + 'uploaders' => 'František Dvořák ', + 'url' => 'http://glite.cern.ch', + 'debian_vcs' => 'Vcs-Cvs: :pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw +Vcs-Browser: http://jra1mw.cvs.cern.ch/cgi-bin/jra1mw.cgi', +); + # key: internal package name (arguments, ...) # 'pkg': pkg-config name # 'prefix': used when pkg-config fails @@ -289,8 +297,8 @@ if ($listmodules) { exit 0; } -warn "$0: --version, --branch and --output make sense only in --mode=etics\n" - if ($version || $output || $branch) && $mode ne 'etics'; +warn "$0: --branch and --output make sense only in --mode=etics\n" + if ($output || $branch) && $mode ne 'etics'; my $en; for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; } @@ -1040,10 +1048,71 @@ sub full return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short"; } +sub get_version +{ + my ($top_srcdir) = @_; + + my ($subsys,$module) = split /\./,$fmod,2; + my ($major,$minor,$rev,$age); + + if ($version) { + $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; + ($major,$minor,$rev,$age) = ($1,$2,$3,$4); + } + else { + my $path = "$top_srcdir/project"; + if ($subsys eq 'gridsite') { + $path = "$cvs_prefix{$subsys}.$subsys.core/project"; + } + open V,"$path/version.properties" + or die "$path/version.properties: $!\n"; + + while ($_ = ) { + chomp; + ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; + $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; + } + close V; + + $version = "$major.$minor.$rev-$age"; + } + + return ($major, $minor, $rev, $age); +} + +sub get_description +{ + my $top_srcdir = shift; + + my $cvs_module = $top_srcdir; + my $package_description = ""; + my $package_summary = ""; + + if (-e "$cvs_module/project/package.description") { + open V, "$cvs_module/project/package.description"; + $package_description = join ("", ); + close V; + chomp $package_description; + } + else { + print STDERR "package.description not found for $subsys.$module!\n"; } + + if (-e "$cvs_module/project/package.summary") { + open V, "$cvs_module/project/package.summary"; + $package_summary = join ("", ); + close V; + chomp $package_summary; + $package_summary =~ s/\n/\\n/g; + } + else { + print STDERR "package.summary not found for $subsys.$module!\n"; } + + return ($package_summary, $package_description); +} + sub mkinc { my %aux; - my ($old_locale, $date); undef %aux; my @m=qw/ lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb @@ -1058,6 +1127,8 @@ canl.c my $short = shift; my $full = full $short; + my ($subsys,$module) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1082,14 +1153,23 @@ canl.c } } + my ($major, $minor, $rev, $age) = get_version $top_srcdir; + my ($package_summary, $package_description) = get_description $top_srcdir; + if ($package_description) { $package_description =~ s/(.{1,79}\S|\S+)\s+/$1\n/mg; } + my $package_description_debian = $package_description; + $package_description_debian =~ s/^/ /mg; + + my ($old_locale, $specdate, $debdate); + mkdir $build."project" unless (-d $build."project"); open PKGCHL,">".$build."project/changelog" or die $build."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); - $date = strftime("%a %b %d %Y", gmtime()); + $specdate = strftime("%a %b %d %Y", gmtime()); + $debdate = strftime("%a, %d %b %Y %H:%M:%S %z", gmtime()); setlocale(LC_TIME, $old_locale); - print PKGCHL qq{* $date CESNET team + print PKGCHL qq{* $specdate CESNET team - automatically generated package }; close PKGCHL; @@ -1141,6 +1221,88 @@ top_srcdir = $top_srcdir print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap; close MKINC; + + my $dh; + my $debian = 0; + + opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; + for $_ (readdir $dh) { + if (/^(.*)\.spec$/) { + if ($1 ne $packageName) { + printf STDERR "Changed RPM name: $packageName --> $1\n"; + $packageName=$1; + } + last; + } + } + closedir $dh; + + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { + if (-f "$top_srcdir/project/$file") { + printf STDERR "Creating $build$file\n"; + open DST, ">$build$file"; + open SRC, "<$top_srcdir/project/$file"; + while () { + if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } + if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } + if (/\@SUMMARY\@/) { s/\@SUMMARY\@/$package_summary/g; } + if (/\@DESCRIPTION\@/) { s/\@DESCRIPTION\@/$package_description/g; } + if (/\@DEBIAN_DESCRIPTION\@/) { s/\@DEBIAN_DESCRIPTION\@/$package_description_debian/g; } + if (/\@VERSION\@/) { s/\@VERSION\@/$version/g; } + if (/\@MAJOR\@/) { s/\@MAJOR\@/$major/g; } + if (/\@MINOR\@/) { s/\@MINOR\@/$minor/g; } + if (/\@REVISION\@/) { s/\@REVISION\@/$rev/g; } + if (/\@AGE\@/) { s/\@AGE\@/$age/g; } + if (/\@MAINTAINER\@/) { s/\@MAINTAINER\@/$package{maintainer}/g; } + if (/\@UPLOADERS\@/) { s/\@UPLOADERS\@/$package{uploaders}/g; } + if (/\@DEBIAN_VCS\@/) { s/\@DEBIAN_VCS\@/$package{debian_vcs}/g; } + if (/\@DEBIAN_DATE\@/) { s/\@DEBIAN_DATE\@/$debdate/g; } + if (/\@SPEC_DATE\@/) { s/\@SPEC_DATE\@/$specdate/g; } + printf DST "%s", "$_"; + } + close SRC; + close DST; + } + } + + print "Creating ${build}debian/\n"; + + `rm -rfv ${build}debian`; + mkdir $build."debian" or die $!; + `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `mv ${build}debian.* ${build}debian/ 2>/dev/null`; + `rm -f ${build}debian/*.orig`; + opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!"; + for $_ (readdir $dh) { + if (/^debian\.(.*)/) { + `mv ${build}debian/$_ ${build}debian/$1`; + $debian = 1; + } + } + closedir $dh; + + if ($debian) { + my ($dir, $file); + + chmod 0755, "${build}debian/rules"; + $file="${build}debian/docs"; if (not -f $file) { `touch $file`; } + $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; } + $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` } + $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` } + $file="${build}debian/changelog"; if (not -f $file) { + open FH, ">$file" or die $!; + print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low + + * Automatically generated package + + -- $package{maintainer} $debdate +}; + close FH; + } + + } else { + `rm -rf ${build}debian`; + } } BEGIN{ @@ -1152,29 +1314,9 @@ sub mode_etics { die "$0: --module required with --etics\n" unless $fmod; my ($subsys,$module) = split /\./,$fmod,2; + my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age); - - if ($version) { - $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; - ($major,$minor,$rev,$age) = ($1,$2,$3,$4); - } - else { - my $full = full "$subsys.$module"; - my $path = "$full/project"; - if ($subsys eq 'gridsite') { - $path = "$cvs_prefix{$subsys}.$subsys.core/project"; - } - open V,"$path/version.properties" - or die "$path/version.properties: $!\n"; - - while ($_ = ) { - chomp; - ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/; - $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/; - } - close V; - } + my ($major,$minor,$rev,$age) = get_version $full; # XXX: --with ignored for platform-dependend packages my @copts = (); @@ -1204,7 +1346,7 @@ sub mode_etics { my $conf; my $conftag; - my ($confprefix, $nameprefix); + my ($confprefix, $nameprefix, $packageName); $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n"; @@ -1212,12 +1354,15 @@ sub mode_etics { $nameprefix = $confprefix; $nameprefix =~ s/-$//; $nameprefix =~ s/-/\./g; + $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; if ($branch) { $conf = "$confprefix${subsys}-${module}_$branch"; $conftag = $branch; # forced low age number - $age = $branch eq 'HEAD' ? '0head' : '0dev'; } + $age = $branch eq 'HEAD' ? '0head' : '0dev'; + push @copts, '--version ${version}-${age}'; + } else { $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; @@ -1232,38 +1377,22 @@ sub mode_etics { my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..'; - my $package_description = ""; - my $package_summary = ""; - my $cvs_module = full "$subsys.$module"; - - if (-e "$cvs_module/project/package.description") { - open V, "$cvs_module/project/package.description"; - $package_description = join ("", ); - close V; - chomp $package_description; - $package_description =~ s/\n/\\n/g; + my ($package_summary, $package_description) = get_description $cvs_module; + if ($package_description) { + $package_description =~ s/\n/\\n/g; $package_description = "package.description = $package_description\n"; - } - else { - print STDERR "package.description not found for $subsys.$module!\n"; } - - if (-e "$cvs_module/project/package.summary") { - open V, "$cvs_module/project/package.summary"; - $package_summary = join ("", ); - close V; - chomp $package_summary; - $package_summary =~ s/\n/\\n/g; + } + if ($package_summary) { $package_summary = "package.summary = $package_summary\n"; - } - else { - print STDERR "package.summary not found for $subsys.$module!\n"; } + } my %cmd; $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null"; #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git"; #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/); #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})"; + $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})"; $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}"; $cmd{default}{init} = 'None'; @@ -1349,6 +1478,8 @@ sub mode_etics { $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config"; } else { + $cmd{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SRPMSLocation}'; $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts"; $cmd{default}{compile} = 'make'; $cmd{default}{test} = 'make check'; @@ -1357,6 +1488,29 @@ sub mode_etics { $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}"; $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}"; } + $cmd{default}{packaging} = 'dir=${workspaceDir}/rpm_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SRPMSLocation} $dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/SOURCES/ + rpmbuild -bs --nodeps --define "_topdir $dir" ${packageName}.spec + cp -v $dir/SRPMS/*.src.rpm ${package.SRPMSLocation}/ + rm -rf $dir'; + for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') { + for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; } + $cmd{$p}{clean} = 'make clean + rm -rfv ${package.tgzLocation} ${package.SDEBSLocation}'; + $cmd{$p}{packaging} = 'dir=${workspaceDir}/dpkg_build_src_$$ + mkdir -p ${package.tgzLocation} ${package.SDEBSLocation} $dir 2>/dev/null || true + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz ${package.tgzLocation}/ + cp -vf ${workspaceDir}/${packageName}-${version}-${age}.src.tar.gz $dir/${packageName}_${version}.orig.tar.gz + tar xzf $dir/${packageName}_${version}.orig.tar.gz -C $dir + cp -rf debian/ $dir/${packageName}-${version}/ + cd $dir/${packageName}-${version} + dpkg-buildpackage -S -d -nc + cd - + cp -v $dir/*.tar.gz $dir/*.dsc ${package.SDEBSLocation}/ + rm -rf $dir'; + } } my $defprops = ''; @@ -1502,6 +1656,47 @@ $output}; } close C; + + for $file ("$cvs_module/project/debian.rules", "$cvs_module/project/$packageName.spec") { + my $lib; + @copts = (); + + if ($file =~ /debian\.rules$/) { $lib = 'lib'; } + else { $lib = '%{_lib}'; } + + # locations hacks + if ($file =~ /$packageName\.spec$/) { + if ($fmod eq 'lb.client-java') { + push @copts, ''; + push @copts, '--with-axis=/usr/local/axis1.4'; + } + } + + if (-f $file) { + open DST,">$file.new" or die "$file.new: $!\n"; + open SRC,"<$file" or die "$file: $!\n"; + while () { + if (/^(\s*).+\/configure\s/) { + printf DST "%s", "$1"; + printf DST "/usr/bin/perl $confdir/configure $project{flavours} --root=/ --prefix=$project{local_prefix} --libdir=$lib --project=$project --module $subsys.$module@copts\n"; + } else { + printf DST "%s", "$_"; + } + } + close SRC; + close DST; + + `diff -b "$file" "$file.new"`; + if ($? == 0) { + print STDERR "($file not changed)\n"; + unlink "$file.new"; + } else { + print STDERR "Writing $file\n"; + rename "$file", "$file.orig" unless -f "$file.orig"; + rename "$file.new", "$file"; + } + } + } } sub gsoap_version { -- 1.8.2.3