Merge branch_3_0_job_summaries (Job History) to HEAD.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 24 Jan 2012 14:27:04 +0000 (14:27 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 24 Jan 2012 14:27:04 +0000 (14:27 +0000)
62 files changed:
org.glite.jobid.api-c/configure
org.glite.jobid.api-cpp/configure
org.glite.jobid.api-java/configure
org.glite.lb.client-java/configure
org.glite.lb.client/configure
org.glite.lb.client/doc/glite-lb-notify.1
org.glite.lb.client/src/StatusAttrNames.pl
org.glite.lb.client/src/notify.c
org.glite.lb.common/Makefile
org.glite.lb.common/configure
org.glite.lb.common/interface/events_json.h [new file with mode: 0644]
org.glite.lb.common/interface/jobstat.h.T
org.glite.lb.common/src/events_json.c.T [new file with mode: 0644]
org.glite.lb.common/src/status.c.T
org.glite.lb.common/src/xml_conversions.c
org.glite.lb.common/test/parse.cpp.T
org.glite.lb.doc/configure
org.glite.lb.doc/src/LBAG-Installation.tex
org.glite.lb.doc/src/notify.tex
org.glite.lb.emi-lb/configure
org.glite.lb.harvester/configure
org.glite.lb.logger-msg/configure
org.glite.lb.logger-msg/src/activemq_cpp_plugin.cpp
org.glite.lb.logger/configure
org.glite.lb.server/Makefile
org.glite.lb.server/config/site-notif.conf [new file with mode: 0644]
org.glite.lb.server/configure
org.glite.lb.server/glite-lb-notif-keeper.cron [new file with mode: 0644]
org.glite.lb.server/interface/lb_authz.h
org.glite.lb.server/src/authz_policy.c
org.glite.lb.server/src/authz_policy.h
org.glite.lb.server/src/crypto.c [new file with mode: 0644]
org.glite.lb.server/src/crypto.h [new file with mode: 0644]
org.glite.lb.server/src/il_notification.c
org.glite.lb.server/src/il_notification.h
org.glite.lb.server/src/jobstat.c
org.glite.lb.server/src/lb_authz.c
org.glite.lb.server/src/notif-keeper.sh [new file with mode: 0644]
org.glite.lb.server/src/notif_match.c
org.glite.lb.server/src/notification.c
org.glite.lb.server/src/server_state.h
org.glite.lb.server/src/srv_purge.c
org.glite.lb.state-machine/configure
org.glite.lb.types/MultiStruct.pm
org.glite.lb.types/configure
org.glite.lb.types/status.T
org.glite.lb.utils/configure
org.glite.lb.ws-interface/configure
org.glite.lb.ws-test/configure
org.glite.lb.yaim/configure
org.glite.lbjp-common.db/configure
org.glite.lbjp-common.gsoap-plugin/configure
org.glite.lbjp-common.gss/configure
org.glite.lbjp-common.jp-interface/configure
org.glite.lbjp-common.log/configure
org.glite.lbjp-common.maildir/configure
org.glite.lbjp-common.server-bones/configure
org.glite.lbjp-common.trio/configure
org.glite.lbjp-common.trio/interface/escape.h
org.glite.lbjp-common.trio/src/escape.c
org.glite.lbjp-common.trio/src/trio.c
org.glite.lbjp-common.trio/test/trio_test.cpp

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