From: František Dvořák Date: Tue, 24 Jan 2012 14:27:04 +0000 (+0000) Subject: Merge branch_3_0_job_summaries (Job History) to HEAD. X-Git-Tag: merge_jobhistory_head_after~1 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=2ab6e29ebfb9aec830c8477b35fc76cfea4ba2b0;p=jra1mw.git Merge branch_3_0_job_summaries (Job History) to HEAD. --- diff --git a/org.glite.jobid.api-c/configure b/org.glite.jobid.api-c/configure index 45b5c78..292e2ba 100755 --- a/org.glite.jobid.api-c/configure +++ b/org.glite.jobid.api-c/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.jobid.api-cpp/configure b/org.glite.jobid.api-cpp/configure index 45b5c78..292e2ba 100755 --- a/org.glite.jobid.api-cpp/configure +++ b/org.glite.jobid.api-cpp/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.jobid.api-java/configure b/org.glite.jobid.api-java/configure index 45b5c78..292e2ba 100755 --- a/org.glite.jobid.api-java/configure +++ b/org.glite.jobid.api-java/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.client-java/configure b/org.glite.lb.client-java/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.client-java/configure +++ b/org.glite.lb.client-java/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.client/configure b/org.glite.lb.client/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.client/configure +++ b/org.glite.lb.client/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.client/doc/glite-lb-notify.1 b/org.glite.lb.client/doc/glite-lb-notify.1 index b6015f8..74a478c 100644 --- a/org.glite.lb.client/doc/glite-lb-notify.1 +++ b/org.glite.lb.client/doc/glite-lb-notify.1 @@ -6,7 +6,7 @@ glite-lb-notify - Register and receive notification from L&B .SH SYNOPSIS .B glite-lb-notify .br - \fBnew\fR [ { \fB-s\fI socket_fd\fR | \fB-a \fIfake_addr\fR } \fB-t \fIrequested_validity\fR \fB-j \fIjobid \fR| { \fB-o \fIowner \fR | \fB -O \fR } \fB-n \fInetwork_server \fR \fB-v\fI virtual_organization\fR \fB-c \fR \fB-f\fI flags\fR ] + \fBnew\fR [ { \fB-s\fI socket_fd\fR | \fB-a \fIfake_addr\fR } \fB-t \fIrequested_validity\fR \fB-j \fIjobid \fR| { \fB-o \fIowner \fR | \fB -O \fR } \fB-n \fInetwork_server \fR \fB-v\fI virtual_organization\fR \fB-c\fR \fB-J\fR \fB-B\fR \fB-T\fR \fB-E\fR \fB-f\fI flags\fR ] .br \fBbind \fR [ { \fB-s\fI socket_fd\fR | \fB-a \fIfake_addr\fR } \fB-t \fIrequested_validity\fR ] \fInotifid\fR .br @@ -126,6 +126,37 @@ to get list of available fields. Drop the notification from the server, removing all messages on the way eventually. +.SH \ + +Options for the \fBnew\fR subcommand: +.TP +.B -o +match on events for jobs belonging to the given \fIDN\fR. +.TP +.B -O +match on events for jobs belonging to the current user. +.TP +.B -v +match on events for jobs belonging to users from the given \fIVO\fR. +.TP +.B -c +match only if job state has actually changed. Notification messages won't be sent for events that do not trigger job state change. +.TP +.B -S +match only on jobs in certain \fIstates\fR listed in a comma-separated list. +.TP +.B -J +pack JDL with the job status structure. +.TP +.B -B +bootstrap -- send past events matching conditions. +.TP +.B -T +match only on reaching a terminal state. +.TP +.B -H +match only on reaching a terminal state and pack all events for that job. + .SH EXAMPLE Installed with the package as share/examples/glite-lb-notify.pl. Demontstrates using the non-trivial diff --git a/org.glite.lb.client/src/StatusAttrNames.pl b/org.glite.lb.client/src/StatusAttrNames.pl index 67b8d50..db266d0 100644 --- a/org.glite.lb.client/src/StatusAttrNames.pl +++ b/org.glite.lb.client/src/StatusAttrNames.pl @@ -112,4 +112,5 @@ CREAM_ID PAYLOAD_OWNER ACCESS_RIGHTS + HISTORY /; diff --git a/org.glite.lb.client/src/notify.c b/org.glite.lb.client/src/notify.c index df10e43..efd740e 100644 --- a/org.glite.lb.client/src/notify.c +++ b/org.glite.lb.client/src/notify.c @@ -50,16 +50,20 @@ static void usage(char *cmd) me); } if ( !cmd || !strcmp(cmd, "new") ) - fprintf(stderr,"\n'new' command usage: %s new [ { -s socket_fd | -a fake_addr } -t requested_validity -j jobid { -o owner | -O } -n network_server -v virtual_organization --states state1,state2,... -c -f flags]\n" + fprintf(stderr,"\n'new' command usage: %s new [ { -s socket_fd | -a fake_addr } -t requested_validity -j jobid { -o owner | -O } -n network_server -v virtual_organization --state state1,state2,... -c -J -B -T -H -f flags]\n" " jobid Job ID to connect notif. reg. with\n" " owner Match this owner DN\n" " requested_validity Validity of notification req. in seconds\n" - " flags 0 - return basic status, 1 - return also JDL in status\n" - " 256 - bootstrap stream (send all existing jobs too)\n" + " flags Numeric flags, can be also represented by cmdline options bellow\n" " network_server Match only this network server (WMS entry point)\n" " -O Match owner - credentials are retrieved from environment\n" " -c Match only on state change\n" " -S | --state Match on events resulting in listed (coma-delimited) states\n" + " -J | --jdl Attach JDL to job status being returned\n" + " -B | --bootstrap Also send past events matching conditions\n" + " -T | --terminal Notify only when a job reaches terminal state\n" + " -H | --history Same as -T plus attach a history of all job's Events\n" + " -N | --aNonymize Anonymize all owner data in all messages under this registration\n" , me); if ( !cmd || !strcmp(cmd, "bind") ) fprintf(stderr,"\n'bind' command usage: %s bind [ { -s socket_fd | -a fake_addr } -t requested_validity ] notifids \n" @@ -133,6 +137,11 @@ int main(int argc,char **argv) edg_wll_GssStatus gss_code; static struct option long_options[] = { {"state", required_argument, 0, 'S'}, + {"jdl", no_argument, 0, 'J'}, + {"bootstrap", no_argument, 0, 'B'}, + {"terminal", no_argument, 0, 'T'}, + {"history", no_argument, 0, 'H'}, + {"anonymize", no_argument, 0, 'N'}, {0, 0, 0, 0}}; int option_index = 0; char *single, *statelist, *notif_server; @@ -144,7 +153,7 @@ int main(int argc,char **argv) conditions = (edg_wll_QueryRec **)calloc(MAX_NEW_CONDS + 1,sizeof(edg_wll_QueryRec *)); conditions[0] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec)); - while ((c = getopt_long(argc-1,argv+1,"j:o:v:n:s:a:t:f:cOS:",long_options,&option_index)) > 0) { switch (c) { + while ((c = getopt_long(argc-1,argv+1,"j:o:v:n:s:a:t:f:cOS:JBTHN",long_options,&option_index)) > 0) { switch (c) { case 'j': conditions[i] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec)); conditions[i][0].attr = EDG_WLL_QUERY_ATTR_JOBID; @@ -196,7 +205,17 @@ int main(int argc,char **argv) case 't': valid = time(NULL) + atol(optarg); break; case 'f': - flags = atoi(optarg); break; + flags |= atoi(optarg); break; + case 'J': + flags |= EDG_WLL_STAT_CLASSADS; break; + case 'B': + flags |= EDG_WLL_NOTIF_BOOTSTRAP; break; + case 'T': + flags |= EDG_WLL_NOTIF_TERMINAL_STATES; break; + case 'H': + flags |= EDG_WLL_NOTIF_TERMINAL_STATES | EDG_WLL_NOTIF_HISTORY; break; + case 'N': + flags |= EDG_WLL_NOTIF_ANONYMIZE; break; case 'c': conditions[i] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec)); conditions[i][0].attr = EDG_WLL_QUERY_ATTR_STATUS; @@ -538,13 +557,14 @@ cleanup: */ free(conditions); } - - if (edg_wll_Error(ctx,&errt,&errd)) + + int retval; + if (retval = edg_wll_Error(ctx,&errt,&errd)) fprintf(stderr, "%s: %s (%s)\n", me, errt, errd); edg_wll_NotifCloseFd(ctx); edg_wll_FreeContext(ctx); edg_wll_poolFree(); - return 0; + return retval; } diff --git a/org.glite.lb.common/Makefile b/org.glite.lb.common/Makefile index fe6edb2..4aa041e 100644 --- a/org.glite.lb.common/Makefile +++ b/org.glite.lb.common/Makefile @@ -83,7 +83,7 @@ OBJS:=${JOBID_OBJS} ${PERF_OBJS} lb_plain_io.o events.o mini_http.o query_rec.o status.o xml_conversions.o xml_parse.o ulm_parse.o param.o \ events_parse.o il_string.o il_int.o notifid.o \ il_log.o il_msg.o log_msg.o context.o \ - connpool.o + connpool.o events_json.o LOBJS:=${OBJS:.o=.lo} THROBJS:=${OBJS:.o=.thr.o} @@ -92,7 +92,8 @@ THRLOBJS:=${OBJS:.o=.thr.lo} HDRS:=context.h context-int.h lb_plain_io.h mini_http.h authz.h xml_parse.h \ xml_conversions.h log_proto.h events_parse.h il_string.h il_msg.h \ ulm_parse.h connpool.h notifid.h notif_rec.h padstruct.h \ - query_rec.h timeouts.h LoggingExceptions.h CountRef.h ${PERF_HDRS} + query_rec.h timeouts.h LoggingExceptions.h CountRef.h ${PERF_HDRS} \ + events_json.h GEN_HDRS:=events.h jobstat.h common_version.h NOTHRSTATICLIB:=libglite_lb_common_${nothrflavour}.a diff --git a/org.glite.lb.common/configure b/org.glite.lb.common/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.common/configure +++ b/org.glite.lb.common/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.common/interface/events_json.h b/org.glite.lb.common/interface/events_json.h new file mode 100644 index 0000000..4ccec6b --- /dev/null +++ b/org.glite.lb.common/interface/events_json.h @@ -0,0 +1,50 @@ +#ifndef GLITE_LB_EVENTS_JSON_H +#define GLITE_LB_EVENTS_JSON_H + +#ident "$Header$" +/* +Copyright (c) Members of the EGEE Collaboration. 2004-2010. +See http://www.eu-egee.org/partners for details on the copyright holders. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +#ifdef BUILDING_LB_COMMON +#include "events.h" +#else +#include "glite/lb/events.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Generate a special Notification ULM line from edg_wll_Event structure + * \param context IN: context to work with + * \param event IN: event to unparse + */ +extern int edg_wll_UnparseEventJSON( + edg_wll_Context context, + edg_wll_Event * event, + char **line +); + + +#ifdef __cplusplus +} +#endif + + +#endif /* GLITE_LB_EVENTS_JSON_H */ diff --git a/org.glite.lb.common/interface/jobstat.h.T b/org.glite.lb.common/interface/jobstat.h.T index c870a84..9a98e26 100644 --- a/org.glite.lb.common/interface/jobstat.h.T +++ b/org.glite.lb.common/interface/jobstat.h.T @@ -95,6 +95,8 @@ typedef enum _edg_wll_JobStatCode { EDG_WLL_NUMBER_OF_STATCODES /**< Number of meaningful status codes */ } edg_wll_JobStatCode; +extern const int EDG_WLL_JOB_TERMINAL_STATE[EDG_WLL_NUMBER_OF_STATCODES]; + /*! * * Pair tag = value. @@ -170,6 +172,9 @@ typedef struct _edg_wll_JobStat { #define EDG_WLL_STAT_CHILDSTAT 4 /**< apply the flags recursively to subjobs */ #define EDG_WLL_STAT_CHILDHIST_FAST 8 /**< partially complete histogram of child job states */ #define EDG_WLL_STAT_CHILDHIST_THOROUGH 16 /**< full and up-to date histogram of child job states */ +#define EDG_WLL_NOTIF_ANONYMIZE 32 /**< Always return user identity anonymized */ +#define EDG_WLL_NOTIF_TERMINAL_STATES 64 /**< Generate notifications on terminal states */ +#define EDG_WLL_NOTIF_HISTORY 128 /**< Attach all job's events to the notification */ #define EDG_WLL_NOTIF_BOOTSTRAP 256 /**< send the state of the all already existing jobs too */ #define EDG_WLL_NOTIF_VOLATILE 512 /**< (not used yet) send the notifications directly, without reliability and persistency */ /* starting from bit 10 private flags begins - do not add 1024 and more! */ diff --git a/org.glite.lb.common/src/events_json.c.T b/org.glite.lb.common/src/events_json.c.T new file mode 100644 index 0000000..343d579 --- /dev/null +++ b/org.glite.lb.common/src/events_json.c.T @@ -0,0 +1,222 @@ +/* +@@@AUTO +*/ +@@@LANG: C + +#include +#include +#include + +#include "glite/lbu/trio.h" +#include "context-int.h" +#include "events.h" +#include "ulm_parse.h" + + +@@@{ + gen "#define MAX_COUNT ".(getMaxSize $event + 1)."\n"; # max fields count plus type field +@@@} + + +typedef struct json_item_s { + size_t len; + char *s; +} json_item_t; + +typedef struct { + json_item_t items[MAX_COUNT]; + size_t len, count; +} json_t; + + +static const struct timeval null_timeval = {0,0}; + + +static int json_add_raw(json_t *json, char *s); +static int json_add_rawconst(json_t *json, const char *value); +static int json_add_string(json_t *json, const char *key, char *value); + + +int edg_wll_UnparseEventJSON(edg_wll_Context ctx, edg_wll_Event *event, char **result) { + char *out, *tmp_out, *str = NULL; + char ulm_time[ULM_DATE_STRING_LENGTH + 1]; + json_t json; + size_t len, i; + + memset(&json, 0, sizeof json); + + if (!event) { + *result = NULL; + return 0; + } + if (event->type == EDG_WLL_EVENT_UNDEF) { + *result = strdup("{}"); + if (*result) return 0; + else return edg_wll_SetError(ctx, ENOMEM, NULL); + } + + // + // common fields + // + + str = edg_wll_EventToString(event->type); + if (!str || json_add_string(&json, "type", str)) goto err; + free(str); +@@@{ + my ($t, $Tname, $tname, $tstruct, $source); + my ($f, $fname, $Fname); + my ($noNull, $indent); + + for $t ('_common_', sort { $event->{order}->{$a} <=> $event->{order}->{$b} } $event->getTypes) { + selectType $event $t; + $Tname = $t eq '_common_' ? '' : $t; + $tname = lcfirst $t; + $TNAME = uc $t; + if ($tname =~ m/^pBS/) { $tname = ucfirst $tname; } + if ($tname =~ m/^cREAM/) { $tname = ucfirst $tname; } + if ($tname =~ m/^condor/) { $tname = ucfirst $tname; } + $tstruct = $t eq '_common_' ? '->any' : "->$tname"; + + if ($t ne '_common_') { + gen " case EDG_WLL_EVENT_$TNAME:\n"; + } + + for ($event->getFieldsOrdered) { + $f = selectField $event $_; + $fname = $f->{name}; + $Fname = ucfirst $f->{name}; + $source = "event$tstruct.$fname"; + + $noNull = 0; + $indent = $t eq '_common_' ? "" : "\t"; + if (not exists $f->{codes} and ( + $f->{type} eq 'int' + or $f->{type} eq 'float' + or $f->{type} eq 'double' + or $f->{type} eq 'bool' + or $f->{type} eq 'string' + )) { + $noNull = 1; + } else { + gen "$indent if ("; + gen isNULL $f "$source"; + gen ") {\n"; + gen "$indent if (json_add_rawconst(&json, \"$fname: null\")) goto err;\n"; + gen "$indent } else {\n"; + $indent = "$indent\t"; + } + + if ($f->{codes}) { + gen "$indent str = edg_wll\_".($t eq '_common_' ? '' : $t)."${Fname}ToString($source);\n"; + gen "$indent if (!str || json_add_string(&json, \"$fname\", str)) goto err;\n"; + gen "$indent free(str);\n"; + } + elsif ($f->{type} eq 'bool') { + gen "$indent str = $source ? \"true\" : \"false\";"; + gen "$indent if (asprintf(&str, \"$fname: %s\", str) == -1 || json_add_raw(&json, str)) goto err;\n"; + } + elsif ($f->{type} eq 'int' + or $f->{type} eq 'float' + or $f->{type} eq 'double' + or $f->{type} eq 'port' + ) { + gen "$indent if (asprintf(&str, \"$fname: ".(toFormatString $f)."\", $source) == -1 || json_add_raw(&json, str)) goto err;\n"; + } + elsif ($f->{type} eq 'string') { + gen "$indent if (json_add_string(&json, \"$fname\", $source)) goto err;\n"; + } + elsif ($f->{type} eq 'timeval') { + gen "$indent ".(toString $f "$source", "ulm_time")."\n"; + gen "$indent if (json_add_string(&json, \"$fname\", ulm_time)) goto err;\n"; + } + else { + gen "$indent ".(toString $f "$source", "str")."\n"; + gen "$indent if (!str || json_add_string(&json, \"$fname\", str)) goto err;\n"; + gen "$indent free(str);\n"; + } + if (not $noNull) { + $indent = $t eq '_common_' ? "" : "\t"; + gen "$indent }\n"; + } + } + if ($t eq '_common_') { + gen "\n"; + gen " //\n"; + gen " // event specific fields\n"; + gen " //\n"; + gen "\n"; + gen " switch (event->type) {\n"; + gen "\n"; + } else { + gen " break;\n"; + gen "\n"; + } + } + gen " default:\n"; + gen " break;\n"; + gen "\n"; + gen " }\n"; +@@@} + + // + // generate result JSON string + // + + len = 3 // '{', new line, '}' + + 4 * json.count // space, space, PAIR, comma, new line + + json.len; + + if ((out = malloc(len + 1)) == NULL) goto err; + sprintf(out, "{\n"); + tmp_out = out + 2; + for (i = 0; i < json.count; i++) { + sprintf(tmp_out, " %s%s\n", json.items[i].s, (i + 1 < json.count) ? "," : ""); + tmp_out += (4 + json.items[i].len); + free(json.items[i].s); + + } + //assert((tmp_out - out) == (json.len + 4 * json.count + 2)); + sprintf(tmp_out - 1, "}"); + *result = out; + + return 0; + +err: + free(str); + for (i = 0; i < json.count; i++) free(json.items[i].s); + *result = NULL; + return edg_wll_SetError(ctx, ENOMEM, NULL); +} + + +static int json_add_raw(json_t *json, char *s) { + json_item_t *item; + + item = &json->items[json->count++]; + + assert(json->count <= MAX_COUNT); + + item->s = s; + item->len = strlen(s); + + json->len += item->len; + + return 0; +} + + +static int json_add_rawconst(json_t *json, const char *value) { + char *s; + + if ((s = strdup(value)) == NULL) return ENOMEM; + return json_add_raw(json, s); +} + +static int json_add_string(json_t *json, const char *key, char *value) { + char *s = NULL; + int ret; + + if (value) ret = trio_asprintf(&s, "%s: \"%|Js\"", key, value); + else ret = asprintf(&s, "%s: null", key); + return s && ret != -1 ? json_add_raw(json, s) : -1; +} diff --git a/org.glite.lb.common/src/status.c.T b/org.glite.lb.common/src/status.c.T index 413bd5b..32635d8 100644 --- a/org.glite.lb.common/src/status.c.T +++ b/org.glite.lb.common/src/status.c.T @@ -26,6 +26,16 @@ limitations under the License. static const struct timeval null_timeval = {0,0}; +@@@{ + my $sep = "const int EDG_WLL_JOB_TERMINAL_STATE[EDG_WLL_NUMBER_OF_STATCODES] = {0, "; + for my $term ($status->getTerminalStatusOrdered) { + gen qq{$sep $term}; + $sep = ", "; + } + $sep = ", 0};"; + gen qq{$sep}; +@@@} + void edg_wll_FreeStatus(edg_wll_JobStat *stat) { diff --git a/org.glite.lb.common/src/xml_conversions.c b/org.glite.lb.common/src/xml_conversions.c index f734bf5..0c022cb 100644 --- a/org.glite.lb.common/src/xml_conversions.c +++ b/org.glite.lb.common/src/xml_conversions.c @@ -773,6 +773,9 @@ char *edg_wll_stat_flags_to_string(int flags) if (flags & EDG_WLL_STAT_NO_STATES) append_flag(&cflags, "no_states"); if (flags & EDG_WLL_STAT_CHILDHIST_FAST) append_flag(&cflags, "childhist_fast"); if (flags & EDG_WLL_STAT_CHILDHIST_THOROUGH) append_flag(&cflags, "childhist_thorough"); + if (flags & EDG_WLL_NOTIF_ANONYMIZE) append_flag(&cflags, "anonymized"); + if (flags & EDG_WLL_NOTIF_TERMINAL_STATES) append_flag(&cflags, "terminal_states"); + if (flags & EDG_WLL_NOTIF_HISTORY) append_flag(&cflags, "history"); if (flags & EDG_WLL_NOTIF_BOOTSTRAP) append_flag(&cflags, "bootstrap"); if (flags & EDG_WLL_NOTIF_VOLATILE) append_flag(&cflags, "volatile"); if (!cflags) cflags = strdup(""); @@ -797,6 +800,9 @@ int edg_wll_string_to_stat_flags(char *cflags) if (!strcmp(sflag,"no_states")) flags = flags | EDG_WLL_STAT_NO_STATES; if (!strcmp(sflag,"childhist_fast")) flags = flags | EDG_WLL_STAT_CHILDHIST_FAST; if (!strcmp(sflag,"childhist_thorough")) flags = flags | EDG_WLL_STAT_CHILDHIST_THOROUGH; + if (!strcmp(sflag,"anonymized")) flags = flags | EDG_WLL_NOTIF_ANONYMIZE; + if (!strcmp(sflag,"terminal_states")) flags = flags | EDG_WLL_NOTIF_TERMINAL_STATES; + if (!strcmp(sflag,"history")) flags = flags | EDG_WLL_NOTIF_HISTORY; if (!strcmp(sflag,"bootstrap")) flags = flags | EDG_WLL_NOTIF_BOOTSTRAP; if (!strcmp(sflag,"volatile")) flags = flags | EDG_WLL_NOTIF_VOLATILE; sflag = strtok_r(NULL, "+", &last); diff --git a/org.glite.lb.common/test/parse.cpp.T b/org.glite.lb.common/test/parse.cpp.T index aa3636e..407f3cc 100644 --- a/org.glite.lb.common/test/parse.cpp.T +++ b/org.glite.lb.common/test/parse.cpp.T @@ -25,8 +25,10 @@ limitations under the License. #ifdef BUILDING_LB_COMMON #include "events_parse.h" +#include "events_json.h" #else #include "glite/lb/events_parse.h" +#include "glite/lb/events_json.h" #endif class EventParseTest: public CppUnit::TestFixture @@ -146,6 +148,13 @@ void EventParseTest::$l() CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_CompareEvents():") + et + " " + ed, 0); } + free(line); + if (edg_wll_UnparseEventJSON(ctx, e1, &line)) { + CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_UnparseEventJSON() error"), 0); + } else { +// std::cerr << line << std::endl; + } + edg_wll_FreeEvent(e1); free(e1); edg_wll_FreeEvent(e2); free(e2); edg_wll_FreeContext(ctx); diff --git a/org.glite.lb.doc/configure b/org.glite.lb.doc/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.doc/configure +++ b/org.glite.lb.doc/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.doc/src/LBAG-Installation.tex b/org.glite.lb.doc/src/LBAG-Installation.tex index 018581f..65f7d62 100644 --- a/org.glite.lb.doc/src/LBAG-Installation.tex +++ b/org.glite.lb.doc/src/LBAG-Installation.tex @@ -433,6 +433,23 @@ Overall, \texttt{msg.conf} specifies the following information: Note: Current broker and prefix settings can be retrieved from the \LB server by any authenticated user reading the server's configuration page -- see Section \ref{s:findbroker}. +\subsubsection{Messaging: Persistent Registration for Notifications} +\label{inst:messaging} + +Starting with \LBver{3.2} there is a mechanism for site admins to set up and maintain ``permanent'' registrations for notifications, which should be always kept active on the server. A maintainer script regularly checks existing registrations, extends their validity, and sets up new registrations. + +The process is governed by a separate configuration file \texttt{/etc/glite-lb/site-notif.conf}. The format of the file is simple, one line per registration, with each line giving a single-word title and a list of arguments to use for registration.\footnote{Command \texttt{glite-lb-notify} is used to make the registrations. See \cite{lbug} for applicable arguments.} + +For instance the following line in \texttt{/etc/glite-lb/site-notif.conf}: + +\begin{verbatim} +testnotif --state running -c -a x-msg://grid.emi.lbexample +\end{verbatim} + +\indent{}will set up and maintain registration for messages to be generated whenever a job changes state (\texttt{-c}) to \emph{running.} Messages will be delivered to topic \texttt{grid.emi.lbexample}. The word \texttt{testnotif} is just a plain-text handle. + +The maintainer script runs regularly and makes sure that registrations do not expire and that the messaging infrastructure keeps receiving them. In case of a listener (messaging broker) being unavailable for a prolonged period of time, the registration is terminated to prevent build-up of undelivered messages. A new registration will be created next time round, and if the listener comes up before then, normal operation will resume. + \subsubsection{Index configuration} Initial YAIM configuration creates \LB indexes typically, diff --git a/org.glite.lb.doc/src/notify.tex b/org.glite.lb.doc/src/notify.tex index f906825..6fc49b4 100644 --- a/org.glite.lb.doc/src/notify.tex +++ b/org.glite.lb.doc/src/notify.tex @@ -55,7 +55,7 @@ For action \verb'new', command usage is: \begin{verbatim} glite-lb-notify new [ { -s socket_fd | -a fake_addr } -t requested_validity -j jobid { -o owner | -O } -n network_server - -v virtual_organization --states state1,state2,... -c -f flags] + -v virtual_organization --state state1,state2,... -c -J -B -T -H -f flags] \end{verbatim} For action \verb'bind', command usage is: @@ -94,8 +94,12 @@ where \texttt{ -i timeout} & timeout to receive operation in seconds \\ \texttt{ -f field1,field2,...} & list of status fields to print (only owner by default) \\ \texttt{ -c} & notify only on job state change \\ -\texttt{ -S, --state state1,state2,...} & match on events resulting in listed states \\ +\texttt{ -S, -{}-state state1,state2,...} & match on events resulting in listed states \\ \texttt{ -r} & refresh automatically the notification registration while receiving data\\ +\texttt{ -J, -{}-jdl} & Attach JDL to job status being returned \\ +\texttt{ -B, -{}-bootstrap} & Also send past events matching conditions \\ +\texttt{ -T, -{}-terminal} & Notify only when a job reaches terminal state \\ +\texttt{ -H, -{}-history} & Same as \texttt{-T} plus attach a history of all job's events \\ \end{tabularx} For additional information see also manual page glite-lb-notify(1). diff --git a/org.glite.lb.emi-lb/configure b/org.glite.lb.emi-lb/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.emi-lb/configure +++ b/org.glite.lb.emi-lb/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.harvester/configure b/org.glite.lb.harvester/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.harvester/configure +++ b/org.glite.lb.harvester/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.logger-msg/configure b/org.glite.lb.logger-msg/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.logger-msg/configure +++ b/org.glite.lb.logger-msg/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.logger-msg/src/activemq_cpp_plugin.cpp b/org.glite.lb.logger-msg/src/activemq_cpp_plugin.cpp index 4650deb..3fe700b 100644 --- a/org.glite.lb.logger-msg/src/activemq_cpp_plugin.cpp +++ b/org.glite.lb.logger-msg/src/activemq_cpp_plugin.cpp @@ -185,6 +185,10 @@ OutputPlugin::createMessage(edg_wll_JobStat &state_out) if(state_out.reason) { body << "statusReason: \"" << state_out.reason << "\", "; } + /* summaries */ + if(state_out.history) { + body << "history: " << state_out.history << ", "; + } body << "}"; cms_msg->setText(body.str().c_str()); diff --git a/org.glite.lb.logger/configure b/org.glite.lb.logger/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.logger/configure +++ b/org.glite.lb.logger/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.server/Makefile b/org.glite.lb.server/Makefile index 1e22403..161215a 100644 --- a/org.glite.lb.server/Makefile +++ b/org.glite.lb.server/Makefile @@ -170,7 +170,7 @@ BKSERVER_BASE_OBJS:= \ openserver.o query.o userjobs.o db_store.o request.o store.o \ stored_master.o srv_purge.o server_state.o dump.o lb_authz.o load.o \ notification.o il_notification.o notif_match.o stats.o db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o \ - policy_gram.o policy_lex.o authz_policy.o + policy_gram.o policy_lex.o authz_policy.o crypto.o gsoap_version ?= ${gsoap_default_version} @@ -214,7 +214,7 @@ endif INDEX_OBJS:= index.o index_parse.o jobstat_supp.o openserver.o \ jobstat.o query.o get_events.o write2rgma.o index_lex.o \ lb_authz.o store.o bkindex.o stats.o\ - request.o db_store.o srv_purge.o notif_match.o il_lbproxy.o dump.o lb_xml_parse.o il_notification.o lb_proto.o lb_text.o server_state.o lb_xml_parse_V21.o lb_html.o cond_dump.o notification.o seqcode.o userjobs.o load.o db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o authz_policy.o + request.o db_store.o srv_purge.o notif_match.o il_lbproxy.o dump.o lb_xml_parse.o il_notification.o lb_proto.o lb_text.o server_state.o lb_xml_parse_V21.o lb_html.o cond_dump.o notification.o seqcode.o userjobs.o load.o db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o authz_policy.o crypto.o INDEX_LIBS:= ${SRVBONES_LIB} ${COMMON_LIBS} ${LB_MACHINE_LIB} ${EXT_LIBS} ${LB_UTILS_DB_LIB} @@ -234,7 +234,8 @@ LIB_OBJS_BK:= \ openserver.o query.o userjobs.o db_store.o request.o store.o \ stored_master.o srv_purge.o server_state.o dump.o lb_authz.o load.o \ notification.o il_notification.o notif_match.o stats.o write2rgma.o \ - db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o authz_policy.o + db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o authz_policy.o \ + crypto.o MONDB_OBJS:=mon-db.o ${LIB_OBJS_BK} MONDB_LIBS:=${COMMON_LIBS} ${LB_MACHINE_LIB} ${LB_UTILS_DB_LIB} ${EXT_LIBS} @@ -384,7 +385,7 @@ ifdef LB_PERF endif clean: - rm -rvf *.c *.h *.ch *.xh *.xml *.nsmap *.o *.lo .libs glite-lb-* ${STATIC_LIB_BK} ${LCAS_PLUGIN_LIB} ${TESTS} ${MAN_GZ} ${EXAMPLES} ${SCRIPTS} + rm -rvf *.c *.cpp *.h *.ch *.xh *.xml *.nsmap *.o *.lo .libs glite-lb-* ${STATIC_LIB_BK} ${LCAS_PLUGIN_LIB} ${TESTS} ${MAN_GZ} ${EXAMPLES} ${SCRIPTS} rm -rvf test_xml.cpp distclean: diff --git a/org.glite.lb.server/config/site-notif.conf b/org.glite.lb.server/config/site-notif.conf new file mode 100644 index 0000000..17c8352 --- /dev/null +++ b/org.glite.lb.server/config/site-notif.conf @@ -0,0 +1,5 @@ +#Site-wide notification registration. This file is read by glite-lb-notif-keeper.sh, initiated by cron + +#Uncomment the following line if you wish to submit anonymous data to the Grid Observatory experiment +#go --history --anonymize -a x-msg://grid.emi.gridobservatory + diff --git a/org.glite.lb.server/configure b/org.glite.lb.server/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.server/configure +++ b/org.glite.lb.server/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.server/glite-lb-notif-keeper.cron b/org.glite.lb.server/glite-lb-notif-keeper.cron new file mode 100644 index 0000000..ae0cd74 --- /dev/null +++ b/org.glite.lb.server/glite-lb-notif-keeper.cron @@ -0,0 +1 @@ +0 */4 * * * glite ( test -f /etc/profile.d/grid-env.sh || exit 0; . /etc/profile.d/grid-env.sh; printf "`date "+\%b \%e \%T"` `hostname -s` glite-lb-notif-keeper: "; @glite_prefix@/sbin/glite-lb-notif-keeper ) diff --git a/org.glite.lb.server/interface/lb_authz.h b/org.glite.lb.server/interface/lb_authz.h index 9295d0c..8da9f42 100644 --- a/org.glite.lb.server/interface/lb_authz.h +++ b/org.glite.lb.server/interface/lb_authz.h @@ -97,6 +97,14 @@ edg_wll_get_fqans(edg_wll_Context ctx, struct vomsdata *voms_info, int edg_wll_acl_print(edg_wll_Context ctx, edg_wll_Acl a, char **policy); +int +check_jobstat_authz(edg_wll_Context ctx, + const edg_wll_JobStat *stat, + int job_flags, + edg_wll_Acl acl, + struct _edg_wll_GssPrincipal_data *peer, + int *authz_flags); + #ifdef __cplusplus } #endif diff --git a/org.glite.lb.server/src/authz_policy.c b/org.glite.lb.server/src/authz_policy.c index 0343cbb..16c7d2a 100644 --- a/org.glite.lb.server/src/authz_policy.c +++ b/org.glite.lb.server/src/authz_policy.c @@ -17,11 +17,14 @@ limitations under the License. #include #include +#include #include #include #include "authz_policy.h" +#include "server_state.h" +#include "crypto.h" struct action_name action_names[] = { { ADMIN_ACCESS, "ADMIN_ACCESS" }, @@ -34,6 +37,7 @@ struct action_name action_names[] = { { READ_ALL, "READ_ALL" }, { PURGE, "PURGE" }, { GRANT_OWNERSHIP, "GRANT_OWNERSHIP" }, + { READ_ANONYMIZED, "READ_ANONYMIZED" }, }; static int num_actions = @@ -201,3 +205,47 @@ blacken_fields(edg_wll_JobStat *stat, int flags) edg_wll_FreeStatus(&new_stat); return 0; } + +int +anonymize_stat(edg_wll_Context ctx, edg_wll_JobStat *stat) +{ + char *salt = NULL, *hash; + int ret; + + ret = edg_wll_GetServerState(ctx, EDG_WLL_STATE_ANONYMIZATION_SALT, &salt); + switch (ret) { + case ENOENT: + edg_wll_ResetError(ctx); + ret = generate_salt(ctx, &salt); + if (ret) + break; + ret = edg_wll_SetServerState(ctx, EDG_WLL_STATE_ANONYMIZATION_SALT, salt); + break; + default: + break; + } + if (ret) + goto end; + + ret = sha256_salt(ctx, stat->owner, salt, &hash); + if (ret) + goto end; + free(stat->owner); + stat->owner = hash; + + if (stat->payload_owner) { + ret = sha256_salt(ctx, stat->payload_owner, salt, &hash); + if (ret) + goto end; + free(stat->payload_owner); + stat->payload_owner = hash; + } + + ret = 0; + +end: + if (salt) + free(salt); + + return ret; +} diff --git a/org.glite.lb.server/src/authz_policy.h b/org.glite.lb.server/src/authz_policy.h index 2f93e92..c1b035d 100644 --- a/org.glite.lb.server/src/authz_policy.h +++ b/org.glite.lb.server/src/authz_policy.h @@ -34,6 +34,7 @@ typedef enum { READ_ALL = 1 << 7, PURGE = 1 << 8, GRANT_OWNERSHIP = 1 << 9, + READ_ANONYMIZED = 1 << 10, } authz_action; typedef struct action_name { @@ -70,4 +71,7 @@ find_authz_attr(const char *name); int blacken_fields(edg_wll_JobStat *, int flags); +int +anonymize_stat(edg_wll_Context, edg_wll_JobStat *); + #endif diff --git a/org.glite.lb.server/src/crypto.c b/org.glite.lb.server/src/crypto.c new file mode 100644 index 0000000..34d2cc7 --- /dev/null +++ b/org.glite.lb.server/src/crypto.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "crypto.h" + +int +sha256_salt(edg_wll_Context ctx, const char *string, + const char *salt, char **hash) +{ + SHA256_CTX context; + unsigned char md[SHA256_DIGEST_LENGTH]; + char output[SHA256_DIGEST_LENGTH+1]; + char *input; + int ret, i; + + SSL_library_init(); + OpenSSL_add_all_algorithms(); + + ret = asprintf(&input, "%s%s", string, salt); + if (ret < 0) + return edg_wll_SetError(ctx, ENOMEM, "Computing hash"); + + SHA256_Init(&context); + SHA256_Update(&context, input, strlen(input)); + SHA256_Final(md, &context); + free(input); + + for (i=0; i < SHA256_DIGEST_LENGTH; i++) + sprintf(output + i*2, "%02x", md[i]); + output[SHA256_DIGEST_LENGTH*2] = '\0'; + + *hash = strdup(output); + if (*hash == NULL) + return edg_wll_SetError(ctx, ENOMEM, "Computing hash"); + + return 0; +} + +int +generate_salt(edg_wll_Context ctx, char **new_salt) +{ + int ret, i; + unsigned char rand_bytes[16]; + char salt[sizeof(rand_bytes)*2 + 1]; + + ret = RAND_bytes(rand_bytes, sizeof(rand_bytes)); + if (ret != 1) { + glite_common_log_msg(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_ERROR, + "Failed to generate random seed"); + return edg_wll_SetError(ctx,EINVAL,"Anonymization failed"); + } + + for (i = 0; i < sizeof(rand_bytes); i++) + sprintf(salt + i*2, "%02x", rand_bytes[i]); + salt[sizeof(salt) - 1] = '\0'; + + *new_salt = strdup(salt); + if (*new_salt == NULL) + return edg_wll_SetError(ctx,ENOMEM,NULL); + + return 0; +} diff --git a/org.glite.lb.server/src/crypto.h b/org.glite.lb.server/src/crypto.h new file mode 100644 index 0000000..c4f16b9 --- /dev/null +++ b/org.glite.lb.server/src/crypto.h @@ -0,0 +1,13 @@ +#ifndef GLITE_LB_CRYPTO_H +#define GLITE_LB_CRYPTO_H + +#include + +int +sha256_salt(edg_wll_Context ctx, const char *string, + const char *salt, char **hash); + +int +generate_salt(edg_wll_Context ctx, char **new_salt); + +#endif diff --git a/org.glite.lb.server/src/il_notification.c b/org.glite.lb.server/src/il_notification.c index 5995c95..fc82346 100644 --- a/org.glite.lb.server/src/il_notification.c +++ b/org.glite.lb.server/src/il_notification.c @@ -187,7 +187,6 @@ edg_wll_NotifJobStatus(edg_wll_Context context, const char *dest_url, const char *owner, int flags, - int authz_flags, int expires, const edg_wll_JobStat notif_job_stat) { @@ -202,9 +201,18 @@ edg_wll_NotifJobStatus(edg_wll_Context context, stat.condor_jdl = NULL; stat.rsl = NULL; } - if (authz_flags) - blacken_fields(&stat, authz_flags); + ret = edg_wll_NotifCheckAuthz(context, &stat, flags, owner); + if (ret != 1) { + char *ju; + glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_INFO, + "[%d] authorization failed when sending notification for job %s", + getpid(), + ju = glite_jobid_getUnique(stat.jobId)); + free(ju); + return edg_wll_SetError(context, EPERM, NULL); + } + if(edg_wll_JobStatusToXML(context, stat, &xml_data)) goto out; diff --git a/org.glite.lb.server/src/il_notification.h b/org.glite.lb.server/src/il_notification.h index 5490193..4afe090 100644 --- a/org.glite.lb.server/src/il_notification.h +++ b/org.glite.lb.server/src/il_notification.h @@ -84,7 +84,6 @@ edg_wll_NotifJobStatus(edg_wll_Context context, const char *dest_url, const char *owner, int flags, - int authz_flags, int expires, const edg_wll_JobStat notif_job_stat); @@ -120,7 +119,7 @@ int edg_wll_NotifMatch(edg_wll_Context context, const edg_wll_JobStat *oldstat, /** * Check permissions on job status. */ -int edg_wll_NotifCheckACL(edg_wll_Context ctx,const edg_wll_JobStat *stat,const char *recip, int *authz_flags); +int edg_wll_NotifCheckAuthz(edg_wll_Context ctx,edg_wll_JobStat *stat,int flags,const char *recip); #ifdef __cplusplus } diff --git a/org.glite.lb.server/src/jobstat.c b/org.glite.lb.server/src/jobstat.c index f8798b3..0a04d1b 100644 --- a/org.glite.lb.server/src/jobstat.c +++ b/org.glite.lb.server/src/jobstat.c @@ -89,38 +89,6 @@ static char* matched_substr(char *in, regmatch_t match) return s; } -static int -check_jobstat_authz(edg_wll_Context ctx, - edg_wll_JobStat *stat, - edg_wll_Acl acl, - int *flags) -{ - struct _edg_wll_GssPrincipal_data princ; - - *flags = 0; - - if (ctx->noAuth) - return 1; - if (ctx->peerName == NULL) - return 0; - if (edg_wll_gss_equal_subj(ctx->peerName, stat->owner)) - return 1; - if (stat->payload_owner && edg_wll_gss_equal_subj(ctx->peerName, stat->payload_owner)) - return 1; - if (acl && edg_wll_CheckACL(ctx, acl, EDG_WLL_CHANGEACL_READ) == 0) - return 1; - edg_wll_ResetError(ctx); - princ.name = ctx->peerName; - princ.fqans = ctx->fqans; - if (check_authz_policy(&ctx->authz_policy, &princ, READ_ALL)) - return 1; - if (check_authz_policy(&ctx->authz_policy, &princ, STATUS_FOR_MONITORING)) { - *flags |= STATUS_FOR_MONITORING; - return 1; - } - return 0; -} - int edg_wll_JobStatusServer( edg_wll_Context ctx, glite_jobid_const_t job, @@ -145,7 +113,7 @@ int edg_wll_JobStatusServer( glite_lbu_Statement sh = NULL; int num_sub, num_f, i, ii; int authz_flags = 0; - + struct _edg_wll_GssPrincipal_data peer; edg_wll_ResetError(ctx); @@ -175,7 +143,11 @@ int edg_wll_JobStatusServer( if (edg_wll_GetACL(ctx, job, &acl)) goto rollback; - if (check_jobstat_authz(ctx, stat, acl, &authz_flags) == 0) { + + memset(&peer, 0, sizeof(peer)); + peer.name = ctx->peerName; + peer.fqans = ctx->fqans; + if (check_jobstat_authz(ctx, stat, flags, acl, &peer, &authz_flags) == 0) { edg_wll_SetError(ctx, EPERM, "not owner"); goto rollback; } @@ -425,9 +397,12 @@ rollback: free(string_jobid); free(md5_jobid); - if (authz_flags) + if (authz_flags & STATUS_FOR_MONITORING) blacken_fields(stat, authz_flags); + if (authz_flags & READ_ANONYMIZED) + anonymize_stat(ctx, stat); + return edg_wll_Error(ctx, NULL, NULL); } diff --git a/org.glite.lb.server/src/lb_authz.c b/org.glite.lb.server/src/lb_authz.c index b6130e2..ca4bf99 100644 --- a/org.glite.lb.server/src/lb_authz.c +++ b/org.glite.lb.server/src/lb_authz.c @@ -1170,3 +1170,42 @@ end: return ret; } + +int +check_jobstat_authz(edg_wll_Context ctx, + const edg_wll_JobStat *stat, + int job_flags, + edg_wll_Acl acl, + struct _edg_wll_GssPrincipal_data *peer, + int *authz_flags) +{ + *authz_flags = 0; + + if (peer == NULL || peer->name == NULL) + return 0; + + if (edg_wll_gss_equal_subj(peer->name, stat->owner)) + return 1; + if (stat->payload_owner && edg_wll_gss_equal_subj(peer->name, stat->payload_owner)) + return 1; + + if (job_flags & EDG_WLL_NOTIF_ANONYMIZE || + check_authz_policy(&ctx->authz_policy, peer, READ_ANONYMIZED)) + *authz_flags |= READ_ANONYMIZED; + + if (ctx->noAuth || + edg_wll_amIroot(peer->name, peer->fqans, &ctx->authz_policy)) + return 1; + if (acl && edg_wll_CheckACL_princ(ctx, acl, EDG_WLL_CHANGEACL_READ, peer) == 0) + return 1; + edg_wll_ResetError(ctx); + + if (check_authz_policy(&ctx->authz_policy, peer, READ_ALL)) + return 1; + if (check_authz_policy(&ctx->authz_policy, peer, STATUS_FOR_MONITORING)) { + *authz_flags |= STATUS_FOR_MONITORING; + return 1; + } + + return 0; +} diff --git a/org.glite.lb.server/src/notif-keeper.sh b/org.glite.lb.server/src/notif-keeper.sh new file mode 100644 index 0000000..ed51cb8 --- /dev/null +++ b/org.glite.lb.server/src/notif-keeper.sh @@ -0,0 +1,267 @@ +#!/bin/bash +# +# Copyright (c) Members of the EGEE Collaboration. 2004-2010. +# See http://www.eu-egee.org/partners for details on the copyright holders. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +GLITE_LOCATION=${GLITE_LOCATION:-"/opt/glite"} +NOTIFY=${GLITE_LB_NOTIFY:-"$GLITE_LOCATION/bin/glite-lb-notify"} + +# This function reads the full list of notifications to maintain into an array +function read_list() { + +infile="$1" +TOTALNOTIFS=0 + +while read line ; do + cleanline=`echo $line | sed -r 's/^\s*//'` + echo "$line" | grep -E "^#" > /dev/null + if [ $? -ne 0 ]; then + if [ "$cleanline" != "" ]; then + HANDLES[$TOTALNOTIFS]=`echo $cleanline | sed -r 's/\s+.*$//'` + OPTIONS[$TOTALNOTIFS]=`echo $cleanline | sed -r 's/^\w+\s+//'` + TOPICS[$TOTALNOTIFS]=`echo ${OPTIONS[${TOTALNOTIFS}]} | grep -E -o '\-a[ ]+x-msg://[^ ]+' | sed -r 's/^.*msg:\/\///'` + TOTALNOTIFS=$(($TOTALNOTIFS+1)) + fi + fi +done < $infile + +} + +function vecho() { + if [ $1 -le $Verbose ]; then + shift + printf "${HANDLES[${i}]}: \t" + echo $* + fi +} + +function lookup_notifid() { + retnotifid="" + if [ -f $fname ]; then + retnotifid=`grep -E '^Notifid: ' $fname | sed -r 's/^Notifid: //'` + fi +} + +function setup_new() { + opts=${OPTIONS[$1]} + vecho 2 glite-lb-notify new ${opts} + retnotifid=`glite-lb-notify new ${opts} | grep -E "notification ID: " | sed 's/^notification ID: //'` + vecho 2 $retnotifid +} + +function drop() { + notifid=${NOTIFID[${1}]} + vecho 2 glite-lb-notify drop $notifid + glite-lb-notify drop $notifid > /dev/null + NOTIFID[${1}]="" +} + +function extend() { + notifid=${NOTIFID[${1}]} + vecho 2 glite-lb-notify refresh $notifid + glite-lb-notify refresh $notifid > /dev/null + if [ $? -gt 0 ]; then + vecho 1 Failed to refresh notification for handle ${HANDLES[${1}]} + NOTIFID[${1}]="" + fi +} + +function check_opts() { + opts=${OPTIONS[$1]} + if [ -f $fname ]; then + storedopts=`grep -E '^Options: ' $fname | sed -r 's/^Options: //'` + fi + nospcopts=`echo $opts | sed -r 's/\s//g'` + nospcstoredopts=`echo $storedopts | sed -r 's/\s//g'` + vecho 1 "Checking options for changes" + if [ "$nospcopts" == "$nospcstoredopts" ]; then + checkopts_ret=0 + else + checkopts_ret=1 + fi +} + +function check_timestamp() { + tsfile=$FilePrefix.${TOPICS[${1}]}.stat + if [ ! -f "$tsfile" ]; then + vecho 0 WARNING: stat file $tsfile not found! + else + vecho 1 Parsing stat file $tsfile + storedlc=`grep -E "^last_connected=" $tsfile | sed 's/^last_connected=//'` + storedls=`grep -E "^last_sent=" $tsfile | sed 's/^last_sent=//'` + if [ $storedlc -gt $storedls ]; then + stored=$storedlc + else + stored=$storedls + fi + threshold=`expr $stored + $AGE` + vecho 1 "Comparing current time ($NOW) with stale threshold ($threshold)" + if [ $NOW -gt $threshold ]; then + vecho 1 Age Stale + age_check=1; + else + vecho 2 Age OK + age_check=0; + fi + fi +} + +function load() { + out="`cat \"$FILE\"`" + nid=`echo "$out" | grep '^notification ID:' | cut -f3 -d' '` + val=`echo "$out" | grep '^valid' | sed 's/[^(]*(\([^)]*\)).*/\1/'` + ori=`$STAT "$FILE"` + + if [ -z "$nid" -o -z "$val" ]; then + val=-1 + return 1 + fi +} + +function save_ttl() { + mv "$FILE" "$FILE.1" + cat "$FILE" | grep -v '^valid' > "$FILE" +} + +function showHelp() { +cat << EndHelpHeader +Script for registering, checking and refreshing site-specific notifications. +It is intended primarily to be run by cron, but can be run manually by site +admins to avoid waiting for the next cron cycle. + +EndHelpHeader + + echo "Usage: $progname [OPTIONS]" + echo "Options:" + echo " -h | --help Show this help message." + echo " -f | --file-prefix Notification files prefix (same value as for server and" + echo " notif-il)." + echo " -n | --site-notif Location of the site-notif.conf (input definition) file." + echo " -a | --stale-age Time in seconds since last read before the registration is" + echo " considered stale (default 345600 = 4 days)." + echo " -v | --verbose Verbose cmdline output. (Repeat for higher verbosity)" +} + +Verbose=0 +AGE=345600 +while test -n "$1" +do + case "$1" in + "-h" | "--help") showHelp && exit 2 ;; + "-f" | "--file-prefix") shift ; FilePrefix=$1 ;; + "-n" | "--site-notif") shift ; SiteNotif=$1 ;; + "-a" | "--stale-age" ) shift ; AGE=$1 ;; + "-v" | "--verbose") Verbose=$(($Verbose+1)) ;; + "-vv" ) Verbose=$(($Verbose+2)) ;; + *) echo WARNING: unknown argument $1 ;; + esac + shift +done + + +# -- set up -- + +#if [ -z "$SERVER" ]; then +# echo "Usage: $0 LB_SERVER [ TTL NEW_NOTIF_ARGUMRNTS... ]" +# echo +# echo "Environment:" +# echo " DROP: drop the notification" +# echo " DEBUG: show progress" +# exit 1 +#fi +#shift +#shift + +if [ -n "$GLITE_HOST_CERT" -a -n "$GLITE_HOST_KEY" ] ;then + X509_USER_CERT="$GLITE_HOST_CERT" + X509_USER_KEY="$GLITE_HOST_KEY" +else + vecho 0 "WARNING: host certificate not specified" +fi + +if [ -z "$GLITE_LB_LOCATION_VAR" ]; then + export GLITE_LB_LOCATION_VAR=/var/glite + vecho 0 "WARNING: GLITE_LB_LOCATION_VAR not specified, using default" +fi + +if [ -z "$FilePrefix" ]; then + export FilePrefix=/var/tmp/glite-lb-notif + vecho 0 "WARNING: Notif file prefix not specified, using default" +fi + +if [ -z "$SiteNotif" ]; then + if [ -f "/etc/glite-lb/site-notif.conf" ]; then + vecho 1 Configuration file site-notif.conf not specified, using default + SiteNotif="/etc/glite-lb/site-notif.conf" + else + vecho 0 "ERROR: No configuration file (site-notif.conf)" + exit 1 + fi +fi + +touch $GLITE_LB_LOCATION_VAR/notif-keeper.rw.try.$$.tmp + +if [ -f $GLITE_LB_LOCATION_VAR/notif-keeper.rw.try.$$.tmp ]; then + rm $GLITE_LB_LOCATION_VAR/notif-keeper.rw.try.$$.tmp +else + vecho 0 ERROR: $GLITE_LB_LOCATION_VAR not writable! + exit 1 +fi + +#export GLITE_WMS_NOTIF_SERVER="$SERVER" +export X509_USER_CERT +export X509_USER_KEY + +read_list $SiteNotif + +for ((i=0 ; i < ${TOTALNOTIFS} ; i++)) +do + NOW=`date +%s` + fname="$GLITE_LB_LOCATION_VAR/notif-keeper-${HANDLES[${i}]}.notif" + lookup_notifid ${HANDLE[${i}]} + NOTIFID[i]=$retnotifid + + if [ "${NOTIFID[${i}]}" == "" ]; then + setup_new $i + NOTIFID[i]=$retnotifid + vecho 1 "New registration ($retnotifid)" + else + check_opts $i + if [ $checkopts_ret -eq 0 ]; then + check_timestamp $i + if [ $age_check -eq 0 ]; then + extend $i + if [ "${NOTIFID[${i}]}" == "" ]; then + setup_new $i + NOTIFID[i]=$retnotifid + vecho 1 "Failed to extend. Registration recreated ($retnotifid)." + else + vecho 1 "Registration extended (${NOTIFID[${i}]})" + fi + else + drop $i + vecho 1 "Registration stale => dropped" + fi + else + drop $i + setup_new $i + NOTIFID[i]=$retnotifid + vecho 1 "Options changed. Registration dropped and recreated ($retnotifid)." + fi + fi + vecho 1 "Writing $fname" + printf "#This file is maintained automatically by script $0 initiated by cron\nOptions: ${OPTIONS[${i}]}\nNotifid: ${NOTIFID[${i}]}\n" > $fname +done diff --git a/org.glite.lb.server/src/notif_match.c b/org.glite.lb.server/src/notif_match.c index f27428c..b99820e 100644 --- a/org.glite.lb.server/src/notif_match.c +++ b/org.glite.lb.server/src/notif_match.c @@ -26,6 +26,7 @@ limitations under the License. #include #include "glite/lb/context-int.h" +#include "glite/lb/events_json.h" #include "glite/lbu/trio.h" #include "glite/lbu/log.h" @@ -36,8 +37,10 @@ limitations under the License. #include "db_supp.h" #include "index.h" #include "authz_policy.h" +#include "get_events.h" -static int notif_match_conditions(edg_wll_Context,const edg_wll_JobStat *,const edg_wll_JobStat *,const char *); +static int notif_match_conditions(edg_wll_Context,const edg_wll_JobStat *,const edg_wll_JobStat *,const char *, int flags); +static int fetch_history(edg_wll_Context ctx, edg_wll_JobStat *stat); int edg_wll_NotifExpired(edg_wll_Context,const char *); @@ -46,12 +49,15 @@ int edg_wll_NotifMatch(edg_wll_Context ctx, const edg_wll_JobStat *oldstat, cons edg_wll_NotifId nid = NULL; char *jobq,*ju = NULL,*jobc[6]; glite_lbu_Statement jobs = NULL; - int ret,authz_flags = 0; + int ret,flags; size_t i; time_t expires,now = time(NULL); char *cond_where = NULL; char *cond_and_where = NULL; + char *history = NULL; + int history_fetched = 0; + edg_wll_JobStat newstat = *stat; // shallow copy edg_wll_ResetError(ctx); @@ -109,17 +115,30 @@ int edg_wll_NotifMatch(edg_wll_Context ctx, const edg_wll_JobStat *oldstat, cons if (edg_wll_ExecSQL(ctx,jobq,&jobs) < 0) goto err; while ((ret = edg_wll_FetchRow(ctx,jobs,sizeof(jobc)/sizeof(jobc[0]),NULL,jobc)) > 0) { + flags = atoi(jobc[5]); if (now > (expires = glite_lbu_StrToTime(jobc[2]))) { edg_wll_NotifExpired(ctx,jobc[0]); glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_DEBUG, "[%d] NOTIFY:%s expired at %s UTC", getpid(),jobc[0],asctime(gmtime(&expires))); } - else if (notif_match_conditions(ctx,oldstat,stat,jobc[4]) && - edg_wll_NotifCheckACL(ctx,stat,jobc[3], &authz_flags)) + else if (notif_match_conditions(ctx,oldstat,&newstat,jobc[4],flags)) { - char *dest; + char *errt, *errd; + char *dest; + + if (flags & EDG_WLL_NOTIF_HISTORY && !history_fetched) { + glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_DEBUG, "NOTIFY: event history for job %s", jobc[0]); + if (fetch_history(ctx, &newstat) != 0) { + edg_wll_Error(ctx, &errt, &errd); + glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_ERROR, "NOTIFY: query events for %s failed, %s: %s", jobc[0], errt, errd); + free(errt); + free(errd); + edg_wll_ResetError(ctx); + } + history_fetched = 1; + } - glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_DEBUG, "NOTIFY: %s, job %s", jobc[0], ju = edg_wlc_JobIdGetUnique(stat->jobId)); + glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_DEBUG, "NOTIFY: %s, job %s", jobc[0], ju = edg_wlc_JobIdGetUnique(newstat.jobId)); free(ju); ju = NULL; dest = jobc[1]; @@ -132,7 +151,7 @@ int edg_wll_NotifMatch(edg_wll_Context ctx, const edg_wll_JobStat *oldstat, cons /* XXX: only temporary hack!!! */ ctx->p_instance = strdup(""); - if ( edg_wll_NotifJobStatus(ctx, nid, dest, jobc[3], atoi(jobc[5]), authz_flags, expires, *stat) ) + if ( edg_wll_NotifJobStatus(ctx, nid, dest, jobc[3], atoi(jobc[5]), expires, newstat) ) { for (i=0; ip_instance); ctx->p_instance = NULL; if ( nid ) edg_wll_NotifIdFree(nid); free(jobq); @@ -177,29 +197,34 @@ int edg_wll_NotifExpired(edg_wll_Context ctx,const char *notif) } -static int notif_match_conditions(edg_wll_Context ctx,const edg_wll_JobStat *oldstat, const edg_wll_JobStat *stat,const char *cond) +static int notif_match_conditions(edg_wll_Context ctx,const edg_wll_JobStat *oldstat, const edg_wll_JobStat *stat,const char *cond, int flags) { edg_wll_QueryRec **c,**p; - int match,i; + int match = 0,i; if (!cond) return 1; - if (parseJobQueryRec(ctx,cond,strlen(cond),&c)) { - glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_ERROR, - "notif_match_conditions(): parseJobQueryRec failed"); + if (!(flags & EDG_WLL_NOTIF_TERMINAL_STATES) || // Either there is no terminal flag + ((flags & EDG_WLL_NOTIF_TERMINAL_STATES) && (EDG_WLL_JOB_TERMINAL_STATE[stat->state]) && // Or the new state is terminal + ((stat->state!=EDG_WLL_JOB_PURGED) || !(EDG_WLL_JOB_TERMINAL_STATE[oldstat->state])))) { // And in case it is purged, it was not in a terminal state before - return 1; - } + if (parseJobQueryRec(ctx,cond,strlen(cond),&c)) { + glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_ERROR, + "notif_match_conditions(): parseJobQueryRec failed"); - match = match_status(ctx,oldstat,stat,(const edg_wll_QueryRec **) c); - if ( c ) - { - for (p = c; *p; p++) { - for (i=0; (*p)[i].attr; i++) - edg_wll_QueryRecFree((*p)+i); - free(*p); + return 1; + } + + match = match_status(ctx,oldstat,stat,(const edg_wll_QueryRec **) c); + if ( c ) + { + for (p = c; *p; p++) { + for (i=0; (*p)[i].attr; i++) + edg_wll_QueryRecFree((*p)+i); + free(*p); + } + free(c); } - free(c); } return match; } @@ -208,46 +233,108 @@ static int notif_match_conditions(edg_wll_Context ctx,const edg_wll_JobStat *old * effective VOMS groups of the recipient are not available here, should be * probably stored along with the registration. */ -int edg_wll_NotifCheckACL(edg_wll_Context ctx,const edg_wll_JobStat *stat,const char *recip, int *authz_flags) +int edg_wll_NotifCheckAuthz(edg_wll_Context ctx,edg_wll_JobStat *stat, + int flags,const char *recip) { int ret; struct _edg_wll_GssPrincipal_data princ; edg_wll_Acl acl = NULL; + int authz_flags = 0; memset(&princ, 0, sizeof(princ)); - *authz_flags = 0; - - edg_wll_ResetError(ctx); - if (strcmp(stat->owner,recip) == 0 - || edg_wll_amIroot(recip,NULL,&ctx->authz_policy)) return 1; - if (stat->payload_owner && strcmp(stat->payload_owner,recip) == 0) - return 1; princ.name = (char *)recip; - if (check_authz_policy(&ctx->authz_policy, &princ, READ_ALL)) - return 1; if (stat->acl) { acl = calloc(1,sizeof *acl); ret = edg_wll_DecodeACL(stat->acl,&acl->value); if (ret) { - edg_wll_FreeAcl(acl); - edg_wll_SetError(ctx,EINVAL,"decoding ACL"); - return 0; + free(acl); + acl = NULL; } + } - acl->string = stat->acl; - ret = edg_wll_CheckACL(ctx, acl, EDG_WLL_CHANGEACL_READ); - acl->string = NULL; + ret = check_jobstat_authz(ctx, stat, flags, acl, &princ, &authz_flags); + if (acl) edg_wll_FreeAcl(acl); - if (ret == 0) - return 1; - edg_wll_ResetError(ctx); - } + if (ret != 1) + return ret; + + if (authz_flags & STATUS_FOR_MONITORING) + blacken_fields(stat, authz_flags); + if (authz_flags & READ_ANONYMIZED) + anonymize_stat(ctx, stat); + + return ret; +} + + +#define HISTORY_EMPTY "[]" +#define HISTORY_HEADER "[\n" +#define HISTORY_HEADER_SIZE 2 +#define HISTORY_FOOTER "\n]" +#define HISTORY_FOOTER_SIZE 2 +#define HISTORY_SEPARATOR ",\n" +#define HISTORY_SEPARATOR_SIZE 2 - if (check_authz_policy(&ctx->authz_policy, &princ, STATUS_FOR_MONITORING)) { - *authz_flags |= STATUS_FOR_MONITORING; - return 1; +static int fetch_history(edg_wll_Context ctx, edg_wll_JobStat *stat) { + edg_wll_QueryRec jc0[2], *jc[2]; + char *event_str = NULL, *history = NULL; + edg_wll_Event *events = NULL; + size_t size, len, maxsize = 1024, newsize; + size_t i; + void *tmpptr; + + jc[0] = jc0; + jc[1] = NULL; + jc[0][0].attr = EDG_WLL_QUERY_ATTR_JOBID; + jc[0][0].op = EDG_WLL_QUERY_OP_EQUAL; + jc[0][0].value.j = stat->jobId; + jc[0][1].attr = EDG_WLL_QUERY_ATTR_UNDEF; + + if (edg_wll_QueryEventsServer(ctx, 1, (const edg_wll_QueryRec **)jc, NULL, &events) == 0) { + if (!events || !events[0].type) { + history = strdup(HISTORY_EMPTY); + } else { + history = malloc(maxsize); + strcpy(history, HISTORY_HEADER); + size = HISTORY_HEADER_SIZE; + + for (i = 0; events && events[i].type; i++) { + if (edg_wll_UnparseEventJSON(ctx, events + i, &event_str) != 0) goto err; + len = strlen(event_str); + newsize = size + len + HISTORY_SEPARATOR_SIZE + HISTORY_FOOTER_SIZE + 1; + if (newsize > maxsize) { + maxsize <<= 1; + if (newsize > maxsize) maxsize = newsize; + if ((tmpptr = realloc(history, maxsize)) == NULL) { + edg_wll_SetError(ctx, ENOMEM, NULL); + goto err; + } + history = tmpptr; + } + strncpy(history + size, event_str, len + 1); + size += len; + if (events[i+1].type) { + strcpy(history + size, HISTORY_SEPARATOR); + size += HISTORY_SEPARATOR_SIZE; + } + free(event_str); + event_str = NULL; + } + strcpy(history + size, HISTORY_FOOTER); + size += HISTORY_FOOTER_SIZE; + } + glite_common_log(LOG_CATEGORY_LB_SERVER, LOG_PRIORITY_DEBUG, "NOTIFY: fetched %zd events", i); + + stat->history = history; + history = NULL; } - return 0; +err: + free(history); + for (i = 0; events && events[i].type; i++) + edg_wll_FreeEvent(&events[i]); + free(events); + + return edg_wll_Error(ctx, NULL, NULL); } diff --git a/org.glite.lb.server/src/notification.c b/org.glite.lb.server/src/notification.c index 968f240..3bf981f 100644 --- a/org.glite.lb.server/src/notification.c +++ b/org.glite.lb.server/src/notification.c @@ -692,8 +692,9 @@ static int split_cond_list( if ( !conditions || !conditions[0] ) { - if (ctx->noAuth) nconds_ct = jobs_ct = 0; - else return edg_wll_SetError(ctx, EINVAL, "Empty condition list"); + nconds_ct = jobs_ct = 0; + //if (ctx->noAuth) nconds_ct = jobs_ct = 0; + //else return edg_wll_SetError(ctx, EINVAL, "Empty condition list"); } else for ( nconds_ct = jobs_ct = i = 0; conditions[i]; i++ ) { if ( conditions[i][0].attr && conditions[i][0].attr != EDG_WLL_QUERY_ATTR_JOBID ) @@ -1008,7 +1009,6 @@ static int notif_streaming_event_cb(edg_wll_Context ctx, glite_jobid_t jobid, ed const char *owner; int flags; time_t expire; - int authz_flags; size_t i; char *ju; char *row[4] = {}; @@ -1030,19 +1030,12 @@ static int notif_streaming_event_cb(edg_wll_Context ctx, glite_jobid_t jobid, ed flags = atoi(row[2]); owner = row[3]; - if (!edg_wll_NotifCheckACL(ctx, (const edg_wll_JobStat *)stat, owner, &authz_flags)) { - glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_INFO, "[%d] NOTIFY stream: %s, authorization failed, job %s", getpid(), lctx->nid_s, ju = glite_jobid_getUnique(stat->jobId)); - free(ju); ju = NULL; - edg_wll_ResetError(ctx); - goto cleanup; - } - glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_INFO, "[%d] NOTIFY stream: %s, job %s, destination '%s'", getpid(), lctx->nid_s, ju = glite_jobid_getUnique(stat->jobId), row[0]); free(ju); ju = NULL; dest = strdup(row[0]); /*XXX: ??? copied from notif_match.c */ free(ctx->p_instance); ctx->p_instance = strdup(""); - if (edg_wll_NotifJobStatus(ctx, lctx->nid, dest, owner, flags, authz_flags, expire, (const edg_wll_JobStat)(*stat)) != 0) { + if (edg_wll_NotifJobStatus(ctx, lctx->nid, dest, owner, flags, expire, (const edg_wll_JobStat)(*stat)) != 0) { glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_ERROR, "[%d] NOTIFY stream: %s, error", getpid(), lctx->nid_s); goto cleanup; } diff --git a/org.glite.lb.server/src/server_state.h b/org.glite.lb.server/src/server_state.h index 25b3db1..d50b342 100644 --- a/org.glite.lb.server/src/server_state.h +++ b/org.glite.lb.server/src/server_state.h @@ -22,6 +22,7 @@ limitations under the License. #define EDG_WLL_STATE_DUMP_START "StartDump" #define EDG_WLL_STATE_DUMP_END "EndDump" +#define EDG_WLL_STATE_ANONYMIZATION_SALT "AnonymizationSalt" int edg_wll_GetServerState(edg_wll_Context,const char *,char **); int edg_wll_SetServerState(edg_wll_Context,const char *,const char *); diff --git a/org.glite.lb.server/src/srv_purge.c b/org.glite.lb.server/src/srv_purge.c index b6370b6..2ccc968 100644 --- a/org.glite.lb.server/src/srv_purge.c +++ b/org.glite.lb.server/src/srv_purge.c @@ -250,6 +250,11 @@ int edg_wll_PurgeServer(edg_wll_Context ctx,const edg_wll_PurgeRequest *request, purge_ctx_t prg; struct _edg_wll_GssPrincipal_data princ; + memset(&prg, 0, sizeof prg); + prg.naffected_jobs = 0; + prg.parse = 0; + prg.dumpfile = -1; + memset(&princ, 0, sizeof princ); princ.name = ctx->peerName; princ.fqans = ctx->fqans; @@ -262,11 +267,6 @@ int edg_wll_PurgeServer(edg_wll_Context ctx,const edg_wll_PurgeRequest *request, edg_wll_ResetError(ctx); memset(result, 0, sizeof(*result)); - memset(&prg, 0, sizeof prg); - prg.naffected_jobs = 0; - prg.parse = 0; - prg.dumpfile = -1; - if ( (request->flags & EDG_WLL_PURGE_SERVER_DUMP) && ((prg.dumpfile = edg_wll_CreateTmpPurgeFile(ctx, &tmpfname)) == -1 ) ) goto abort; @@ -798,6 +798,10 @@ int purge_one(edg_wll_Context ctx,edg_wll_JobStat *stat,int dump, int purge, int edg_wll_ResetError(ctx); } + // notifications + memcpy(&new_stat, stat, sizeof new_stat); + new_stat.state = EDG_WLL_JOB_PURGED; + edg_wll_NotifMatch(ctx, stat, &new_stat); } if ( purge ) @@ -914,14 +918,6 @@ int purge_one(edg_wll_Context ctx,edg_wll_JobStat *stat,int dump, int purge, int free(stmt); stmt = NULL; } - if ( purge ) - { - // notifications - memcpy(&new_stat, stat, sizeof new_stat); - new_stat.state = EDG_WLL_JOB_PURGED; - edg_wll_NotifMatch(ctx, stat, &new_stat); - } - if (dump >= 0) trio_asprintf(&stmt, "select event,code,prog,host,u.cert_subj,time_stamp,usec,level,arrived,seqcode " diff --git a/org.glite.lb.state-machine/configure b/org.glite.lb.state-machine/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.state-machine/configure +++ b/org.glite.lb.state-machine/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.types/MultiStruct.pm b/org.glite.lb.types/MultiStruct.pm index 3ab6d4b..9e7898b 100644 --- a/org.glite.lb.types/MultiStruct.pm +++ b/org.glite.lb.types/MultiStruct.pm @@ -9,6 +9,7 @@ sub new { $self->{fields} = {}; # typ->{ name->StructField, ... } $self->{order} = {}; $self->{flesh} = {}; + $self->{terminal} = ""; bless $self; } @@ -81,6 +82,11 @@ sub load { next; } + if (/^\@terminal\s+(\S+)$/) { + $self->{terminal} = $self->{terminal} . " " . $1; + next; + } + s/^\s*//; my ($ftype,$fname,$comment) = split /\s+/,$_,3; if ($ftype eq '_code_') { @@ -145,6 +151,16 @@ sub getTypesOrdered { } @names; } +sub getTerminalStatusOrdered { + my $self = shift; + for my $stat ($self->getTypesOrdered) { + if ($self->{terminal} =~ m/\b$stat\b/) { + push(@out, 1); } + else { push(@out, 0); } + } + @out; +} + sub getTypeComment { my $self = shift; my $type = shift || $self->{type}; @@ -210,4 +226,20 @@ sub getAllFieldsOrdered { } @names; } +sub getMaxSize { + my $self = shift; + my $count = 0; + my @fields; + + for my $t (keys %{$self->{fields}}) { + next if $t eq '_common_'; + next if not exists $self->{fields}->{$t}; + @fields = keys %{$self->{fields}->{$t}}; + if ($#fields > $count) { $count = $#fields; } + } + + @fields = keys %{$self->{fields}->{_common_}}; + return $#fields + $count + 1 + 1; +} + 1; diff --git a/org.glite.lb.types/configure b/org.glite.lb.types/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.types/configure +++ b/org.glite.lb.types/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.types/status.T b/org.glite.lb.types/status.T index d64f2ad..640b1bb 100644 --- a/org.glite.lb.types/status.T +++ b/org.glite.lb.types/status.T @@ -105,6 +105,7 @@ jobid isb_transfer Input sandbox corresponding to the job jobid osb_transfer Output sandbox corresponding to the job string payload_owner Owner of the actual job payload (e.g., for pilot jobs) string access_rights List of access rights (human readable variant of acl) +string history Job history. _pad_ 55 @@ -191,3 +192,7 @@ _pad_ 20 @type Unknown Status cannot be determined. @type Purged Job has been purged from bookkeeping server (for LB-RGMA interface). +@terminal Aborted +@terminal Cancelled +@terminal Cleared +@terminal Purged diff --git a/org.glite.lb.utils/configure b/org.glite.lb.utils/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.utils/configure +++ b/org.glite.lb.utils/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.ws-interface/configure b/org.glite.lb.ws-interface/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.ws-interface/configure +++ b/org.glite.lb.ws-interface/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.ws-test/configure b/org.glite.lb.ws-test/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lb.ws-test/configure +++ b/org.glite.lb.ws-test/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lb.yaim/configure b/org.glite.lb.yaim/configure index 45b5c78..292e2ba 100644 --- a/org.glite.lb.yaim/configure +++ b/org.glite.lb.yaim/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.db/configure b/org.glite.lbjp-common.db/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.db/configure +++ b/org.glite.lbjp-common.db/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.gsoap-plugin/configure b/org.glite.lbjp-common.gsoap-plugin/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.gsoap-plugin/configure +++ b/org.glite.lbjp-common.gsoap-plugin/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.gss/configure b/org.glite.lbjp-common.gss/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.gss/configure +++ b/org.glite.lbjp-common.gss/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.jp-interface/configure b/org.glite.lbjp-common.jp-interface/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.jp-interface/configure +++ b/org.glite.lbjp-common.jp-interface/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.log/configure b/org.glite.lbjp-common.log/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.log/configure +++ b/org.glite.lbjp-common.log/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.maildir/configure b/org.glite.lbjp-common.maildir/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.maildir/configure +++ b/org.glite.lbjp-common.maildir/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.server-bones/configure b/org.glite.lbjp-common.server-bones/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.server-bones/configure +++ b/org.glite.lbjp-common.server-bones/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.trio/configure b/org.glite.lbjp-common.trio/configure index 45b5c78..292e2ba 100755 --- a/org.glite.lbjp-common.trio/configure +++ b/org.glite.lbjp-common.trio/configure @@ -146,7 +146,7 @@ my %externs = ( }, jdk => { prefix=> '/usr/java/latest', - locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ], + locations => [ '/usr/lib/jvm/java', '/usr/lib/jvm/default-java', '/usr/java/latest' ], }, libtar => { prefix=> '/usr' @@ -436,7 +436,7 @@ sub mode_build { print "\t$_: $jar{$_}\n" for @myjars; for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } }; print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n"; - + mkinc($_) for @modules; if ($module) { @@ -594,7 +594,7 @@ BEGIN{ 'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ], 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ], 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec - 'canl.c' => [ qw/cares:B openssl:B libtool:B/ ], + 'canl.c' => [ qw/cares:B openssl:B libtool:B bison:B flex:B/ ], ); %need_jars = ( @@ -682,7 +682,7 @@ for my $jar (keys %need_jars) { 'jobid.api-cpp' => [ qw/jobid.api-c/ ], 'jobid.api-java' => [ qw// ], - 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ], + 'lbjp-common.jp-interface' => [ qw/lbjp-common.trio lbjp-common.db jobid.api-c/ ], 'jp.client' => [ qw/ jp.ws-interface @@ -1040,7 +1040,7 @@ $buildroot{'gridsite.core'} = 'src'; sub full { - my $short = shift; + my ($short) = @_; my $subsys = $short; $subsys =~ s/\..*//; @@ -1050,10 +1050,11 @@ sub full sub get_version { - my ($top_srcdir) = @_; + my ($fmod, $top_srcdir) = @_; - my ($subsys,$module) = split /\./,$fmod,2; + my ($subsys,$mod) = split /\./,$fmod,2; my ($major,$minor,$rev,$age); + my $old_; if ($version) { $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/; @@ -1067,12 +1068,14 @@ sub get_version open V,"$path/version.properties" or die "$path/version.properties: $!\n"; - while ($_ = ) { + $old_ = $_; + 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; + $_ = $old_; $version = "$major.$minor.$rev-$age"; } @@ -1082,7 +1085,7 @@ sub get_version sub get_description { - my $top_srcdir = shift; + my ($top_srcdir) = @_; my $cvs_module = $top_srcdir; my $package_description = ""; @@ -1125,10 +1128,10 @@ canl.c /; @aux{@m} = (1) x ($#m+1); - my $short = shift; + my ($short) = @_; my $full = full $short; - my ($subsys,$module) = split /\./,$short,2; - my $packageName = "$project{tag_prefix}{$subsys}$subsys-${module}"; + my ($subsys,$mod) = split /\./,$short,2; + my $packageName = "$project{tag_prefix}{$subsys}$subsys-${mod}"; unless ($aux{$short}) { print "Makefile.inc not needed in $full\n"; @@ -1136,14 +1139,17 @@ canl.c } my $top_srcdir = '.'; + my $abs_srcdir = ''; my $build = ''; if ($module) { $top_srcdir = $0; $top_srcdir =~ s,/?[^/]*$,,; + $abs_srcdir = $top_srcdir; $top_srcdir =~ s,^$,\.,; } else { $build = "$full/"; + $abs_srcdir = "$full/"; unless ($buildroot{$_} eq '') { $top_srcdir = '..'; $build .= "$buildroot{$_}/"; @@ -1153,17 +1159,18 @@ 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 ($major, $minor, $rev, $age) = get_version $short, $abs_srcdir; + my ($package_summary, $package_description) = get_description $abs_srcdir; + if ($package_description) { $package_description =~ s/(.{1,78}\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"; + # files for ETICS always in root source directory + mkdir $abs_srcdir."project" unless (-d $abs_srcdir."project"); + open PKGCHL,">".$abs_srcdir."project/changelog" + or die $abs_srcdir."project/changelog: $!\n"; $old_locale = setlocale(LC_TIME); setlocale(LC_TIME, "C"); $specdate = strftime("%a %b %d %Y", gmtime()); @@ -1177,14 +1184,6 @@ canl.c unless ($top_srcdir eq '.') { unlink $build."Makefile"; symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n"; - for my $file ('.pre', '.post', '.preun', '.postun') { - my $pfile = "project/$file"; - if (-f "$full/$pfile") { - mkdir "$build/project" unless (-d "$build/project"); - unlink $build.$pfile; - symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n"; - } - } } open MKINC,">".$build."Makefile.inc" @@ -1225,9 +1224,9 @@ top_srcdir = $top_srcdir my $dh; my $debian = 0; - opendir $dh, "$top_srcdir/project" || die "Can't open $top_srcdir/project: $!"; - for $_ (readdir $dh) { - if (/^(.*)\.spec$/) { + opendir $dh, "$abs_srcdir/project" || die "Can't open $abs_srcdir/project: $!"; + for my $dir (readdir $dh) { + if ($dir=~/^(.*)\.spec$/) { if ($1 ne $packageName) { printf STDERR "Changed RPM name: $packageName --> $1\n"; $packageName=$1; @@ -1237,11 +1236,12 @@ top_srcdir = $top_srcdir } closedir $dh; - for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog") { - if (-f "$top_srcdir/project/$file") { + for my $file ("$packageName.spec", "debian.rules", "debian.control", "debian.changelog", "debian.copyright") { + if (-f "$abs_srcdir/project/$file") { + my $old_ = $_; printf STDERR "Creating $build$file\n"; open DST, ">$build$file"; - open SRC, "<$top_srcdir/project/$file"; + open SRC, "<$abs_srcdir/project/$file"; while () { if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; } if (/\@URL\@/) { s/\@URL\@/$package{url}/g; } @@ -1262,6 +1262,7 @@ top_srcdir = $top_srcdir } close SRC; close DST; + $_ = $old_; } } @@ -1269,7 +1270,7 @@ top_srcdir = $top_srcdir `rm -rfv ${build}debian`; mkdir $build."debian" or die $!; - `cp $top_srcdir/project/debian.* ${build}debian/ 2>/dev/null`; + `cp $abs_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: $!"; @@ -1316,7 +1317,7 @@ sub mode_etics { my ($subsys,$module) = split /\./,$fmod,2; my $full = full "$subsys.$module"; - my ($major,$minor,$rev,$age) = get_version $full; + my ($major,$minor,$rev,$age) = get_version $fmod, $full; # XXX: --with ignored for platform-dependend packages my @copts = (); diff --git a/org.glite.lbjp-common.trio/interface/escape.h b/org.glite.lbjp-common.trio/interface/escape.h index c6fcc64..3524e7d 100644 --- a/org.glite.lbjp-common.trio/interface/escape.h +++ b/org.glite.lbjp-common.trio/interface/escape.h @@ -68,9 +68,19 @@ char *glite_lbu_UnescapeXML(const char *); * \fn char *glite_lbu_EscapeSQL(const char *str) * \param str a string to escape * \return new (allocated) escaped string - * \briefin given string (SQL) escape all unwanted characters + * \brief in given string (SQL) escape all unwanted characters */ char *glite_lbu_EscapeSQL(const char *); + +/*! + * \fn char *glite_lbu_EscapeJSON(const char *str) + * \param str a string to escape + * \return new (allocated) escaped string + * \brief in given string (JSON) escape all unwanted characters + */ + +char *glite_lbu_EscapeJSON(const char *in); + #endif /* __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__ */ diff --git a/org.glite.lbjp-common.trio/src/escape.c b/org.glite.lbjp-common.trio/src/escape.c index e1d4aef..3077aa7 100644 --- a/org.glite.lbjp-common.trio/src/escape.c +++ b/org.glite.lbjp-common.trio/src/escape.c @@ -241,3 +241,72 @@ char *glite_lbu_EscapeSQL(const char *in) return out; } + +char *glite_lbu_EscapeJSON(const char *in) { + const char * tmp_in; + char *out = NULL; + int i,j,cnt; + + if (!in) return NULL; + + for (cnt = 0, tmp_in = in; *tmp_in; tmp_in++) { + switch (*tmp_in) { + case '"': + case '\\': + case '/': + case '\b': + case '\f': + case '\n': + case '\r': + case '\t': + cnt++; + break; + default: + if ((unsigned char)*tmp_in < 0x20) cnt += 6; + break; + } + } + + out = malloc(strlen(in)+1+cnt); + + for (i=j=0; in[i]; i++) { + switch (in[i]) { + case '"': + case '\\': + case '/': + out[j++] = '\\'; + out[j++] = in[i]; + break; + case '\b': + out[j++] = '\\'; + out[j++] = 'b'; + break; + case '\f': + out[j++] = '\\'; + out[j++] = 'f'; + break; + case '\n': + out[j++] = '\\'; + out[j++] = 'n'; + break; + case '\r': + out[j++] = '\\'; + out[j++] = 'r'; + break; + case '\t': + out[j++] = '\\'; + out[j++] = 't'; + break; + default: + if ((unsigned char)in[i] < 0x20) { + snprintf(out + j, 7, "\\u%04x", in[i]); + j += 6; + } else + out[j++] = in[i]; + break; + } + } + out[j] = 0; + + return out; +} diff --git a/org.glite.lbjp-common.trio/src/trio.c b/org.glite.lbjp-common.trio/src/trio.c index 7c939cf..a83063d 100644 --- a/org.glite.lbjp-common.trio/src/trio.c +++ b/org.glite.lbjp-common.trio/src/trio.c @@ -607,7 +607,7 @@ typedef struct { int base; int varsize; #ifdef QUALIFIER_ESCAPE - enum dg_escape { ESCAPE_NONE, ESCAPE_ULM, ESCAPE_XML, ESCAPE_SQL } escape; + enum dg_escape { ESCAPE_NONE, ESCAPE_ULM, ESCAPE_XML, ESCAPE_SQL, ESCAPE_JSON } escape; #endif int indexAfterSpecifier; union { @@ -1330,6 +1330,7 @@ TrioPreprocess(int type, case 'U': escape = ESCAPE_ULM; break; case 'X': escape = ESCAPE_XML; break; case 'S': escape = ESCAPE_SQL; break; + case 'J': escape = ESCAPE_JSON; break; default: return TRIO_ERROR_RETURN(TRIO_EINVAL,index); } break; @@ -2874,6 +2875,9 @@ TrioFormatProcess(trio_T *data, case ESCAPE_SQL: s = glite_lbu_EscapeSQL(parameters[i].data.string); break; + case ESCAPE_JSON: + s = glite_lbu_EscapeJSON(parameters[i].data.string); + break; case ESCAPE_NONE: s = strdup(parameters[i].data.string ? parameters[i].data.string : empty); break; diff --git a/org.glite.lbjp-common.trio/test/trio_test.cpp b/org.glite.lbjp-common.trio/test/trio_test.cpp index 5dc8b53..282ff6d 100644 --- a/org.glite.lbjp-common.trio/test/trio_test.cpp +++ b/org.glite.lbjp-common.trio/test/trio_test.cpp @@ -29,12 +29,14 @@ class TrioTest: public CppUnit::TestFixture CPPUNIT_TEST(escapeULM); CPPUNIT_TEST(escapeXML); CPPUNIT_TEST(escapeSQL); + CPPUNIT_TEST(escapeJSON); CPPUNIT_TEST_SUITE_END(); public: void escapeULM(); void escapeXML(); void escapeSQL(); + void escapeJSON(); }; void TrioTest::escapeULM() @@ -45,6 +47,8 @@ void TrioTest::escapeULM() std::cerr << e << std::endl; CPPUNIT_ASSERT_MESSAGE("escape ULM failed",!strcmp(e,r)); + + free(e); } void TrioTest::escapeXML() @@ -55,6 +59,8 @@ void TrioTest::escapeXML() std::cerr << e << std::endl; CPPUNIT_ASSERT_MESSAGE("escape XML failed",!strcmp(e,r)); + + free(e); } void TrioTest::escapeSQL() @@ -65,6 +71,20 @@ void TrioTest::escapeSQL() std::cerr << e << std::endl; CPPUNIT_ASSERT_MESSAGE("escape SQL failed",!strcmp(e,r)); + + free(e); +} + +void TrioTest::escapeJSON() { + char *e, *r = "START Jásoň doesn't like: \\\\\\n\\r\\b\\r\\t\\f and \\u001b END"; + int ret; + + ret = trio_asprintf(&e, "START %|Js END", "Jásoň doesn't like: \\\n\r\b\r\t\f and \x1B"); + std::cerr << e << std::endl; + + CPPUNIT_ASSERT_MESSAGE("escape JSON failed",ret > 0 && strcmp(e,r) == 0); + + free(e); } CPPUNIT_TEST_SUITE_REGISTRATION( TrioTest );