},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
.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
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
CREAM_ID
PAYLOAD_OWNER
ACCESS_RIGHTS
+ HISTORY
/;
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"
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;
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;
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;
*/
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;
}
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}
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
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
--- /dev/null
+#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 */
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.
#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! */
--- /dev/null
+/*
+@@@AUTO
+*/
+@@@LANG: C
+
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+
+#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;
+}
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)
{
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("");
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);
#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
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);
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
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,
\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:
\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).
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
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());
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
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}
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}
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}
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:
--- /dev/null
+#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
+
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
--- /dev/null
+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 )
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
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include <cclassad.h>
#include <glite/security/glite_gss.h>
#include "authz_policy.h"
+#include "server_state.h"
+#include "crypto.h"
struct action_name action_names[] = {
{ ADMIN_ACCESS, "ADMIN_ACCESS" },
{ READ_ALL, "READ_ALL" },
{ PURGE, "PURGE" },
{ GRANT_OWNERSHIP, "GRANT_OWNERSHIP" },
+ { READ_ANONYMIZED, "READ_ANONYMIZED" },
};
static int num_actions =
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;
+}
READ_ALL = 1 << 7,
PURGE = 1 << 8,
GRANT_OWNERSHIP = 1 << 9,
+ READ_ANONYMIZED = 1 << 10,
} authz_action;
typedef struct action_name {
int
blacken_fields(edg_wll_JobStat *, int flags);
+int
+anonymize_stat(edg_wll_Context, edg_wll_JobStat *);
+
#endif
--- /dev/null
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <openssl/sha.h>
+#include <openssl/ssl.h>
+#include <openssl/rand.h>
+
+#include <glite/lbu/log.h>
+#include <glite/lb/context-int.h>
+
+#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;
+}
--- /dev/null
+#ifndef GLITE_LB_CRYPTO_H
+#define GLITE_LB_CRYPTO_H
+
+#include <glite/lb/context.h>
+
+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
const char *dest_url,
const char *owner,
int flags,
- int authz_flags,
int expires,
const edg_wll_JobStat notif_job_stat)
{
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;
const char *dest_url,
const char *owner,
int flags,
- int authz_flags,
int expires,
const edg_wll_JobStat notif_job_stat);
/**
* 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
}
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,
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);
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;
}
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);
}
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;
+}
--- /dev/null
+#!/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
#include <assert.h>
#include "glite/lb/context-int.h"
+#include "glite/lb/events_json.h"
#include "glite/lbu/trio.h"
#include "glite/lbu/log.h"
#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 *);
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);
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];
/* 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; i<sizeof(jobc)/sizeof(jobc[0]); i++) free(jobc[i]);
goto err;
if (ret < 0) goto err;
err:
+ free(history);
free(ctx->p_instance); ctx->p_instance = NULL;
if ( nid ) edg_wll_NotifIdFree(nid);
free(jobq);
}
-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;
}
* 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);
}
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 )
const char *owner;
int flags;
time_t expire;
- int authz_flags;
size_t i;
char *ju;
char *row[4] = {};
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;
}
#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 *);
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;
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;
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 )
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 "
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
$self->{fields} = {}; # typ->{ name->StructField, ... }
$self->{order} = {};
$self->{flesh} = {};
+ $self->{terminal} = "";
bless $self;
}
next;
}
+ if (/^\@terminal\s+(\S+)$/) {
+ $self->{terminal} = $self->{terminal} . " " . $1;
+ next;
+ }
+
s/^\s*//;
my ($ftype,$fname,$comment) = split /\s+/,$_,3;
if ($ftype eq '_code_') {
} @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};
} @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;
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
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
@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
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
},
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'
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) {
'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 = (
'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
sub full
{
- my $short = shift;
+ my ($short) = @_;
my $subsys = $short;
$subsys =~ s/\..*//;
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:]]+)-(.+)/;
open V,"$path/version.properties"
or die "$path/version.properties: $!\n";
- while ($_ = <V>) {
+ $old_ = $_;
+ while (<V>) {
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";
}
sub get_description
{
- my $top_srcdir = shift;
+ my ($top_srcdir) = @_;
my $cvs_module = $top_srcdir;
my $package_description = "";
/;
@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";
}
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{$_}/";
}
}
- 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());
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"
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;
}
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 (<SRC>) {
if (/\@MODULE\@/) { s/\@MODULE\@/$full/g; }
if (/\@URL\@/) { s/\@URL\@/$package{url}/g; }
}
close SRC;
close DST;
+ $_ = $old_;
}
}
`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: $!";
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 = ();
* \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__ */
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;
+}
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 {
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;
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;
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()
std::cerr << e << std::endl;
CPPUNIT_ASSERT_MESSAGE("escape ULM failed",!strcmp(e,r));
+
+ free(e);
}
void TrioTest::escapeXML()
std::cerr << e << std::endl;
CPPUNIT_ASSERT_MESSAGE("escape XML failed",!strcmp(e,r));
+
+ free(e);
}
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 );