Merge from branch 3.0 to HEAD
authorZdeněk Šustr <sustr4@cesnet.cz>
Wed, 14 Dec 2011 10:44:22 +0000 (10:44 +0000)
committerZdeněk Šustr <sustr4@cesnet.cz>
Wed, 14 Dec 2011 10:44:22 +0000 (10:44 +0000)
145 files changed:
org.glite.jobid.api-c/Makefile
org.glite.jobid.api-c/configure
org.glite.jobid.api-c/project/ChangeLog
org.glite.jobid.api-c/project/version.properties
org.glite.jobid.api-cpp/Makefile
org.glite.jobid.api-cpp/configure
org.glite.jobid.api-cpp/project/ChangeLog
org.glite.jobid.api-cpp/project/version.properties
org.glite.jobid.api-java/Makefile
org.glite.jobid.api-java/configure
org.glite.jobid.api-java/project/ChangeLog
org.glite.jobid.api-java/project/version.properties
org.glite.jobid/project/version.properties
org.glite.lb.client-java/Makefile
org.glite.lb.client-java/configure
org.glite.lb.client-java/project/ChangeLog
org.glite.lb.client-java/project/version.properties
org.glite.lb.client-java/src/org/glite/lb/SeqCode.java
org.glite.lb.client/Makefile
org.glite.lb.client/configure
org.glite.lb.client/project/ChangeLog
org.glite.lb.client/project/version.properties
org.glite.lb.client/src/notification.c
org.glite.lb.common/Makefile
org.glite.lb.common/configure
org.glite.lb.common/project/ChangeLog
org.glite.lb.common/project/version.properties
org.glite.lb.doc/Makefile
org.glite.lb.doc/configure
org.glite.lb.doc/project/ChangeLog
org.glite.lb.doc/project/version.properties
org.glite.lb.doc/src/LBAG-Installation.tex
org.glite.lb.doc/src/LBTP-Tests.tex
org.glite.lb.doc/src/faq.tex
org.glite.lb.doc/src/versions.tex
org.glite.lb.emi-lb/Makefile
org.glite.lb.emi-lb/configure
org.glite.lb.harvester/Makefile
org.glite.lb.harvester/config/startup
org.glite.lb.harvester/configure
org.glite.lb.harvester/project/.pre [new file with mode: 0644]
org.glite.lb.harvester/project/ChangeLog
org.glite.lb.harvester/project/version.properties
org.glite.lb.harvester/src/harvester.c
org.glite.lb.logger-msg/Makefile
org.glite.lb.logger-msg/configure
org.glite.lb.logger-msg/project/ChangeLog
org.glite.lb.logger-msg/project/package.description
org.glite.lb.logger-msg/project/version.properties
org.glite.lb.logger/Makefile
org.glite.lb.logger/config/startup
org.glite.lb.logger/configure
org.glite.lb.logger/project/.pre [new file with mode: 0644]
org.glite.lb.logger/project/ChangeLog
org.glite.lb.logger/project/version.properties
org.glite.lb.logger/src/logd_proto.c
org.glite.lb.nagios/Makefile
org.glite.lb.nagios/configure
org.glite.lb.nagios/project/ChangeLog
org.glite.lb.nagios/project/version.properties
org.glite.lb.server/Makefile
org.glite.lb.server/config/glite-lb-lcas.logrotate [new file with mode: 0644]
org.glite.lb.server/config/glite-lb-proxy-purge.cron [new file with mode: 0644]
org.glite.lb.server/config/glite-lb-purge.logrotate [new file with mode: 0644]
org.glite.lb.server/config/glite-lb-server-purge.cron [new file with mode: 0644]
org.glite.lb.server/config/startup
org.glite.lb.server/configure
org.glite.lb.server/project/.pre [new file with mode: 0644]
org.glite.lb.server/project/ChangeLog
org.glite.lb.server/project/version.properties
org.glite.lb.server/src/bkserverd.c
org.glite.lb.server/src/lb_proto.c
org.glite.lb.state-machine/Makefile
org.glite.lb.state-machine/configure
org.glite.lb.state-machine/project/.postun [new file with mode: 0644]
org.glite.lb.state-machine/project/ChangeLog
org.glite.lb.state-machine/project/version.properties
org.glite.lb.state-machine/src/process_event.c
org.glite.lb.state-machine/src/process_event_cream.c
org.glite.lb.state-machine/src/process_event_file_transfer.c
org.glite.lb.types/Makefile
org.glite.lb.types/configure
org.glite.lb.types/project/ChangeLog
org.glite.lb.types/project/version.properties
org.glite.lb.utils/Makefile
org.glite.lb.utils/configure
org.glite.lb.utils/project/ChangeLog
org.glite.lb.utils/project/version.properties
org.glite.lb.ws-interface/Makefile
org.glite.lb.ws-interface/configure
org.glite.lb.ws-interface/project/ChangeLog
org.glite.lb.ws-interface/project/version.properties
org.glite.lb.ws-test/Makefile
org.glite.lb.ws-test/configure
org.glite.lb.ws-test/project/ChangeLog
org.glite.lb.ws-test/project/version.properties
org.glite.lb.yaim/Makefile
org.glite.lb.yaim/config/defaults/glite-lb.pre
org.glite.lb.yaim/config/functions/config_glite_lb.in
org.glite.lb.yaim/config/node-info.d/emi/glite-lb
org.glite.lb.yaim/configure
org.glite.lb.yaim/project/ChangeLog
org.glite.lb.yaim/project/version.properties
org.glite.lb/configure
org.glite.lb/project/version.properties
org.glite.lbjp-common.db/Makefile
org.glite.lbjp-common.db/configure
org.glite.lbjp-common.db/project/ChangeLog
org.glite.lbjp-common.db/project/version.properties
org.glite.lbjp-common.db/test/timezone.cpp
org.glite.lbjp-common.gsoap-plugin/Makefile
org.glite.lbjp-common.gsoap-plugin/configure
org.glite.lbjp-common.gsoap-plugin/project/ChangeLog
org.glite.lbjp-common.gsoap-plugin/project/version.properties
org.glite.lbjp-common.gss/Makefile
org.glite.lbjp-common.gss/configure
org.glite.lbjp-common.gss/project/ChangeLog
org.glite.lbjp-common.gss/project/version.properties
org.glite.lbjp-common.gss/src/glite_gss.c
org.glite.lbjp-common.jp-interface/Makefile
org.glite.lbjp-common.jp-interface/configure
org.glite.lbjp-common.jp-interface/project/ChangeLog
org.glite.lbjp-common.jp-interface/project/version.properties
org.glite.lbjp-common.log/Makefile
org.glite.lbjp-common.log/configure
org.glite.lbjp-common.log/project/ChangeLog
org.glite.lbjp-common.log/project/version.properties
org.glite.lbjp-common.maildir/Makefile
org.glite.lbjp-common.maildir/configure
org.glite.lbjp-common.maildir/project/ChangeLog
org.glite.lbjp-common.maildir/project/version.properties
org.glite.lbjp-common.server-bones/Makefile
org.glite.lbjp-common.server-bones/configure
org.glite.lbjp-common.server-bones/examples/cnt_example.c
org.glite.lbjp-common.server-bones/examples/run_test.sh [new file with mode: 0644]
org.glite.lbjp-common.server-bones/examples/srv_example.c
org.glite.lbjp-common.server-bones/interface/srvbones.h
org.glite.lbjp-common.server-bones/project/ChangeLog
org.glite.lbjp-common.server-bones/project/version.properties
org.glite.lbjp-common.server-bones/src/srvbones.c
org.glite.lbjp-common.trio/Makefile
org.glite.lbjp-common.trio/configure
org.glite.lbjp-common.trio/project/ChangeLog
org.glite.lbjp-common.trio/project/version.properties
org.glite.lbjp-common/project/version.properties

index f1de15c..c403eed 100644 (file)
@@ -68,7 +68,9 @@ base64_test: %: %.cpp compile
 clean:
        rm -rvf *.o *.lo .libs/ lib* *.c *.cpp *.h
        rm -vf base64_test base64_test.xml
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 stage:
        $(MAKE) install PREFIX=${stagedir}
@@ -84,4 +86,4 @@ install: ${LIB}
        ${COMPILE} -o $@ -c $< 
 
 
-.PHONY: default all compile check stage install clean
+.PHONY: default all compile check stage install clean distclean
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 82eeef4..20f6938 100644 (file)
@@ -63,3 +63,6 @@
 2.0.3-1
 - Handling error returned by gethostbyname() (Savannah Bug #67627)
 
+2.0.3-2
+- Module rebuilt
+
index 2196c4d..f1c52c6 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.jobid.api-c/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
 module.version=2.0.3
-module.age=1
+module.age=2
index ebb9ab0..7586462 100644 (file)
@@ -43,7 +43,9 @@ check: compile
 
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.cpp *.h
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 install: 
        mkdir -p ${DESTDIR}${PREFIX}${prefix}/include/${globalprefix}/${jobidprefix}
@@ -56,4 +58,4 @@ stage:
        ${COMPILE} -o $@ -c $< 
 
 
-.PHONY: default all compile check install clean
+.PHONY: default all compile check install clean distclean
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index a1099cf..42fb57e 100644 (file)
@@ -56,3 +56,6 @@
 1.1.3-1
 - experiments with staging in summary Makefile in etics-less build
 
+1.1.3-2
+- Module rebuilt
+
index 01957f0..9916424 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/glite/org.glite.jobid.api-cpp/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
 module.version=1.1.3
-module.age=1
+module.age=2
index 77bde52..9f11d6b 100644 (file)
@@ -19,6 +19,8 @@ check:
 
 clean:
        ${ant_prefix}/bin/ant ${ANT_ARGS} clean
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
 
-.PHONY: all compile stage install check clean
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
+.PHONY: all compile stage install check clean distclean
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 4ed0652..24d69a6 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/glite/org.glite.jobid.api-java/project/version.properties,v 1.5 2009/01/20 17:25:13 akrenek Exp $
 module.version=1.1.3
-module.age=6
+module.age=7
index f7d88ed..ae477cc 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.jobid.api-c/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
 module.version=2.0.4
-module.age=1
+module.age=2
index ebf358d..574bfc3 100644 (file)
@@ -103,6 +103,8 @@ install:
 
 clean:
        rm -rf build
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
 
-.PHONY: all compile compile-java-axis compile-java-lb compile-java-gen compile-java-lb2 build-jar build-c examples genevents genws check stage install clean
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
+.PHONY: all compile compile-java-axis compile-java-lb compile-java-gen compile-java-lb2 build-jar build-c examples genevents genws check stage install clean distclean
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 56c1dca..16f1e27 100644 (file)
@@ -75,3 +75,6 @@
 - Distinguish between generated and non-generated java files for FindBugs etics plugin
 - Classes for non-generated files are built in build/classes directory now
 
+1.1.7-1
+- Build on Debian 6 and SL 6
+
index 7a97fda..1cfd673 100644 (file)
@@ -30,6 +30,7 @@ public class SeqCode {
     public static final int PBS = 2;
     public static final int CONDOR = 4;
     public static final int CREAM = 4;
+    public static final int CREAMWMS = 5;
     
     private int[] seqCode = {0, 0, 0, 0, 0, 0, 0, 0, 0};
     private int type = 0;
@@ -66,6 +67,11 @@ public class SeqCode {
                                throw new IllegalArgumentException("SeqCode part");
                                seqCode[part-1]++;
                        break;
+               case CREAMWMS:
+                       if (src == null)
+                                throw new IllegalArgumentException("SeqCode part");
+                       seqCode[src.LRMS-1] += 1000; //XXX hardcoded to add 1000 to LRMS when WMS jobs goes through CREAM
+                       break;
                default: break;
                 }
     }
@@ -81,9 +87,10 @@ public class SeqCode {
        switch (type) {
                case NORMAL:
                case DUPLICATE:
+               case CREAMWMS:
                        if (!seqCodeString.matches("UI=\\d{1,}:NS=\\d{1,}:WM=\\d{1,}:BH=\\d{1,}:" +
                        "JSS=\\d{1,}:LM=\\d{1,}:LRMS=\\d{1,}:APP=\\d{1,}:LBS=\\d{1,}")) {
-                       throw new IllegalArgumentException("this is not correct sequence code");
+                       throw new IllegalArgumentException("this is not correct sequence code: " + seqCodeString);
                        }
                        
                        int currentPosition = 0;
@@ -112,6 +119,7 @@ public class SeqCode {
        switch (type) {
                case NORMAL:
                case DUPLICATE:
+               case CREAMWMS:
                        String tmp = Integer.toString(seqCode[0]);    
                        String output = "UI=";
                        output += "000000".substring(0, 6 - tmp.length ()) + tmp;
@@ -136,7 +144,7 @@ public class SeqCode {
                        tmp = Integer.toString(seqCode[5]);
                        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
                        output += ":";
-                       output += "LMRS=";
+                       output += "LRMS=";
                        tmp = Integer.toString(seqCode[6]);
                        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
                        output += ":";
index 726cc36..5b858f1 100644 (file)
@@ -244,14 +244,11 @@ notify: notify.o
 register_sandbox: %: %.o
        ${LINK} -o $@ $@.o ${default_clientlib} ${EXT_LIB}
 
-${TOOLS} ${EXAMPLES}: %: %.o
-       ${LINK} -o $@ $< ${default_clientlib} ${EXT_LIB} 
-
-${EXAMPLES_CL}: %: %.o
+${TOOLS} ${EXAMPLES} ${EXAMPLES_CL}: %: %.o
        ${LINK} -o $@ $< ${default_clientlib} ${default_commonlib} ${EXT_LIB} 
 
 ${EXAMPLES_CL_THR}: %: %.o
-       ${LINK} -o $@ $< ${default_clientlib_thr} ${default_commonlib_thr} ${EXT_LIB} 
+       ${LINK} -o $@ $< ${default_clientlib_thr} ${default_commonlib_thr} ${EXT_LIB} -lpthread
 
 ${TOOLS}: ${default_clientlib}
 
@@ -399,7 +396,9 @@ clean:
        rm -rvf ${lib_LTLIBRARIES} ${TOOLS} logevent  register_sandbox ${MAN_GZ} ${MAN8_GZ}
        rm -rvf ${EXAMPLES} ${EXAMPLES_CL} ${EXAMPLES_CL_THR} ${sh_PROGS}
        rm -f EventAttrNames.pl StatusAttrNames.pl uiwrap.T
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 check_version:
        ${CHECK_VERSION} ${stagedir}${prefix}/include/glite/lb/common_version.h
@@ -425,4 +424,4 @@ post-install-rpath:
                fi; \
        done
 
-.PHONY: default all compile examples check stage install clean check_version link post-install post-install-rpath
+.PHONY: default all compile examples check stage install clean distclean check_version link post-install post-install-rpath
index 2e34da2..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 8427200..eb401e1 100644 (file)
 - Finalized ETICS+rpath+libtool mock build problem, workaround inside ETICS configurations now
 - Fixing rpath problem in mock builds
 
+5.0.9-1
+- Examples linked explicitely with L&B common library
+- Reduce memory consumption on query (SB #46437)
+- Support Debian 6 build
+
index a1427f6..b20663d 100644 (file)
@@ -54,6 +54,7 @@ static const char* const request_headers[] = {
        NULL
 };
 
+static int zero = 0;
 
 
 
@@ -94,58 +95,74 @@ static void get_name_and_port(const char *address, char **name, int *port)
 }      
 
 
-static int my_bind(edg_wll_Context ctx, const char *name, int port, int *fd)
-{
-       int             sock;
-       int             ret;
-       struct addrinfo *ai;
-       struct addrinfo hints;
-       char            *portstr = NULL;
-
-       asprintf(&portstr, "%d", port);
-       if (portstr == NULL) {
-               return edg_wll_SetError(ctx, ENOMEM, "my_bind(): ENOMEM converting port number");
-       }
+static int daemon_listen(edg_wll_Context ctx, const char *name, char *port, int *conn_out) {
+       struct  addrinfo *ai;
+       struct  addrinfo hints;
+       int     conn;
+       int     gaie;
 
        memset (&hints, '\0', sizeof (hints));
        hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
        hints.ai_socktype = SOCK_STREAM;
+       hints.ai_family = AF_INET6;
 
-       ret = getaddrinfo (name, portstr, &hints, &ai);
-       free(portstr);
-       if (ret != 0) {
-               return edg_wll_SetError(ctx, EADDRNOTAVAIL, gai_strerror(ret));
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0 || ai == NULL) {
+               hints.ai_family = 0;
+               gaie = getaddrinfo (NULL, port, &hints, &ai);
+       }
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0) {
+               return edg_wll_SetError(ctx, EADDRNOTAVAIL, gai_strerror(gaie));
        }
        if (ai == NULL) {
                return edg_wll_SetError(ctx, EADDRNOTAVAIL, "no result from getaddrinfo");
        }
 
-       sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-       if (sock == -1) { 
+       conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+       if ( conn < 0 ) { 
                freeaddrinfo(ai);
-               return  edg_wll_SetError(ctx, errno, "socket() failed");
+               return edg_wll_SetError(ctx, errno, "socket() failed");
        }
+       //setsockopt(conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+       if (ai->ai_family == AF_INET6)
+               setsockopt(conn, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
 
-//     setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-       ret = bind(sock, ai->ai_addr, ai->ai_addrlen);
-       if (ret == -1) { 
+       if ( bind(conn, ai->ai_addr, ai->ai_addrlen) )
+       {
                edg_wll_SetError(ctx, errno, "bind() failed");
-               close(sock); 
+               close(conn); 
                freeaddrinfo(ai);
                return edg_wll_Error(ctx, NULL, NULL);
        }
-       freeaddrinfo(ai);
 
-       ret = listen(sock, CON_QUEUE);
-       if (ret == -1) { 
+       if ( listen(conn, CON_QUEUE) ) { 
                edg_wll_SetError(ctx, errno, "listen() failed");
-               close(sock); 
+               close(conn); 
                return edg_wll_Error(ctx, NULL, NULL);
        }
 
-       *fd = sock;
-       
-       return edg_wll_Error(ctx,NULL,NULL);
+       freeaddrinfo(ai);
+
+       *conn_out = conn;
+       return 0;
+}
+
+
+static int my_bind(edg_wll_Context ctx, const char *name, int port, int *fd)
+{
+       int             ret;
+       char            *portstr = NULL;
+
+       asprintf(&portstr, "%d", port);
+       if (portstr == NULL) {
+               return edg_wll_SetError(ctx, ENOMEM, "my_bind(): ENOMEM converting port number");
+       }
+       ret = daemon_listen(ctx, name, portstr, fd);
+       free(portstr);
+
+       return ret;
 }
        
 
index bddaa50..fe6edb2 100644 (file)
@@ -222,8 +222,8 @@ olddoc: generate events.tex status.tex
 
 install: 
        mkdir -p ${DESTDIR}${PREFIX}${prefix}/${libdir}
-       mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}/examples
-       ${INSTALL} -m 644 ${lib_LTLIBRARIES} ${DESTDIR}${PREFIX}${prefix}/${libdir}
+       mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
+       ${INSTALL} -m 755 ${lib_LTLIBRARIES} ${DESTDIR}${PREFIX}${prefix}/${libdir}
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
        ( cd ${top_srcdir}/project && ${INSTALL} -m 644 ChangeLog package.description package.summary ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} )
 #      cp -r C CPP ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
@@ -239,7 +239,9 @@ install:
 
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/ test_parse il_test parse.cpp events.tex status.tex
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.o: %.c
        ${COMPILE} ${CFLAGS} -c $<
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index d03a9de..00c3c4f 100644 (file)
 - Better detection of excessively long lines in HTTP requests.
 - Interpretting Messaging broker names and topic prefixes
 
+8.0.7-1
+- Typo fix in error output
+
index 0051699..1bd193b 100644 (file)
@@ -78,7 +78,9 @@ install:
 
 clean:
        rm -rvf LBUG* LBAG* LBDG* LBTP* events.tex status.tex ver.tex comment*
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 
 # dependencies:
@@ -132,4 +134,4 @@ LBTG.pdf: ${COMMON} \
        LBTG-Abstract.tex \
        LBAG-Troubleshooting.tex
 
-.PHONY: all clean doc
+.PHONY: default all generate doc stage check install clean distclean doc
index 2e34da2..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 3f0802c..9310af7 100644 (file)
 1.2.9-1
 - New FAQ on WMS and LB_SUPER_USERS
 
+1.2.10-1
+- Syntax fixed to work in both SL & Deb
+- New description of the Nagios probe
+- Typo fixes
+- Version info updated
+- New test for the Nagios probe
+- TestPlan sections reshuffled to match intended structure
+- More on messaging and related topics
+- New FAQ entry (Duplicate entry ... for key 1)
+- Architecture images updated - MSG added into the notification part
+
index edba09e..fe9a406 100644 (file)
@@ -1,3 +1,3 @@
 # $Header$
-module.version=1.2.9
+module.version=1.2.10
 module.age=1
index 76bb361..aa5c573 100644 (file)
@@ -55,6 +55,7 @@ glite-lb-state-machine & state machine and LB plugin for Job Provenance \\
 glite-lb-utils & auxiliary utilities \\
 glite-lb-ws-interface & web service interface \\
 glite-lb-yaim & YAIM initialization scripts for \LB (since \LBver{2.1}) \\
+glite-lb-nagios-plugins & Nagios plugin that checks the \LB server (since \LBver{3.1}) \\
 \end{tabularx}
 
 
index a7cba80..38b18f5 100644 (file)
@@ -436,23 +436,25 @@ artificially.
 \item Purge all data on the server with \path{glite-lb-purge}
 \item Log two sets of jobs, separated with delay of at least 60s so
 that the sets can be distinguished from each other.
-\item \label{purgel}
+\item \label{purge1}
 Using \code{edg\_wll\_JobLog} retrieve events of all the jobs
 \item \label{purge2}
 Purge the first set of jobs (by specifying appropriate timestamp),
 letting the server dump the purged events.
 \item \label{purge3} Purge the other set of jobs, also dumping the events.
 \item \label{purge4} Run purge once more.
+\item Check if purged jobs turned into zombies.
+\item In addition, check if a \emph{cron} task exists to run the \emph{purge} operation regularly and that it logs its output correctly.
 \end{enumerate}
 
 \how\ \ctblb{lb-test-purge.pl}
 
-\note\ The test includes artificial delays. Takes approx. 2\,minutes to finish.
+\note\ The test includes artificial delays. Takes approx. 3.5\,minutes to finish.
 
-\note\ This test is destructive to your data. You need to run it with the \texttt{--i-want-to-purge} option to confirm your intention. Also, you need to provide the \LB server \texttt{address:port} explicitly as an argument to rule out any confusion. 
+\note\ This test is destructive to your data. You need to run it with the \texttt{-{}-i-want-to-purge} option to confirm your intention. Also, you need to provide the \LB server \texttt{address:port} explicitly as an argument to rule out any confusion. 
 
-\result\ The data dumped in steps \ref{purge1}, \ref{purge2} should be the
-same as retrieved in~\ref{purgel}. The final purge invocation should
+\result\ Data dumped in steps \ref{purge1} and \ref{purge2} should be the
+same as retrieved in~\ref{purge1}. The final purge invocation should
 do nothing (i.e. nothing was left in the database).
 
 % test_purge
index b8e5d33..a9a7927 100644 (file)
@@ -51,7 +51,7 @@ Modify your \texttt{siteinfo.def}, specifying the DN of your WMS server in YAIM
 Then rerun YAIM: 
 \texttt{/opt/glite/yaim/bin/yaim -c -s site-info.def -n glite-LB}
 
-This will give your WMS adequate rights to perform its operations and requests (running purge, querying for statistics, etc.) but it will also grant it additional administrator rights (such as granting job ownership). On newer installations, the method explained in section \ref{FAQ:WMS_superusers_3_0_11} is preferrable.
+This will give your WMS adequate rights to perform its operations and requests (running purge, querying for statistics, etc.) but it will also grant it additional administrator rights (such as granting job ownership). On newer installations, the method explained in section \ref{FAQ:WMS_superusers_3_0_11} is preferable.
 
 \subsubsection{For \LBver {2.1 or higher}, without YAIM}
 
@@ -81,3 +81,16 @@ action "GET_STATISTICS" {
 }
 \end{verbatim}
 
+\subsection{\LB Server Throws ``Duplicate entry~\dots~for key~1'' Errors}
+
+The \LB server will occasionally report errors through \emph{syslog} saying,
+
+\begin{verbatim}
+ERROR CONTROL - ... : File exists (Duplicate entry '...' for key 1) 
+\end{verbatim}
+
+These error messages are caused by certain portions of code that take care of storing database records for keys, which may or may not already exist in the database, and do so by trying to insert the record first (hence the key violation) and modify the record if the insert fails. This has the unfortunate side effect of the unsuccessful insert being reported as an \texttt{ERROR} in the logging output.
+
+Unless you are experiencing trouble with the specific data entity\footnote{Usually a \emph{Job~ID}} referenced in the error message, it is safe to disregard.
+
+
index 9cdbe84..7d71ea9 100644 (file)
@@ -47,6 +47,7 @@ The complete \LB Documentation consists of the following parts:
 \begin{itemize}
 %\item \LBver{x.x}: included in the EMI-3 Monte Bianco release
 %\item \LBver{x.x}: included in the EMI-2 Matterhorn release
+\item \LBver{3.1}: an update for the EMI-1 Kebnekaise release
 \item \LBver{3.0}: included in the EMI-1 Kebnekaise release
 \item \LBver{2.1}: replacement for \LBver{2.0} in gLite 3.2,
 \item \LBver{2.0}: current stable version, in production as part of gLite 3.2,
index 13a1e41..c035bc2 100644 (file)
@@ -1,6 +1,6 @@
 top_srcdir=..
 stagedir=.
-package=glite-lb-yaim
+package=glite-lb-emi-lb
 version=0.0.0
 PREFIX=/opt/glite
 prefix=
@@ -18,6 +18,8 @@ stage:
 check:
 
 clean:
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
 
-.PHONY: default all check install stage clean
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
+.PHONY: default all check install stage clean distclean
index 96cd3e0..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -181,13 +175,19 @@ my %deps_type;
 my %buildroot;
 my (%etics_externs, %etics_projects);
 
+#
+# modules of the subsystems
+#
+# additional modules from $project{modules} are automatically added
+#
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim glite-LB logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
-       'px' => [ qw/proxyrenewal glite-PX myproxy-yaim/ ],
+       'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -211,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -232,7 +233,6 @@ my @keeparg = @ARGV;
 
 GetOptions @opts or die "Errors parsing command line\n";
 $prefix=~s/\/$//;
-$stagedir=~s/\/$// if ($stagedir);
 $root=~s/\/$//;
 $sysroot=~s/\/$//;
 if (not $sysconfdir) { $sysconfdir = $prefix eq '/usr' ? '/etc' : "$prefix/etc"; }
@@ -244,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -263,6 +271,13 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
+for $_ (keys %{$project{modules}}) {
+       push @{$lbmodules{$_}},@{$project{modules}{$_}};
+}
 
 
 if ($help) { usage(); exit 0; }
@@ -302,6 +317,7 @@ if (!$en && !$dis) { for (@nodes) { $enable_nodes{$_} = 1 if ($default_nodes{$_}
 for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
 
 $stagedir = $root unless $stagedir;
+$stagedir=~s/\/$// if ($stagedir);
 
 if ($mode eq 'build') { for my $ext (keys %externs) {
        if (defined $externs{$ext} and defined $externs{$ext}{withprefix}) { $externs{$ext}{prefix} = $externs{$ext}{withprefix}; }
@@ -342,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -415,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -438,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -460,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -481,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -492,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -515,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B/ ],
-       'lb.state-machine' => [ qw/classads libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
+       'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -530,8 +565,8 @@ BEGIN{
        'lbjp-common.jp-interface' => [ qw/cppunit:B log4c:B libtool:B/ ],
        'lbjp-common.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B libtool:B/ ],
        'lbjp-common.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares:B gsoap gsoapxx libtool:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B libtool:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
+       'jobid.api-c' =>  [ qw/cppunit:B libtool:B openssl:B/ ],
+       'jobid.api-cpp' =>  [ qw/cppunit:B libtool:B/ ],
        'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
        'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
         'jp.doc' => [],
@@ -539,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
-       'gridsite.devel' => [],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.devel' => [ qw// ],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -590,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -601,7 +643,7 @@ for my $jar (keys %need_jars) {
                lbjp-common.jp-interface
                jobid.api-c
                lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
+               lb.client lb.state-machine lb.types:B
        / ],
        'lb.ws-test' => [ qw/lbjp-common.gsoap-plugin lb.ws-interface/ ],
        'lb.ws-interface' => [ qw/lb.types:B/ ],
@@ -616,6 +658,11 @@ for my $jar (keys %need_jars) {
                lb.ws-test:R lb.harvester:R lb.yaim:R lb.client-java:R
                lb.logger-msg:R
        / ],
+       'lb.emi-lb' => [ qw/
+               lb.logger:R lb.server:R lb.utils:R lb.doc:R
+               lb.ws-test:R lb.harvester:R lb.yaim:R lb.client-java:R
+               lb.logger-msg:R
+       / ],
        'lbjp-common.db' => [ qw/lbjp-common.trio lbjp-common.log/ ],
        'lbjp-common.maildir' => [ qw// ],
        'lbjp-common.log' => [ qw// ],
@@ -654,19 +701,22 @@ for my $jar (keys %need_jars) {
        'jp.ws-interface' => [ qw// ],
 
        'gridsite.core' => [ qw// ],
-       'gridsite.commands' => [ qw/gridsite.shared:R/ ],
-       'gridsite.apache' => [ qw/gridsite.shared:R/ ],
-       'gridsite.shared' => [ qw// ],
-       'gridsite.devel' => [ qw/gridsite.shared:R/ ],
-       'gridsite.slashgrid' => [ qw/gridsite.shared:R/],
-       'gridsite.services' => [ qw/gridsite.shared:R/ ],
-       'gridsite.service-clients' => [ qw/gridsite.shared:R/ ],
-       'gridsite.gsexec' => [ qw// ],
+       'gridsite.commands' => [ qw/gridsite.core:B gridsite.shared:R/ ],
+       'gridsite.apache' => [ qw/gridsite.core:B gridsite.shared:R/ ],
+       'gridsite.shared' => [ qw/gridsite.core:B / ],
+       'gridsite.devel' => [ qw/gridsite.core:B gridsite.shared:R/ ],
+       'gridsite.slashgrid' => [ qw/gridsite.core:B gridsite.shared:R/],
+       'gridsite.services' => [ qw/gridsite.core:B gridsite.shared:R/ ],
+       'gridsite.service-clients' => [ qw/gridsite.core:B gridsite.shared:R/ ],
+       'gridsite.gsexec' => [ qw/gridsite.core:B/ ],
 
        'px.proxyrenewal' => [ qw// ],
        'px.glite-PX' => [qw/px.myproxy-yaim:R/],
+       'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -679,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -689,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -699,8 +750,15 @@ for my $ext (keys %deps_aux) {
        'px.myproxy-config' => [ qq/myproxy-config/ ], # in myproxy-config.spec
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
-       'lb.glite-LB' => [ qq/glite-LB/ ],
-       'px.glite-PX' => [ qq/glite-PX/ ],
+);
+
+%conflicts = (
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -710,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -719,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -730,8 +790,10 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
+# modules .............. additional modules in subsystems
 %projects = (
        glite => {
                etics_name => 'org.glite',
@@ -740,36 +802,57 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
-                       'lb.yaim' => [ qw/yaim_core:R/ ],
+                       'lb.yaim' => [ qw/yaim_core:R perl-LDAP:R/ ],
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
+               modules => {
+                       'lb' => [ qw/glite-LB/ ],
+                       'px' => [ qw/glite-PX/ ],
+               },
        },
 
        emi => {
@@ -779,74 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.bdii-core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
-                       'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
+               },
+               modules => {
+                       'lb' => [ qw/emi-lb/ ],
+                       'px' => [ qw/emi-px/ ],
                },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -863,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -880,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -922,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -979,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -988,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1003,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1060,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1071,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1083,47 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d \${moduleName}/.git && (cd \${moduleName}; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git \${moduleName})";
-       #$cmd{checkout} .= " && (cd \${moduleName}; git checkout ${tag})" unless ($conftag =~ /HEAD/);
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "make $prefix $flags rpm";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1149,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1182,6 +1420,13 @@ $package_description$package_summary$defprops};
                print C "package.obsoletes = $_\n";
                print C "package.replaces = $_\n";
        }
+       for (@{$conflicts{"$subsys.$module"}}) {
+               print C "package.conflicts = $_\n";
+       }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1192,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
                        }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                       }
+               }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1297,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1331,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 0bf9435..8c94ae3 100644 (file)
@@ -84,7 +84,9 @@ install: compile
 clean:
        rm -rfv *.o *.lo *.loT .libs/ manpage.links manpage.refs
        rm -rvf harvester harvester-dbg glite-lb-harvester.* startup
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 harvester: harvester.o
        ${LINK} -o $@ $+ ${LIBS}
@@ -102,4 +104,4 @@ harvester-dbg.o: harvester.c
        docbook2man $<
        mv $(@:.8=.1) $@
 
-.PHONY: default all compile debug check doc stage install clean
+.PHONY: default all compile debug check doc stage install clean distclean
index 2768571..44462cb 100755 (executable)
@@ -1,4 +1,12 @@
 #!/bin/sh
+### BEGIN INIT INFO
+# Provides: glite-lb-harvester
+# Description: L&B harvester deamon
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $remote_fs $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
 # chkconfig: 345 75 25
 #
 # Copyright (c) Members of the EGEE Collaboration. 2004-2010.
@@ -21,6 +29,7 @@ GLITE_LB_LOCATION=${GLITE_LB_LOCATION:-'@glite_prefix@'}
 GLITE_LB_LOCATION_ETC=${GLITE_LB_LOCATION_ETC:-'@glite_etc@'}
 GLITE_LB_LOCATION_VAR=${GLITE_LB_LOCATION_VAR:-'@glite_var@'}
 
+[ -f /etc/profile.d/grid-env.sh ] && . /etc/profile.d/grid-env.sh
 [ -f /etc/glite.conf ] && . /etc/glite.conf
 [ -f $GLITE_LB_LOCATION_ETC/glite-wms.conf ] && . $GLITE_LB_LOCATION_ETC/glite-wms.conf
 
@@ -185,7 +194,7 @@ cleanup()
 case x$1 in
        xstart) start;;
        xstop)  stop;;
-       xrestart) stop; start;;
+       xrestart|xforce-reload) stop; start;;
        xstatus) status;;
        xcleanup) cleanup;;
        x*)     echo usage: $0 start,stop,restart,status,cleanup >&2
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
diff --git a/org.glite.lb.harvester/project/.pre b/org.glite.lb.harvester/project/.pre
new file mode 100644 (file)
index 0000000..573de45
--- /dev/null
@@ -0,0 +1,7 @@
+getent group glite >/dev/null || groupadd -r glite
+getent passwd glite >/dev/null || useradd -r -g glite -d /var/glite -c "gLite user" glite
+
+mkdir -p /var/glite 2>/dev/null || true
+chown glite:glite /var/glite
+
+exit 0
index fc9229f..9206d62 100644 (file)
 1.1.6-3
 - Module rebuilt
 
+1.1.7-1
+- LSB-compliant init scripts
+
index f755a72..b23b447 100644 (file)
@@ -77,6 +77,8 @@ limitations under the License.
 
 #define RTM_SUMMARY_JOBS 100
 
+#define CON_QUEUE 10
+
 #define RTM_DB_TABLE_JOBS "jobs"
 #define RTM_DB_TABLE_LBS "lb20"
 #define DBPAR(N) ("$" (N))
@@ -1629,6 +1631,69 @@ void db_free_notifs() {
 }
 
 
+static int daemon_listen(thread_t *t, const char *name, char *port, int *conn_out) {
+       struct  addrinfo *ai;
+       struct  addrinfo hints;
+       char    pretty_addr[256];
+       int     conn;
+       int     gaie;
+       const int       zero = 0;
+       const int       one = 1;
+
+       memset (&hints, '\0', sizeof (hints));
+       hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
+       hints.ai_socktype = SOCK_STREAM;
+       hints.ai_family = AF_INET6;
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0 || ai == NULL) {
+               hints.ai_family = 0;
+               gaie = getaddrinfo (NULL, port, &hints, &ai);
+       }
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0) {
+               lprintf(t, ERR, "getaddrinfo: %s", gai_strerror (gaie));
+               return 1;
+       }
+       if (ai == NULL) {
+               lprintf(t, ERR, "getaddrinfo: no result");
+               return 1;
+       }
+
+       conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+       if ( conn < 0 ) {
+               lprintf(t, ERR, "socket(): %s", strerror(errno));
+               freeaddrinfo(ai);
+               return 1; 
+       }
+       lprintf(t, DBG, "socket created: %d", conn);
+       setsockopt(conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+       if (ai->ai_family == AF_INET6)
+               setsockopt(conn, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
+
+       if ( bind(conn, ai->ai_addr, ai->ai_addrlen) )
+       {
+               lprintf(t, ERR, "bind(%s): %s", port, strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1;
+       }
+
+       if ( listen(conn, CON_QUEUE) ) {
+               lprintf(t, ERR, "listen(): %s", strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1; 
+       }
+
+       freeaddrinfo(ai);
+
+       *conn_out = conn;
+       return 0;
+}
+
+
 void *notify_thread(void *thread_data) {
        int i, j, err;
        time_t now, bootstrap;
@@ -1641,10 +1706,7 @@ void *notify_thread(void *thread_data) {
        thread_t *t = (thread_t *)thread_data;
        edg_wll_Context ctx = NULL;
        int flags = 0;
-       struct addrinfo *ai = NULL;
-       struct addrinfo hints;
        char *portstr;
-       const int       one = 1;
 
        lprintf(t, DBG, "thread started");
 
@@ -1659,41 +1721,13 @@ void *notify_thread(void *thread_data) {
        if (config.key) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_KEY, config.key);
 
        // listen
-       memset(&hints, 0, sizeof hints);
-       hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
-       hints.ai_socktype = SOCK_STREAM;
        asprintf(&portstr, "%d", listen_port ? (listen_port + t->id) : 0);
        if (!portstr) {
                lprintf(t, ERR, "can't convert port number: ENOMEM");
                goto exit;
        }
-       err = getaddrinfo(NULL, portstr, &hints, &ai);
-       free(portstr); portstr = NULL;
-       if (err != 0) {
-               lprintf(t, ERR, "getaddrinfo() failed: %s", gai_strerror(err));
-               goto exit;
-       }
-       if (!ai) {
-               lprintf(t, ERR, "no result from getaddrinfo()");
+       if (daemon_listen(t, NULL, portstr, &sock) != 0)
                goto exit;
-       }
-       if ((sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol)) < 0) {
-               lprintf(t, ERR, "can't create socket: %s", strerror(errno));
-               goto exit;
-       }
-       lprintf(t, DBG, "socket created: %d", sock);
-
-       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-
-       if (bind(sock, ai->ai_addr, ai->ai_addrlen) != 0) {
-               lprintf(t, ERR, "can't bind socket: %s, port = %d", strerror(errno), listen_port ? listen_port + t->id : -1);
-               goto exit;
-       }
-       if (listen(sock, 10) != 0) {
-               lprintf(t, ERR, "can't listen on socket: %s", strerror(errno));
-               goto exit;
-       }
-       freeaddrinfo(ai); ai = NULL;
 
 #ifdef WITH_LBU_DB
        if (db_init(t, &t->dbctx) == 0)
@@ -1706,7 +1740,7 @@ void *notify_thread(void *thread_data) {
                            "SET ce=$1, queue=$2, ui=$3, state=$4, state_entered=$5, rtm_timestamp=$6, active=$7, state_changed=$8, registered=$9 WHERE jobid=$10 AND lb=$11", 
                        &t->updatecmd) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_JOBS DBAMP " "
                            "SET vo=$1 WHERE jobid=$2 AND lb=$3", 
-                       &t->updatecmd_vo) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_LBS DBAMP " "
+                       &t->updatecmd_vo) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_JOBS DBAMP " "
                            "SET rb=$1 WHERE jobid=$2 AND lb=$3",
                        &t->updatecmd_rb) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_LBS DBAMP " "
                            "SET monitored=$1 WHERE ip=$2",
@@ -2032,7 +2066,6 @@ cont:
 
 exit:  
        if (sock != -1) close(sock);
-       if (ai) freeaddrinfo(ai);
 //     for (i = 0; conditions[i]; i++) free(conditions[i]);
        if (t->nservers && quit != RTM_QUIT_PRESERVE && quit != RTM_QUIT_RELOAD) {
                for (i = 0; i < t->nservers; i++) {
index 8e7cc12..206eee1 100644 (file)
@@ -99,7 +99,6 @@ check:
 install:
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/${libdir}/glite-lb/examples
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
-       -mkdir -p ${DESTDIR}${PREFIX}${prefix}/etc/glite-lb
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/glite-lb
        -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
@@ -115,4 +114,6 @@ install:
 
 clean:
        rm -rvf .libs/ *.o *.lo ${PLUGIN_LIB} ${MAN_GZ} ${EXAMPLES}
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index d53fa6d..d90a2fe 100644 (file)
@@ -29,3 +29,6 @@
 1.0.6-1
 - cmsclient example extended
 
+1.0.7-1
+- Support build with gcc 4.4.4 (SL6)
+
index f6dd3e3..f2ca5cf 100644 (file)
@@ -1 +1 @@
-Plugin for delivering L&B notification messages into the messaging infrustructure.
+Plugin for delivering L&B notification messages into the messaging infrastructure.
index b9c7c4b..352c0e6 100644 (file)
@@ -3,7 +3,7 @@ top_srcdir=..
 stagedir=.
 globalprefix=glite
 lbprefix=lb
-package=glite-lb-client
+package=glite-lb-logger
 version=0.0.0
 PREFIX=/opt/glite
 prefix=
@@ -147,19 +147,19 @@ glite-lb-logd-perf-nofile: ${LOGD_NOBJS}
        ${LINK} -o $@ ${LOGD_NOBJS} ${COMMON_LIB}${default_nothrflavour} ${EXT_LIB}
 
 glite-lb-interlogd: ${INTERLOG_OBJS}
-       ${LINK} -o $@ ${INTERLOG_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB}
+       ${LINK} -o $@ ${INTERLOG_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
 
 glite-lb-notif-interlogd: ${INTERLOG_NOTIF_OBJS}
-       ${LINK} -export-dynamic -o $@ ${INTERLOG_NOTIF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} 
+       ${LINK} -export-dynamic -o $@ ${INTERLOG_NOTIF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
 
 glite-lb-interlogd-perf: ${INTERLOG_PERF_OBJS}
-       ${LINK} -o $@ ${INTERLOG_PERF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB}
+       ${LINK} -o $@ ${INTERLOG_PERF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
 
 glite-lb-interlogd-perf-empty: ${INTERLOG_EMPTY_OBJS}
-       ${LINK} -o $@ ${INTERLOG_EMPTY_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB}
+       ${LINK} -o $@ ${INTERLOG_EMPTY_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
 
 glite-lb-ws-interlogd: ${INTERLOG_WS_OBJS}
-       ${LINK} -o $@ ${INTERLOG_WS_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB}
+       ${LINK} -o $@ ${INTERLOG_WS_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
 
 #glite-lb-interlogd-perf-inline-empty: ${INTERLOG_INLINE_EMPTY_OBJS}
 #      ${LINK} -o $@ ${INTERLOG_INLINE_EMPTY_OBJS} \
@@ -244,4 +244,6 @@ il_test.o IlTestBase.o server_msgTest.o event_queueTest.o input_queue_socketTest
 
 clean:
        rm -rvf .libs/ *.o *.lo *.no ${LOGD} ${INTERLOGD} ${NOTIF_INTERLOGD} ${MAN_GZ} startup
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
index 9d7285f..2058325 100755 (executable)
@@ -1,4 +1,12 @@
 #!/bin/sh
+### BEGIN INIT INFO
+# Provides: glite-lb-locallogger
+# Description: L&B local logger and interlogger deamons
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $remote_fs $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
 # chkconfig: 345 76 24
 #
 # Copyright (c) Members of the EGEE Collaboration. 2004-2010.
@@ -21,6 +29,7 @@ GLITE_LB_LOCATION=${GLITE_LB_LOCATION:-'@glite_prefix@'}
 GLITE_LB_LOCATION_ETC=${GLITE_LB_LOCATION_ETC:-'@glite_etc@'}
 GLITE_LB_LOCATION_VAR=${GLITE_LB_LOCATION_VAR:-'@glite_var@'}
 
+[ -f /etc/profile.d/grid-env.sh ] && . /etc/profile.d/grid-env.sh
 [ -f /etc/glite.conf ] && . /etc/glite.conf
 [ -f $GLITE_LB_LOCATION_ETC/glite-wms.conf ] && . $GLITE_LB_LOCATION_ETC/glite-wms.conf
 
@@ -177,7 +186,7 @@ status()
 case x$1 in
        xstart) start;;
        xstop)  stop;;
-       xrestart) stop; start;;
+       xrestart|xforce-reload) stop; start;;
        xstatus) status;;
        x*)     echo usage: $0 start,stop,restart,status >&2
                exit 1;;
index 2e34da2..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
diff --git a/org.glite.lb.logger/project/.pre b/org.glite.lb.logger/project/.pre
new file mode 100644 (file)
index 0000000..bb8f272
--- /dev/null
@@ -0,0 +1,7 @@
+getent group glite >/dev/null || groupadd -r glite
+getent passwd glite >/dev/null || useradd -r -g glite -d /var/glite -c "gLite user" glite
+
+mkdir -p /var/glite /var/log/glite 2>/dev/null || true
+chown glite:glite /var/glite /var/log/glite
+
+exit 0
index 379e796..5c87cad 100644 (file)
 2.2.6-1
 - Further globus signal handler fixes
 
+2.2.7-1
+- LSB-compliant init scripts
+- interlogger now reports edg_wll_gss_watch_creds failures (SB 84694)
+
index 8d88f26..8eca13a 100644 (file)
@@ -39,6 +39,9 @@ limitations under the License.
 
 #include "logd_proto.h"
 
+#define CON_QUEUE 5
+
+static const int zero = 0;
 static const int one = 1;
 
 extern char* socket_path;
@@ -131,6 +134,64 @@ static int send_answer_back(edg_wll_GssConnection *con, int answer, struct timev
        }
 }
 
+static int daemon_listen(const char *name, char *port, int *conn_out) {
+       struct  addrinfo *ai;
+       struct  addrinfo hints;
+       int     conn;
+       int     gaie;
+
+       memset (&hints, '\0', sizeof (hints));
+       hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
+       hints.ai_socktype = SOCK_STREAM;
+       hints.ai_family = AF_INET6;
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0 || ai == NULL) {
+               hints.ai_family = 0;
+               gaie = getaddrinfo (NULL, port, &hints, &ai);
+       }
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0) {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (gaie));
+               return 1;
+       }
+       if (ai == NULL) {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no result");
+               return 1;
+       }
+
+       conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+       if ( conn < 0 ) { 
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "socket(): %s", strerror(errno));
+               freeaddrinfo(ai);
+               return 1; 
+       }
+       setsockopt(conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+       if (ai->ai_family == AF_INET6)
+               setsockopt(conn, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
+
+       if ( bind(conn, ai->ai_addr, ai->ai_addrlen) )
+       {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "bind(%s): %s", port, strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1;
+       }
+
+       if ( listen(conn, CON_QUEUE) ) { 
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "listen(): %s", strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1; 
+       }
+
+       freeaddrinfo(ai);
+
+       *conn_out = conn;
+       return 0;
+}
+
 /*
  *----------------------------------------------------------------------
  *
@@ -259,8 +320,6 @@ int do_listen(int port)
 {
        int                ret;
        int                sock;
-       struct addrinfo *ai;
-       struct addrinfo hints;
        char            *portstr = NULL;
 
        asprintf(&portstr, "%d", port);
@@ -269,45 +328,8 @@ int do_listen(int port)
                return -1;
        }
 
-       memset (&hints, '\0', sizeof (hints));
-       hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
-       hints.ai_socktype = SOCK_STREAM;
-
-       ret = getaddrinfo (NULL, portstr, &hints, &ai);
-       if (ret != 0) {
-               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (ret));
-               return -1;
-       }
-       if (ai == NULL) {
-               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no return");
+       if (daemon_listen(NULL, portstr, &sock) != 0)
                return -1;
-       }
-
-       sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-       if (sock == -1) { 
-               glite_common_log_SYS_ERROR("socket"); 
-               glite_common_log(LOG_CATEGORY_ACCESS,LOG_PRIORITY_ERROR,"do_listen(): error creating socket\n");
-               freeaddrinfo(ai);
-               return -1; 
-       }
-
-       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-       ret = bind(sock, ai->ai_addr, ai->ai_addrlen);
-       if (ret == -1) { 
-               glite_common_log_SYS_ERROR("bind"); 
-               glite_common_log(LOG_CATEGORY_ACCESS,LOG_PRIORITY_ERROR,"do_listen(): error binding socket\n");
-               freeaddrinfo(ai);
-               return -1; 
-       }
-       freeaddrinfo(ai);
-
-       ret = listen(sock, 5);
-       if (ret == -1) { 
-               glite_common_log_SYS_ERROR("listen"); 
-               glite_common_log(LOG_CATEGORY_ACCESS,LOG_PRIORITY_ERROR,"do_listen(): error listening on socket\n");
-               close(sock); 
-               return -1; 
-       }
 
        return sock;
 }
index 1676c7e..10fe7bb 100644 (file)
@@ -1,6 +1,6 @@
 top_srcdir=..
 stagedir=.
-package=emi-nagios-lb
+package=emi-lb-nagios-plugins
 version=0.0.0
 prefix=
 INSTALL=install
@@ -8,6 +8,8 @@ INSTALL=install
 -include Makefile.inc
 -include ${top_srcdir}/project/version.properties
 
+version=${module.version}
+
 install:
        mkdir -p ${DESTDIR}${PREFIX}/var/lib/grid-monitoring/emi.lb
        mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
index 62e2c66..16595a2 100755 (executable)
@@ -137,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -186,6 +187,7 @@ my %lbmodules = (
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -209,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -268,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -351,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -473,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -494,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -532,7 +553,7 @@ BEGIN{
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -553,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -610,7 +633,7 @@ for my $jar (keys %need_jars) {
                lb.utils:R
        / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -692,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -704,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -714,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -742,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -751,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -836,6 +864,7 @@ for my $ext (keys %deps_aux) {
                        'lbjp-common' => 'emi-',
                        'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -850,7 +879,7 @@ for my $ext (keys %deps_aux) {
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -863,28 +892,29 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
-                       sl6_x86_64_gcc444EPEL => {
+                       sl6_x86_64_gcc445EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
                        deb6_x86_64_gcc445 => {
-                               globus_essentials => 'libglobus-gssapi-gsi4',
-                               globus => 'libglobus-gssapi-gsi-dev',
-                               globus_proxy_utils=>'globus-proxy-utils',
-                               axis => 'libaxis-java',
-                               cares => 'libc-ares2',
-                               cppunit => 'libcppunit',
-                               expat => 'libexpat1',
-                               log4c => 'liblog4c3',
-                               curl => 'libcurl3',
-                               'mysql' => 'libmysqlclient6',
-                               'mysql-devel' => 'libmysqlclient-dev',
-                               libxslt => 'xsltproc',
-                               'jakarta-commons-codec' => 'libcommons-codec-java',
-                               'jakarta-commons-lang' => 'libcommons-lang-java',
-                               'tetex-latex' => 'texlive-latex-extra',
-                               'perl-LDAP' => 'libnet-ldap-perl',
-                               'fuse-lib' => 'libfuse2',
-                               'fuse' => 'fuse-utils',
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
                        },
                },
                etics_externs_devel => {
@@ -905,19 +935,21 @@ for my $ext (keys %deps_aux) {
                                jdk=>'java-devel',
                        },
                        deb6_x86_64_gcc445 => {
-                               cares => 'libc-ares-dev',
-                               cppunit => 'libcppunit-dev',
-                               expat => 'libexpat1-dev',
-                               libtar => 'libtar-dev',
-                               log4c => 'liblog4c-dev',
-                               postgresql => 'libpq-dev',
-                               curl => 'libcurl4-openssl-dev',
-                               libxml2 => 'libxml2-dev',
-                               openssl => 'libssl-dev',
-                               'tetex-latex' => 'texlive-latex-extra',
-                               libxslt=>'xsltproc',
-                               'httpd-devel' => 'apache2-prefork-dev',
-                               'fuse-devel' => 'libfuse-dev',
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
                        },
                },
                etics_projects => {
@@ -928,16 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
-                       sl6_x86_64_gcc444EPEL => 1,
-#                      deb6_x86_64_gcc445 => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -946,20 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               sl6_x86_64_gcc444 => { aprSuffix => '1' },
-               deb6_x86_64_gcc445 => { aprSuffix => '1.0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -996,7 +1033,11 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
@@ -1005,12 +1046,13 @@ sub mkinc
        my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -1109,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1118,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1192,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1203,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1215,61 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix, $make_patches);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
-                       }
-                       if ($project eq 'emi') {
-                               # proper dependency name in spec-file
-                               $cmd{checkout} .= " && \\
-       (cd \${moduleName}; test -f src/make-gridsite-spec.orig || sed -i.orig 's/\\(Buildrequires: libxml2-devel.*\\)/\\1,globus-gssapi-gsi-devel/' src/make-gridsite-spec)";
-                               $make_patches = "
-       diff -up make-gridsite-spec.orig make-gridsite-spec > \${moduleDir}/RPMTMP/SOURCES/emi-deps.patch
-       diff -up make-gridsite-spec.orig make-gridsite-spec > \${moduleDir}/src/tgz/emi-deps.patch";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $prefix $flags build";
-                       $cmd{clean} = "rm -rvf build.sh \${moduleDir}/src/tgz; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true $make_patches
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1296,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1335,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1345,8 +1437,6 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
@@ -1569,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 37a33d8..81cd54d 100644 (file)
@@ -1,3 +1,6 @@
 1.0.0-1
 - Initial version of the nagios module
 
+1.0.0-2
+- Module rebuilt
+
index 5cbe9ce..09bea31 100644 (file)
@@ -247,6 +247,9 @@ EXAMPLES=
 
 TESTS=test_coverage test_xml test_query_events test_soap_conv
 
+SCRIPTS=startup glite-lb-server-purge.cron glite-lb-proxy-purge.cron
+SCRIPTS_SRC=$(addprefix ${top_srcdir}/config/,${SCRIPTS})
+
 glite-lb-bkserverd: ${NSMAP} ${BKSERVER_OBJS}
        ${LINKXX} -o $@ ${BKSERVER_OBJS} ${BKSERVER_LIBS} -Wl,--export-dynamic
 
@@ -256,17 +259,16 @@ glite-lb-bkindex: ${INDEX_OBJS}
 glite-lb-mon-db: ${MONDB_OBJS}
        ${LINKXX} -o $@ ${MONDB_OBJS} ${MONDB_LIBS}
 
-compile: generate startup glite-lb-bkserverd glite-lb-bkindex glite-lb-mon-db ${STATIC_LIB_BK} ${LCAS_PLUGIN_LIB} ${MAN_GZ}
+compile: generate ${SCRIPTS} glite-lb-bkserverd glite-lb-bkindex glite-lb-mon-db ${STATIC_LIB_BK} ${LCAS_PLUGIN_LIB} ${MAN_GZ}
 
 generate: store.c index.c 
 
-startup: ${top_srcdir}/config/startup
+${SCRIPTS}: ${SCRIPTS_SRC}
        glite_var="${localstatedir}/glite"; \
        if echo "${localstatedir}" | grep 'glite'>/dev/null; then \
                glite_var="${localstatedir}"; \
        fi; \
-       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' -e "s:@glite_var@:$$glite_var:" $< > $@
-       chmod +x $@
+       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' -e "s:@glite_var@:$$glite_var:" ${top_srcdir}/config/$@ > $@
 
 check: compile test.xml test.query
        -echo check.query not complete yet
@@ -344,9 +346,11 @@ install:
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/bin ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb ${DESTDIR}${PREFIX}${sysconfdir}/init.d
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/man/man1
+       -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/man/man8
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/${libdir}
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/include/${globalprefix}/${lbprefix}
-       mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/man/man8
+       -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/logrotate.d
+       -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/cron.d
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
        ( cd ${top_srcdir}/project && ${INSTALL} -m 644 ChangeLog package.description package.summary ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} )
        ${INSTALL} -m 644 ${MAN_GZ} ${DESTDIR}${PREFIX}${prefix}/share/man/man1
@@ -364,6 +368,10 @@ install:
        ${INSTALL} -m 755 ${top_srcdir}/config/glite-lb-migrate_db2version20 ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb
 
        ${INSTALL} -m 755 startup ${DESTDIR}${PREFIX}${sysconfdir}/init.d/glite-lb-bkserverd
+       ${INSTALL} -m 644 glite-lb-server-purge.cron ${DESTDIR}${PREFIX}${sysconfdir}/cron.d/glite-lb-server-purge
+       ${INSTALL} -m 644 glite-lb-proxy-purge.cron ${DESTDIR}${PREFIX}${sysconfdir}/cron.d/glite-lb-proxy-purge
+       ${INSTALL} -m 644 ${top_srcdir}/config/glite-lb-purge.logrotate ${DESTDIR}${PREFIX}${sysconfdir}/logrotate.d/glite-lb-purge
+       ${INSTALL} -m 644 ${top_srcdir}/config/glite-lb-lcas.logrotate ${DESTDIR}${PREFIX}${sysconfdir}/logrotate.d/glite-lb-lcas
 
        mkdir -p ${DESTDIR}${PREFIX}${prefix}/include/${globalprefix}/${lbprefix}
        (cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${DESTDIR}${PREFIX}${prefix}/include/${globalprefix}/${lbprefix})
@@ -376,8 +384,11 @@ 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} startup
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+       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 test_xml.cpp
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.c: %.c.T
        rm -f $@
diff --git a/org.glite.lb.server/config/glite-lb-lcas.logrotate b/org.glite.lb.server/config/glite-lb-lcas.logrotate
new file mode 100644 (file)
index 0000000..c485adb
--- /dev/null
@@ -0,0 +1,5 @@
+/var/log/glite/glite-lb-lcas.log {
+       daily
+       rotate 4
+       missingok
+}
diff --git a/org.glite.lb.server/config/glite-lb-proxy-purge.cron b/org.glite.lb.server/config/glite-lb-proxy-purge.cron
new file mode 100644 (file)
index 0000000..016c0ef
--- /dev/null
@@ -0,0 +1 @@
+31 1 * * *     glite   ( test -f /etc/profile.d/grid-env.sh || exit 0; . /etc/profile.d/grid-env.sh; export GLITE_LB_EXPORT_BKSERVER=$HOSTNAME; export GLITE_LB_PURGE_TARGET_RUNTIME=84600s; export GLITE_LB_PURGE_OTHER_OPTIONS="$GLITE_LB_PURGE_OTHER_OPTIONS -x"; printf "`date "+\%b \%e \%T"` `hostname -s` glite-lb-export.sh: "; @glite_prefix@/sbin/glite-lb-export.sh ) >> /var/log/glite/glite-lb-proxy-purge.log 2>&1
diff --git a/org.glite.lb.server/config/glite-lb-purge.logrotate b/org.glite.lb.server/config/glite-lb-purge.logrotate
new file mode 100644 (file)
index 0000000..908dec0
--- /dev/null
@@ -0,0 +1,5 @@
+/var/log/glite/glite-lb-server-purge.log /var/log/glite/glite-lb-proxy-purge.log {
+       weekly
+       rotate 4
+       missingok
+}
\ No newline at end of file
diff --git a/org.glite.lb.server/config/glite-lb-server-purge.cron b/org.glite.lb.server/config/glite-lb-server-purge.cron
new file mode 100644 (file)
index 0000000..bb8e5ab
--- /dev/null
@@ -0,0 +1 @@
+1 1 * * *      glite   ( test -f /etc/profile.d/grid-env.sh || exit 0; . /etc/profile.d/grid-env.sh; export GLITE_LB_EXPORT_BKSERVER=$HOSTNAME; export GLITE_LB_PURGE_TARGET_RUNTIME=84600s; printf "`date "+\%b \%e \%T"` `hostname -s` glite-lb-export.sh: "; @glite_prefix@/sbin/glite-lb-export.sh ) >> /var/log/glite/glite-lb-server-purge.log 2>&1
index 40795d9..e71b1e2 100755 (executable)
@@ -1,4 +1,12 @@
 #!/bin/sh
+### BEGIN INIT INFO
+# Provides: glite-lb-bkserverd
+# Description: L&B server daemon
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $remote_fs $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
 # chkconfig: 345 75 25
 #
 # Copyright (c) Members of the EGEE Collaboration. 2004-2010.
@@ -22,6 +30,7 @@ GLITE_LB_LOCATION_VAR=${GLITE_LB_LOCATION_VAR:-'@glite_var@'}
 GLITE_LB_LOCATION_ETC=${GLITE_LB_LOCATION_ETC:-'@glite_etc@'}
 GLITE_JP_LOCATION=${GLITE_JP_LOCATION:-$GLITE_LB_LOCATION}
 
+[ -f /etc/profile.d/grid-env.sh ] && . /etc/profile.d/grid-env.sh
 [ -f /etc/glite.conf ] && . /etc/glite.conf
 [ -f $GLITE_LB_LOCATION_ETC/glite-wms.conf ] && . $GLITE_LB_LOCATION_ETC/glite-wms.conf
 
@@ -294,7 +303,7 @@ status()
 case x$1 in
        xstart) start;;
        xstop)  stop;;
-       xrestart) stop; start;;
+       xrestart|xforce-reload) stop; start;;
        xstatus) status;;
        x*)     echo usage: $0 start,stop,restart,status >&2
                exit 1;;
index 2e34da2..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
diff --git a/org.glite.lb.server/project/.pre b/org.glite.lb.server/project/.pre
new file mode 100644 (file)
index 0000000..bb8f272
--- /dev/null
@@ -0,0 +1,7 @@
+getent group glite >/dev/null || groupadd -r glite
+getent passwd glite >/dev/null || useradd -r -g glite -d /var/glite -c "gLite user" glite
+
+mkdir -p /var/glite /var/log/glite 2>/dev/null || true
+chown glite:glite /var/glite /var/log/glite
+
+exit 0
index aad65ab..044aa3e 100644 (file)
 2.2.9-1
 - Proper permission category for statistics
 
+2.2.10-1
+- LSB-compliant init scripts
+- Fixed typos in error output
+- interlogger now reports edg_wll_gss_watch_creds failures (SB 84694)
+- GACLparseEntry() defined in gridsite-gacl.h now (SB #69635)
+- Show notification registrations only to their owners (SB #86774)
+- Quit parent process silently on background purge (improvement for SB #77974)
+- Use fewer memory on server during query, when states are not requested (SB #46437)
+- Correct reaction to erroneous output from notif ID parsing (SB #86772)
+- Fix crash in web services on empty classads
+- Fix classads (in job status structure) when using in web services
+
index f3d4510..478dec5 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.lb.server/project/version.properties,v 1.185 2008/06/25 13:12:58 akrenek Exp $
-module.version=2.2.9
+module.version=2.2.10
 module.age=1
index 69de46c..c6b9055 100644 (file)
@@ -139,7 +139,6 @@ extern void _start (void), etext (void);
 int                                    enable_lcas = 0;
 int                                            debug  = 0;
 int                                            rgma_export = 0;
-static const int               one = 1;
 static int                             noAuth = 0;
 static int                             noIndex = 0;
 static int                             strict_locking = 0;
@@ -387,10 +386,7 @@ struct clnt_data_t {
 int main(int argc, char *argv[])
 {
        int                     i;
-       struct addrinfo *ai;
-       struct addrinfo hints;
        char *portstr = NULL;
-       int     gaie;
        int                                     opt, pidfile_forced = 0;
        char                            pidfile[PATH_MAX] = EDG_BKSERVERD_PIDFILE,
                                           *name;
@@ -609,11 +605,11 @@ int main(int argc, char *argv[])
 
        if (mode & SERVICE_SERVER) {
                if (check_mkdir(dumpStorage)){
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "Directory for dump files not redy!");
+                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "Directory for dump files not ready!");
                        exit(1);
                }
                if (check_mkdir(purgeStorage)){
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "Directory for purge files not redy!");
+                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "Directory for purge files not ready!");
                        exit(1);
                }
                if ( jpreg ) {
@@ -644,97 +640,21 @@ int main(int argc, char *argv[])
                glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_INFO, "Server address: %s:%d", fake_host, fake_port);
        }
 
-       memset (&hints, '\0', sizeof (hints));
-       hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
-       hints.ai_socktype = SOCK_STREAM;
-
        if ((mode & SERVICE_SERVER)) {
-               gaie = getaddrinfo (NULL, port, &hints, &ai);
-               if (gaie != 0) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (gaie));
-                       return 1;
-               }
-               if (ai == NULL) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no return");
+               if (glite_srvbones_daemon_listen(NULL, port, &service_table[SRV_SERVE].conn) != 0) {
                        return 1;
                }
-               service_table[SRV_SERVE].conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-               if ( service_table[SRV_SERVE].conn < 0 ) { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "socket()");
-                       freeaddrinfo(ai);
-                       return 1; 
-               }
-               setsockopt(service_table[SRV_SERVE].conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-               if ( bind(service_table[SRV_SERVE].conn, ai->ai_addr, ai->ai_addrlen) )
-               { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "bind(%s)", port);
-                       freeaddrinfo(ai);
-                       return 1;
-               }
-               freeaddrinfo(ai);
-               if ( listen(service_table[SRV_SERVE].conn, CON_QUEUE) ) { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "listen()");
-                       return 1; 
-               }
 
                asprintf(&portstr, "%d", atoi(port)+1);
-               gaie = getaddrinfo (NULL, portstr, &hints, &ai);
-               if (gaie != 0) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (gaie));
-                       return 1;
-               }
-               if (ai == NULL) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no return");
+               if (glite_srvbones_daemon_listen(NULL, portstr, &service_table[SRV_STORE].conn) != 0) {
+                       free(portstr);
                        return 1;
                }
-               service_table[SRV_STORE].conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-               if ( service_table[SRV_STORE].conn < 0 ) { 
-                       freeaddrinfo(ai);
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "socket()");
-                       return 1; 
-               }
-               setsockopt(service_table[SRV_STORE].conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-               if ( bind(service_table[SRV_STORE].conn, ai->ai_addr, ai->ai_addrlen) )
-               { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "bind(%s)", portstr);
-                       freeaddrinfo(ai);
-                       return 1;
-               }
-               freeaddrinfo(ai);
-               if ( listen(service_table[SRV_STORE].conn, CON_QUEUE) ) { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "listen()");
-                       return 1; 
-               }
                free(portstr); portstr = NULL;
 
 #ifdef GLITE_LB_SERVER_WITH_WS
-               gaie = getaddrinfo (NULL, ws_port, &hints, &ai);
-               if (gaie != 0) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (gaie));
-                       return 1;
-               }
-               if (ai == NULL) {
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no return");
-                       return 1;
-               }
-               service_table[SRV_WS].conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-               if ( service_table[SRV_WS].conn < 0 ) { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "socket()");
-                       freeaddrinfo(ai);
-                       return 1; 
-               }
-               setsockopt(service_table[SRV_WS].conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-               if ( bind(service_table[SRV_WS].conn, ai->ai_addr, ai->ai_addrlen) )
-               { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "bind(%s)",ws_port);
-                       freeaddrinfo(ai);
+               if (glite_srvbones_daemon_listen(NULL, ws_port, &service_table[SRV_WS].conn) != 0)
                        return 1;
-               }
-               freeaddrinfo(ai);
-               if ( listen(service_table[SRV_WS].conn, CON_QUEUE) ) { 
-                       glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "listen()");
-                       return 1; 
-               }
 #endif /* GLITE_LB_SERVER_WITH_WS */
 
                if (!server_cert || !server_key)
@@ -2033,4 +1953,3 @@ static int decrement_timeout(struct timeval *timeout, struct timeval before, str
         if ( ((*timeout).tv_sec < 0) || (((*timeout).tv_sec == 0) && ((*timeout).tv_usec == 0)) ) return(1);
         else return(0);
 }
-
index e8c8065..3460791 100644 (file)
@@ -263,10 +263,14 @@ static int getNotifInfo(edg_wll_Context ctx, char *notifId, notifInfo *ni){
         glite_lbu_Statement notif = NULL;
        char *notifc[4] = {NULL, NULL, NULL, NULL};
 
+       char *can_peername = edg_wll_gss_normalize_subj(ctx->peerName, 0);
+        char *userid = strmd5(can_peername, NULL);
+
        trio_asprintf(&q, "select destination, valid, conditions, flags "
                 "from notif_registrations "
-                "where notifid='%s'",
-                notifId);
+                "where notifid='%s' "
+               "and userid='%s'",
+                notifId, userid);
        glite_common_log_msg(LOG_CATEGORY_LB_SERVER_DB, LOG_PRIORITY_DEBUG, q);
        if (edg_wll_ExecSQL(ctx, q, &notif) < 0) goto err;
         free(q); q = NULL;
@@ -285,6 +289,7 @@ static int getNotifInfo(edg_wll_Context ctx, char *notifId, notifInfo *ni){
        return 0;
 
 err:
+       free(can_peername);
        return  -1;
 }
 
@@ -782,6 +787,7 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx,
                         *pom = 0;
                        if (getNotifInfo(ctx, strrchr(pomCopy, ':')+1, &ni)){
                                ret = HTTP_NOTFOUND;
+                               edg_wll_SetError(ctx, ENOENT, "Notification ID not know.");
                                goto err;
                        }
                        free(pomCopy);
index fef41c3..18eb1c2 100644 (file)
@@ -116,7 +116,9 @@ install:
 clean:
        rm -rvf .libs *.o *.lo ${PLUGIN_LIB} ${MACHINE_LIB}
        rm -rfv job_attrs.h job_attrs2.h lb-job-attrs2.xsd glite-jpis-config.xml
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 check:
        @echo No tests yet
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
diff --git a/org.glite.lb.state-machine/project/.postun b/org.glite.lb.state-machine/project/.postun
new file mode 100644 (file)
index 0000000..8b0c822
--- /dev/null
@@ -0,0 +1 @@
+/sbin/ldconfig
index 740508b..45f4642 100644 (file)
@@ -98,3 +98,6 @@
 1.2.2-5
 - Module rebuilt
 
+1.2.3-1
+- Compile state machine as shared library
+
index 694f9fa..c6b3060 100644 (file)
@@ -46,6 +46,7 @@ static int processEvent_glite(intJobStat *js, edg_wll_Event *e, int ev_seq, int
 int processEvent_PBS(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring);
 int processEvent_Condor(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring);
 int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring);
+int processData_Cream(intJobStat *js, edg_wll_Event *e);
 int processEvent_FileTransfer(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring);
 int processEvent_FileTransferCollection(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring);
 
@@ -331,6 +332,9 @@ static int processEvent_glite(intJobStat *js, edg_wll_Event *e, int ev_seq, int
                res = RET_LATE;
        }
 
+       if (e->any.source == EDG_WLL_SOURCE_CREAM_EXECUTOR || e->any.source == EDG_WLL_SOURCE_CREAM_INTERFACE){
+                processData_Cream(js, e);
+        }
 
        switch (e->any.type) {
                case EDG_WLL_EVENT_TRANSFER:
@@ -1004,6 +1008,120 @@ static int processEvent_glite(intJobStat *js, edg_wll_Event *e, int ev_seq, int
                        ignore_seq_code = 1;
                        break;
 
+/************************************ CREAM events ****************************/
+               case EDG_WLL_EVENT_CREAMSTART:
+                       break;
+
+               case EDG_WLL_EVENT_CREAMPURGE:
+                       break;
+
+               case EDG_WLL_EVENT_CREAMACCEPTED:
+                        break;
+
+               case EDG_WLL_EVENT_CREAMSTORE:
+                       if (USABLE(res, strict)) {
+                               switch (e->CREAMStore.command) {
+                                       case EDG_WLL_CREAMSTORE_CMDSTART:
+                                               if (e->CREAMStore.result == EDG_WLL_CREAMSTORE_OK) {
+                                                       js->pub.state = EDG_WLL_JOB_WAITING;
+                                                       js->pub.cream_state = EDG_WLL_STAT_PENDING;
+                                               }
+                                               break;
+                                        case EDG_WLL_CREAMSTORE_CMDSUSPEND:
+                                               if (e->CREAMStore.result == EDG_WLL_CREAMSTORE_OK) {
+                                                        js->pub.suspended = 1;
+                                                }
+                                               break;
+                                        case EDG_WLL_CREAMSTORE_CMDRESUME:
+                                                if (e->CREAMStore.result == EDG_WLL_CREAMSTORE_OK) {
+                                                        js->pub.suspended = 0;
+                                                }
+                                                break;
+                                       default:
+                                               break;
+                               }
+                               rep_cond(js->pub.cream_reason, e->CREAMStore.reason);
+                               rep_cond(js->pub.reason, e->CREAMStore.reason);
+                       }
+                       break;
+               case EDG_WLL_EVENT_CREAMCALL:
+                       if (e->any.source == EDG_WLL_SOURCE_CREAM_EXECUTOR &&
+                                e->CREAMCall.callee == EDG_WLL_SOURCE_LRMS &&
+                                e->CREAMCall.command == EDG_WLL_CREAMCALL_CMDSTART &&
+                                e->CREAMCall.result == EDG_WLL_CREAMCALL_OK)
+                       {
+                               if (USABLE(res, strict)) {
+                                        // BLAH -> LRMS
+                                       js->pub.state = EDG_WLL_JOB_SCHEDULED;
+                                       js->pub.cream_state = EDG_WLL_STAT_IDLE;
+                                       rep_cond(js->pub.cream_reason, e->CREAMCall.reason);
+                                       rep_cond(js->pub.reason, e->CREAMCall.reason);
+                               }
+                       }
+                       if (e->CREAMCall.command == EDG_WLL_CREAMCALL_CMDCANCEL &&
+                                e->CREAMCall.result == EDG_WLL_CREAMCALL_OK)
+                        {
+                                if (USABLE(res, strict)){
+                                        js->pub.cream_cancelling = 1;
+                                        js->pub.cancelling = 1;
+                                        rep_cond(js->pub.cream_reason, e->CREAMCall.reason);
+                                       rep_cond(js->pub.reason, e->CREAMCall.reason);
+                                }
+                        }
+                       break;
+               case EDG_WLL_EVENT_CREAMCANCEL:
+                       if (USABLE(res, strict)) {
+                                if (e->CREAMCancel.status_code == EDG_WLL_CANCEL_DONE) {
+                                        js->pub.state = EDG_WLL_JOB_CANCELLED;
+                                        js->pub.cream_state = EDG_WLL_STAT_ABORTED;
+                                }
+                               rep(js->pub.cream_reason, e->CREAMCancel.reason);
+                                rep(js->pub.reason, e->CREAMCancel.reason);
+                        }
+                        break;
+               case EDG_WLL_EVENT_CREAMABORT:
+                        if (USABLE(res, strict)) {
+                                js->pub.state = EDG_WLL_JOB_ABORTED;
+                                js->pub.cream_state = EDG_WLL_STAT_ABORTED;
+                               rep(js->pub.cream_reason, e->CREAMAbort.reason);
+                                rep(js->pub.reason, e->CREAMAbort.reason);
+                        }
+                        break;
+               case EDG_WLL_EVENT_CREAMSTATUS:
+                        if (USABLE(res, strict) && e->CREAMStatus.result == EDG_WLL_CREAMSTATUS_DONE)
+                        {
+                                switch (js->pub.cream_state = edg_wll_StringToCreamStat(e->CREAMStatus.new_state))
+                                {
+                                        case EDG_WLL_STAT_REGISTERED:
+                                        case EDG_WLL_NUMBER_OF_CREAM_STATES:
+                                                break;
+
+                                        case EDG_WLL_STAT_PENDING: js->pub.state = EDG_WLL_JOB_WAITING; break;
+                                        case EDG_WLL_STAT_IDLE: js->pub.state = EDG_WLL_JOB_SCHEDULED; break;
+                                        case EDG_WLL_STAT_RUNNING:
+                                                js->pub.state = EDG_WLL_JOB_RUNNING;
+                                                js->pub.jw_status = EDG_WLL_STAT_WRAPPER_RUNNING;
+                                                break;
+                                        case EDG_WLL_STAT_REALLY_RUNNING:
+                                                js->pub.state = EDG_WLL_JOB_RUNNING;
+                                                js->pub.jw_status = EDG_WLL_STAT_PAYLOAD_RUNNING;
+                                                break;
+                                        case EDG_WLL_STAT_HELD: /* TODO */ break;
+                                        case EDG_WLL_STAT_DONE_OK:
+                                                js->pub.state = EDG_WLL_JOB_DONE;
+                                                js->pub.done_code = EDG_WLL_STAT_OK;
+                                                js->pub.cream_done_code = EDG_WLL_STAT_OK;
+                                                break;
+                                        case EDG_WLL_STAT_DONE_FAILED:
+                                                js->pub.state = EDG_WLL_JOB_DONE;
+                                                js->pub.done_code = EDG_WLL_STAT_FAILED;
+                                                js->pub.cream_done_code = EDG_WLL_STAT_FAILED;
+                                                break;
+                                        case EDG_WLL_STAT_ABORTED: js->pub.state = EDG_WLL_JOB_ABORTED; break;
+                                }
+                        }
+                        break;
+
                default:
                        goto bad_event;
                        break;
index 253c055..1502fea 100644 (file)
@@ -48,6 +48,89 @@ static char *cream_states[EDG_WLL_NUMBER_OF_CREAM_STATES];
 #define rep(a,b) { free(a); a = (b == NULL) ? NULL : strdup(b); }
 #define rep_cond(a,b) { if (b) { free(a); a = strdup(b); } }
 
+int processData_Cream(intJobStat *js, edg_wll_Event *e)
+{
+       int                     res = RET_OK;
+
+       switch (e->any.type) {
+               case EDG_WLL_EVENT_REGJOB:
+                       if (USABLE_DATA(res)) {
+                               rep_cond(js->pub.cream_owner, js->pub.owner);
+                               rep_cond(js->pub.jdl, e->regJob.jdl);
+                               rep_cond(js->pub.cream_jdl, e->regJob.jdl);
+                               rep_cond(js->pub.cream_endpoint, e->regJob.ns);
+                               rep_cond(js->pub.destination, e->regJob.ns);
+                               rep_cond(js->pub.network_server, e->regJob.ns);
+                       }
+                       break;
+               case EDG_WLL_EVENT_CREAMSTART:
+                       // nothing to be done
+                       break;
+               case EDG_WLL_EVENT_CREAMPURGE:
+                       // no state transition
+                       break;
+               case EDG_WLL_EVENT_CREAMACCEPTED:
+                       if (USABLE(res)){
+                               rep(js->pub.cream_id, e->CREAMAccepted.local_jobid);
+                               rep(js->pub.globusId, e->CREAMAccepted.local_jobid);
+                       }
+                       break;
+               case EDG_WLL_EVENT_CREAMSTATUS:
+                       if (USABLE(res) && e->CREAMStatus.result == EDG_WLL_CREAMSTATUS_DONE)
+                       {
+                               if (e->CREAMStatus.exit_code && strcmp(e->CREAMStatus.exit_code, "N/A"))
+                               {
+                                       js->pub.cream_exit_code = atoi(e->CREAMStatus.exit_code);
+                                       js->pub.exit_code = atoi(e->CREAMStatus.exit_code);
+                               }
+                               if (e->CREAMStatus.worker_node){ /*XXX should never be false */
+                                       if (js->pub.cream_node) 
+                                               free(js->pub.cream_node);
+                                       js->pub.cream_node = strdup(e->CREAMStatus.worker_node);
+                                       if (js->pub.ce_node)
+                                               free(js->pub.ce_node);
+                                       js->pub.ce_node = strdup(e->CREAMStatus.worker_node);
+                               }
+                               if (e->CREAMStatus.LRMS_jobid){ /*XXX should never be false */
+                                       if (js->pub.cream_lrms_id) 
+                                               free(js->pub.cream_lrms_id);
+                                       js->pub.cream_lrms_id = strdup(e->CREAMStatus.LRMS_jobid);
+                                       if (js->pub.localId)
+                                               free(js->pub.localId);
+                                       js->pub.localId = strdup(e->CREAMStatus.LRMS_jobid);
+                               }
+                               if (e->CREAMStatus.failure_reason){
+                                       if (js->pub.cream_failure_reason) 
+                                               free(js->pub.cream_failure_reason);
+                                       js->pub.cream_failure_reason = strdup(e->CREAMStatus.failure_reason);
+                                       if (js->pub.failure_reasons){
+                                               char *glued_reasons;
+                                               asprintf(&glued_reasons,"%s\n", e->CREAMStatus.failure_reason);
+                                               rep(js->pub.failure_reasons, glued_reasons);
+                                       }
+                                       else 
+                                               asprintf(&(js->pub.failure_reasons),"%s", e->CREAMStatus.failure_reason);
+                               }
+                       }
+                       break;
+
+               case EDG_WLL_EVENT_USERTAG:
+                       if (USABLE_DATA(res)) {
+                               if (e->userTag.name != NULL && e->userTag.value != NULL) {
+                                       add_taglist(e->userTag.name, e->userTag.value, e->any.seqcode, js);
+                               }
+                       }
+                       break;
+
+               default:
+                       break;
+       }
+
+       if (! js->pub.location) js->pub.location = strdup("this is CREAM");
+
+       return RET_OK;
+}
+
 int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict, char **errstring)
 {
        edg_wll_JobStatCode     old_state = js->pub.state;
@@ -71,14 +154,6 @@ int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict,
                                js->pub.state = EDG_WLL_JOB_SUBMITTED;
                                js->pub.cream_state = EDG_WLL_STAT_REGISTERED;
                        }
-                       if (USABLE_DATA(res)) {
-                               rep_cond(js->pub.cream_owner, js->pub.owner);
-                               rep_cond(js->pub.jdl, e->regJob.jdl);
-                               rep_cond(js->pub.cream_jdl, e->regJob.jdl);
-                               rep_cond(js->pub.cream_endpoint, e->regJob.ns);
-                               rep_cond(js->pub.destination, e->regJob.ns);
-                               rep_cond(js->pub.network_server, e->regJob.ns);
-                       }
                        break;
                case EDG_WLL_EVENT_CREAMSTART:
                        // nothing to be done
@@ -87,10 +162,6 @@ int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict,
                        // no state transition
                        break;
                case EDG_WLL_EVENT_CREAMACCEPTED:
-                       if (USABLE(res)){
-                               rep(js->pub.cream_id, e->CREAMAccepted.local_jobid);
-                               rep(js->pub.globusId, e->CREAMAccepted.local_jobid);
-                       }
                        break;
                case EDG_WLL_EVENT_CREAMSTORE:
                        if (USABLE(res)) {
@@ -206,48 +277,10 @@ int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict,
                                                break;
                                        case EDG_WLL_STAT_ABORTED: js->pub.state = EDG_WLL_JOB_ABORTED; break;
                                }
-                               if (e->CREAMStatus.exit_code && strcmp(e->CREAMStatus.exit_code, "N/A"))
-                               {
-                                       js->pub.cream_exit_code = atoi(e->CREAMStatus.exit_code);
-                                       js->pub.exit_code = atoi(e->CREAMStatus.exit_code);
-                               }
-                               if (e->CREAMStatus.worker_node){ /*XXX should never be false */
-                                       if (js->pub.cream_node) 
-                                               free(js->pub.cream_node);
-                                       js->pub.cream_node = strdup(e->CREAMStatus.worker_node);
-                                       if (js->pub.ce_node)
-                                               free(js->pub.ce_node);
-                                       js->pub.ce_node = strdup(e->CREAMStatus.worker_node);
-                               }
-                               if (e->CREAMStatus.LRMS_jobid){ /*XXX should never be false */
-                                       if (js->pub.cream_lrms_id) 
-                                               free(js->pub.cream_lrms_id);
-                                       js->pub.cream_lrms_id = strdup(e->CREAMStatus.LRMS_jobid);
-                                       if (js->pub.localId)
-                                               free(js->pub.localId);
-                                       js->pub.localId = strdup(e->CREAMStatus.LRMS_jobid);
-                               }
-                               if (e->CREAMStatus.failure_reason){
-                                       if (js->pub.cream_failure_reason) 
-                                               free(js->pub.cream_failure_reason);
-                                       js->pub.cream_failure_reason = strdup(e->CREAMStatus.failure_reason);
-                                       if (js->pub.failure_reasons){
-                                               char *glued_reasons;
-                                               asprintf(&glued_reasons,"%s\n", e->CREAMStatus.failure_reason);
-                                               rep(js->pub.failure_reasons, glued_reasons);
-                                       }
-                                       else 
-                                               asprintf(&(js->pub.failure_reasons),"%s", e->CREAMStatus.failure_reason);
-                               }
                        }
                        break;
 
                case EDG_WLL_EVENT_USERTAG:
-                       if (USABLE_DATA(res)) {
-                               if (e->userTag.name != NULL && e->userTag.value != NULL) {
-                                       add_taglist(e->userTag.name, e->userTag.value, e->any.seqcode, js);
-                               }
-                       }
                        break;
 
                default:
@@ -266,6 +299,7 @@ int processEvent_Cream(intJobStat *js, edg_wll_Event *e, int ev_seq, int strict,
        }
        if (! js->pub.location) js->pub.location = strdup("this is CREAM");
 
+       processData_Cream(js, e);
 
        return RET_OK;
 }
index e4e03d5..a8aa872 100644 (file)
@@ -136,6 +136,13 @@ int processEvent_FileTransfer(intJobStat *js, edg_wll_Event *e, int ev_seq, int
 #endif
                        }
                        break;
+               case EDG_WLL_EVENT_RESUBMISSION:
+                        if (USABLE(res)) {
+                                if (e->resubmission.result == EDG_WLL_RESUBMISSION_WONTRESUB) {
+                                        rep(js->pub.reason, e->resubmission.reason);
+                                }
+                        }
+                        break;
                default:
                        break;
        }
index 34b64dc..7f42572 100644 (file)
@@ -27,8 +27,10 @@ install: compile
        install -m 755 ${top_srcdir}/check_version.pl ${DESTDIR}${PREFIX}${prefix}/sbin/glite-lb-check_version.pl
        
 clean:
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 check:
 
-.PHONY: default compile stage install check clean
+.PHONY: default compile stage install check clean distclean
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index ae9d8f6..2878ddd 100644 (file)
@@ -79,3 +79,6 @@
 1.2.3-5
 - Module rebuilt
 
+1.2.3-6
+- Module rebuilt
+
index 0ef00c1..b447860 100644 (file)
@@ -120,7 +120,9 @@ install:
 
 clean:
        rm -rfv ${ALLUTILS} ${MAN_GZ} ${MAN8_GZ} *.lo *.o .libs/
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.o: %.c
        ${COMPILE} -c $<
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 2cbcfb3..ad37194 100644 (file)
 - '--stage=/' behaviour fixed in configure
 
 2.1.4-1
-> - Essential checking of temporal arguments to glite-lb-dump for validity
-> - Support for special date values (now, last dump start/end) in glite-lb-dump
-> - Proper handling of background purge error messages (fix for bug #77974)
+- Essential checking of temporal arguments to glite-lb-dump for validity
+- Support for special date values (now, last dump start/end) in glite-lb-dump
+- Proper handling of background purge error messages (fix for bug #77974)
+
+2.1.4-2
+- Module rebuilt
 
index c148fc3..c605766 100644 (file)
@@ -61,7 +61,9 @@ install:
 
 clean:
        rm -vf *.h *.html *.xml *.wsdl glue2-copy.xsd
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.xml: %.xml.T
        rm -f $@
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index ffcef50..f7b381a 100644 (file)
@@ -77,3 +77,6 @@
 - at3 location detection reverted
 - '--stage=/' behaviour fixed in configure
 
+3.2.4-2
+- Module rebuilt
+
index 05596e4..a21624e 100644 (file)
@@ -85,7 +85,9 @@ install:
 
 clean:
        rm -rvf .libs LB.xh *.xml ${GSOAP_FILES_PREFIX}* *.o *.lo *.nsmap soap_version.h ${CEXAMPLES} ${TESTS}
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 LB.xh: ws_typemap.dat ${stagedir}${prefix}/share/wsdl/glite-lb/LB.wsdl
        ${gsoap_bin_prefix}/wsdl2h -c -t ${top_srcdir}/examples/ws_typemap.dat -I${stagedir}${prefix}/share/wsdl/glite-lb -o $@ ${stagedir}${prefix}/share/wsdl/glite-lb/LB.wsdl
@@ -95,4 +97,4 @@ soap_version.h:
        perl -ne '$$. == 2 && /.*([0-9]+)\.([0-9]+)\.([0-9]+)([a-z]?).*/ && printf "#define GSOAP_VERSION %d%02d%02d\n#define GSOAP_VERSION_LETTER '\''".($$4?$$4:"\\0")."'\''\n",$$1,$$2,$$3' soapH.h >$@
        -rm soapC.cpp soapH.h soapStub.h soapClient.cpp soapServer.cpp soapClientLib.cpp soapServerLib.cpp
 
-.PHONY: default all check stage install clean
+.PHONY: default all check stage install clean distclean
index a67786b..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index d0008fd..8557b23 100644 (file)
@@ -94,3 +94,6 @@
 1.2.3-1
 - wsdl files moved
 
+1.2.3-2
+- Module rebuilt
+
index c420624..b73b5b1 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.lb.ws-test/project/version.properties,v 1.1 2009/01/15 15:49:26 zsustr Exp $
 module.version=1.2.3
-module.age=1
+module.age=2
index a708753..ef25e74 100644 (file)
@@ -20,9 +20,8 @@ all ${FILES}:
        if echo "${localstatedir}" | grep 'glite'>/dev/null; then \
                glite_var="${localstatedir}"; \
        fi; \
-       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' -e "s:@glite_var@:$$glite_var:" $(top_srcdir)/config/defaults/glite-lb.pre > glite-lb.pre
-
-       sed -e 's:@glite_etc@:${sysconfdir}:' $(top_srcdir)/config/functions/config_glite_lb.in > config_glite_lb
+       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' -e "s:@glite_var@:$$glite_var:" $(top_srcdir)/config/defaults/glite-lb.pre > glite-lb.pre; \
+       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' -e "s:@glite_var@:$$glite_var:" $(top_srcdir)/config/functions/config_glite_lb.in > config_glite_lb
 
        # metapackage info
        echo -e "${gLiteCopyrightText}\n\n${gLiteLicenseText}" > LICENSE
@@ -52,6 +51,8 @@ stage:
 check:
 
 clean:
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/ ${FILES}
 
-.PHONY: default all check install stage clean
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
+.PHONY: default all check install stage clean distclean
index 0902e5d..a3ba409 100644 (file)
@@ -4,65 +4,65 @@
 # system settings
 #
 
-GLITE_LB_LOCATION='@glite_prefix@'
-GLITE_LB_LOCATION_ETC='@glite_etc@'
-GLITE_LB_LOCATION_VAR='@glite_var@'
+#GLITE_LB_LOCATION='@glite_prefix@'
+#GLITE_LB_LOCATION_ETC='@glite_etc@'
+#GLITE_LB_LOCATION_VAR='@glite_var@'
 
 # query timeout
-GLITE_WMS_QUERY_TIMEOUT=300
+#GLITE_WMS_QUERY_TIMEOUT=300
 # CA certificates directory
-X509_CERT_DIR='/etc/grid-security/certificates'
+#X509_CERT_DIR='/etc/grid-security/certificates'
 # VOMS directory
-X509_VOMS_DIR='/etc/grid-security/vomsdir'
+#X509_VOMS_DIR='/etc/grid-security/vomsdir'
 
 #
 # purge and exports
 #
 
 # purge timeouts
-GLITE_LB_EXPORT_PURGE_ARGS='--cleared 2d --aborted 15d --cancelled 15d --other 60d'
+#GLITE_LB_EXPORT_PURGE_ARGS='--cleared 2d --aborted 15d --cancelled 15d --other 60d'
 # enable export of the purged jobs to the Job Provenance
-GLITE_LB_EXPORT_ENABLED='false'
+#GLITE_LB_EXPORT_ENABLED='false'
 # Job Provenance server
-GLITE_LB_EXPORT_JPPS=
+#GLITE_LB_EXPORT_JPPS=
 # prefix to the Job Provenance installation (if different from $GLITE_LB_LOCATION)
-GLITE_JP_LOCATION=
+#GLITE_JP_LOCATION=
 
 #
 # L&B configuration
 #
 
 # L&B service type (server/proxy/both), overrided by YAIM when needed
-GLITE_LB_TYPE=
+#GLITE_LB_TYPE=
 # configure glite-LB to be used with Real Time Monitor (harvester)
-GLITE_LB_RTM_ENABLED='false'
+#GLITE_LB_RTM_ENABLED='false'
 # MSG publish
-GLITE_LB_MSG_BROKER='true'
-GLITE_LB_MSG_NETWORK='PROD'
-LCG_GFAL_INFOSYS='lcg-bdii.cern.ch:2170'
+#GLITE_LB_MSG_BROKER='true'
+#GLITE_LB_MSG_NETWORK='PROD'
+#LCG_GFAL_INFOSYS='lcg-bdii.cern.ch:2170'
 
 # L&B authorization (items in list separated by comma)
-GLITE_LB_SUPER_USERS=
-GLITE_LB_WMS_DN=
-GLITE_LB_RTM_DN='/C=UK/O=eScience/OU=Imperial/L=Physics/CN=heppc24.hep.ph.ic.ac.uk/Email=janusz.martyniak@imperial.ac.uk'
-GLITE_LB_AUTHZ_ADMIN_ACCESS=
-GLITE_LB_AUTHZ_READ_ALL=
-GLITE_LB_AUTHZ_READ_PURGE=
-GLITE_LB_AUTHZ_STATUS_FOR_MONITORING=
-GLITE_LB_AUTHZ_GET_STATISTICS=
-GLITE_LB_AUTHZ_GRANT_OWNERSHIP=
-GLITE_LB_AUTHZ_REGISTER_JOBS=".*"
-GLITE_LB_AUTHZ_LOG_WMS_EVENTS=".*"
-GLITE_LB_AUTHZ_LOG_CE_EVENTS=".*"
-GLITE_LB_AUTHZ_LOG_GENERAL_EVENTS=".*"
+#GLITE_LB_SUPER_USERS=
+#GLITE_LB_WMS_DN=
+#GLITE_LB_RTM_DN='/C=UK/O=eScience/OU=Imperial/L=Physics/CN=heppc24.hep.ph.ic.ac.uk/Email=janusz.martyniak@imperial.ac.uk'
+#GLITE_LB_AUTHZ_ADMIN_ACCESS=
+#GLITE_LB_AUTHZ_READ_ALL=
+#GLITE_LB_AUTHZ_READ_PURGE=
+#GLITE_LB_AUTHZ_STATUS_FOR_MONITORING=
+#GLITE_LB_AUTHZ_GET_STATISTICS=
+#GLITE_LB_AUTHZ_GRANT_OWNERSHIP=
+#GLITE_LB_AUTHZ_REGISTER_JOBS=".*"
+#GLITE_LB_AUTHZ_LOG_WMS_EVENTS=".*"
+#GLITE_LB_AUTHZ_LOG_CE_EVENTS=".*"
+#GLITE_LB_AUTHZ_LOG_GENERAL_EVENTS=".*"
 
 #
 # additional options
 #
 
 # bkserver additional options
-GLITE_LB_SERVER_OTHER_OPTIONS=
+#GLITE_LB_SERVER_OTHER_OPTIONS=
 # notification interlogger additional options
-GLITE_LB_NOTIF_IL_OTHER_OPTIONS=
+#GLITE_LB_NOTIF_IL_OTHER_OPTIONS=
 # proxy interlogger additional options
-GLITE_LB_PROXY_IL_OTHER_OPTIONS=
+#GLITE_LB_PROXY_IL_OTHER_OPTIONS=
index 8a02c45..bbb7e39 100644 (file)
@@ -1,5 +1,5 @@
 function config_glite_lb_check(){
-  requires $1 MYSQL_PASSWORD INSTALL_ROOT GLITE_LOCATION GLITE_LB_LOCATION GLITE_LB_LOCATION_ETC GLITE_LB_LOCATION_VAR GLITE_USER
+  requires $1 MYSQL_PASSWORD INSTALL_ROOT GLITE_LOCATION
 }
 
 # check directory existence first
@@ -21,27 +21,28 @@ function config_glite_lb_libs_append() {
 
 function config_glite_lb_setenv(){
 
-  yaimgridenv_set GLITE_USER ${GLITE_USER:-glite}
+  # Redefine GLITE_USER to value used in packages
+  yaimgridenv_set GLITE_USER glite
   # Redefine GLITE_HOME_DIR to make sure we retrieve the correct HOME directory of user glite
   GLITE_HOME_DIR=`getent passwd ${GLITE_USER} | cut -d: -f6`
   if [ "x${GLITE_HOME_DIR}" = "x" ]; then
     yaimlog ERROR "The home directory of ${GLITE_USER} doesn't exist. Check whether the user ${GLITE_USER} was properly created"
     exit ${YEX_NOSUCHFILE}
   fi
-  yaimgridenv_set GLITE_WMS_QUERY_TIMEOUT "${GLITE_WMS_QUERY_TIMEOUT}"
+  yaimgridenv_set GLITE_WMS_QUERY_TIMEOUT "${GLITE_WMS_QUERY_TIMEOUT:-300}"
   yaimgridenv_set GLITE_HOST_CERT ${GLITE_HOME_DIR:-/home/glite}/.certs/hostcert.pem
   yaimgridenv_set GLITE_HOST_KEY ${GLITE_HOME_DIR:-/home/glite}/.certs/hostkey.pem
-  yaimgridenv_set X509_CERT_DIR "${X509_CERT_DIR}"
-  yaimgridenv_set X509_VOMS_DIR "${X509_VOMS_DIR}"
+  yaimgridenv_set X509_CERT_DIR "${X509_CERT_DIR:-/etc/grid-security/certificates}"
+  yaimgridenv_set X509_VOMS_DIR "${X509_VOMS_DIR:-/etc/grid-security/vomsdir}"
 
   yaimgridenv_set GLITE_LB_EXPORT_ENABLED ${GLITE_LB_EXPORT_ENABLED:-false}
-  yaimgridenv_set GLITE_LB_EXPORT_PURGE_ARGS "${GLITE_LB_EXPORT_PURGE_ARGS}"
+  yaimgridenv_set GLITE_LB_EXPORT_PURGE_ARGS "${GLITE_LB_EXPORT_PURGE_ARGS:---cleared 2d --aborted 15d --cancelled 15d --other 60d}"
   yaimgridenv_set GLITE_LB_EXPORT_JPPS ${GLITE_LB_EXPORT_JPPS:-}
 
-  yaimgridenv_set GLITE_LB_LOCATION "${GLITE_LB_LOCATION}"
-  yaimgridenv_set GLITE_LB_LOCATION_ETC "${GLITE_LB_LOCATION_ETC}"
-  yaimgridenv_set GLITE_LB_LOCATION_VAR "${GLITE_LB_LOCATION_VAR}"
-  yaimgridenv_set GLITE_JP_LOCATION "${GLITE_JP_LOCATION}"
+  yaimgridenv_set GLITE_LB_LOCATION "${GLITE_LB_LOCATION:-@glite_prefix@}"
+  yaimgridenv_set GLITE_LB_LOCATION_ETC "${GLITE_LB_LOCATION_ETC:-@glite_etc@}"
+  yaimgridenv_set GLITE_LB_LOCATION_VAR "${GLITE_LB_LOCATION_VAR:-@glite_var@}"
+  yaimgridenv_set GLITE_JP_LOCATION "${GLITE_JP_LOCATION:-}"
 
   yaimgridenv_set GLITE_LB_SERVER_OTHER_OPTIONS "${GLITE_LB_SERVER_OTHER_OPTIONS}"
   yaimgridenv_set GLITE_LB_NOTIF_IL_OTHER_OPTIONS "${GLITE_LB_NOTIF_IL_OTHER_OPTIONS}"
@@ -97,6 +98,25 @@ function config_glite_lb_setenv(){
   config_glite_lb_libs_append ${INSTALL_ROOT:-'/opt'}/apr-dev
   config_glite_lb_libs_append ${INSTALL_ROOT:-'/opt'}/aprutil-dev
   config_glite_lb_libs_append ${INSTALL_ROOT:-'/opt'}/activemq-cpp-library
+
+  GLITE_LB_RTM_ENABLED="${GLITE_LB_RTM_ENABLED:-false}"
+  GLITE_LB_MSG_BROKER="${GLITE_LB_MSG_BROKER:-true}"
+  GLITE_LB_MSG_NETWORK="${GLITE_LB_MSG_NETWORK:-PROD}"
+  LCG_GFAL_INFOSYS="${LCG_GFAL_INFOSYS:-lcg-bdii.cern.ch:2170}"
+
+  #GLITE_LB_SUPER_USERS="${GLITE_LB_SUPER_USERS:-}"
+  #GLITE_LB_WMS_DN="${GLITE_LB_WMS_DN:-}"
+  GLITE_LB_RTM_DN="${GLITE_LB_RTM_DN:-/C=UK/O=eScience/OU=Imperial/L=Physics/CN=heppc24.hep.ph.ic.ac.uk/Email=janusz.martyniak@imperial.ac.uk}"
+  #GLITE_LB_AUTHZ_ADMIN_ACCESS="${GLITE_LB_AUTHZ_ADMIN_ACCESS:-}"
+  #GLITE_LB_AUTHZ_READ_ALL="${GLITE_LB_AUTHZ_READ_ALL:-}"
+  #GLITE_LB_AUTHZ_READ_PURGE="${GLITE_LB_AUTHZ_READ_PURGE:-}"
+  #GLITE_LB_AUTHZ_STATUS_FOR_MONITORING="${GLITE_LB_AUTHZ_STATUS_FOR_MONITORING:-}"
+  #GLITE_LB_AUTHZ_GET_STATISTICS="${GLITE_LB_AUTHZ_GET_STATISTICS:-}"
+  #GLITE_LB_AUTHZ_GRANT_OWNERSHIP="${GLITE_LB_AUTHZ_GRANT_OWNERSHIP:-}"
+  GLITE_LB_AUTHZ_REGISTER_JOBS="${GLITE_LB_AUTHZ_REGISTER_JOBS:-.*}"
+  GLITE_LB_AUTHZ_LOG_WMS_EVENTS="${GLITE_LB_AUTHZ_LOG_WMS_EVENTS:-.*}"
+  GLITE_LB_AUTHZ_LOG_CE_EVENTS="${GLITE_LB_AUTHZ_LOG_CE_EVENTS:-.*}"
+  GLITE_LB_AUTHZ_LOG_GENERAL_EVENTS="${GLITE_LB_AUTHZ_LOG_GENERAL_EVENTS:-.*}"
 }
 
 function config_glite_lb_authz() {
@@ -175,15 +195,6 @@ function config_glite_lb() {
     return 1
   fi
 
-  LB_PURGE="$GLITE_LB_LOCATION/bin/glite-lb-purge"
-  if [ ! -x "$LB_PURGE" ]; then
-    LB_PURGE="$GLITE_LB_LOCATION/sbin/glite-lb-purge"
-  fi
-  if [ ! -x "$LB_PURGE" ]; then
-    yaimlog ABORT "Purge utility not found! Install glite-lb-utils (or glite-lb-client in older version)"
-    return 1
-  fi
-
   chmod og+rx /var/lib/mysql/ 
   chown mysql:mysql /var/run/mysqld/
 
@@ -285,11 +296,6 @@ EOF
   fi
   rm -f /var/tmp/glite-lb-bkindexes.txt
 
-  mkdir -p $GLITE_LB_LOCATION_VAR   # Needed to store PID of LB server 
-
-  chown $GLITE_USER:$GLITE_USER $GLITE_LB_LOCATION_VAR
-  chmod 0755 $GLITE_LB_LOCATION_VAR
-
   mkdir -p $GLITE_HOME_DIR/.certs
   chown $GLITE_USER:$GLITE_USER $GLITE_HOME_DIR/.certs
   chmod 0755 $GLITE_HOME_DIR/.certs
@@ -303,32 +309,6 @@ EOF
   chmod 0644 $GLITE_HOME_DIR/.certs/hostcert.pem
   chmod 0400 $GLITE_HOME_DIR/.certs/hostkey.pem
 
-  # Create cron for purging
-  mkdir -p /var/log/glite
-  chown $GLITE_USER:$GLITE_USER /var/log/glite
-  logfile=/var/log/glite/glite-lb-purger.log
-  if $LB_PURGE --help 2>&1 | grep 'target-runtime' > /dev/null; then
-    purge_target_runtime_cmd='export GLITE_LB_PURGE_TARGET_RUNTIME=84600s; '
-  fi
-  cat << EOF > /etc/cron.d/glite-lb-purge.cron
-HOME=/
-MAILTO=$SITE_EMAIL
-
-1 1 * * * $GLITE_USER . @glite_etc@/profile.d/grid-env.sh ; export GLITE_LB_EXPORT_BKSERVER=$HOSTNAME; $purge_target_runtime_cmd$GLITE_LB_LOCATION/sbin/glite-lb-export.sh >> $logfile 2>&1
-EOF
-
-  touch $logfile
-  chown $GLITE_USER:$GLITE_USER $logfile
-
-  cat > /etc/logrotate.d/lb-purger <<EOF
-$logfile {
-    weekly
-    compress
-    rotate 4
-    missingok
-}
-EOF
-
   # LCAS plugin
   # config file
   lcas_libarch=lib
@@ -339,18 +319,6 @@ EOF
   fi
   lcas_plugin="$GLITE_LB_LOCATION/$lcas_libarch/modules/lcas_lb.mod"
   echo "pluginname=\"$lcas_plugin\"" > ${GLITE_LB_LOCATION_ETC}/glite-lb/lcas.db
-  # log file
-  logfile=/var/log/glite/glite-lb-lcas.log
-  touch $logfile
-  chown $GLITE_USER:$GLITE_USER $logfile
-  cat > /etc/logrotate.d/lb-lcas <<EOF
-$logfile {
-    daily
-    compress
-    rotate 4
-    missingok
-}
-EOF
 
   # MSG publish
   if [ "$GLITE_LB_MSG_BROKER" = 'false' ]; then
@@ -391,6 +359,9 @@ EOF
     echo $HOSTNAME > ${GLITE_LB_LOCATION_ETC}/glite-lb/glite-lb-harvester.conf
   fi
 
+  # upgrade from L&B <= 3.1.1
+  rm -fv /etc/cron.d/glite-lb-purge.cron /etc/logrotate.d/lb-purger /etc/logrotate.d/lb-lcas
+
   . @glite_etc@/profile.d/grid-env.sh
   ${GLITE_LB_LOCATION_ETC}/init.d/glite-lb-bkserverd restart
 
index ca33352..5d83bf0 100644 (file)
@@ -2,7 +2,6 @@ LB_FUNCTIONS="
 config_add_pool_env
 config_crl
 config_host_certs
-config_edgusers
 config_info_service_lb
 config_glite_lb
 config_glite_locallogger
index 2e34da2..16595a2 100644 (file)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index d55b926..dc7d1cd 100644 (file)
@@ -78,3 +78,7 @@
 - Added missing support for GET_STATISTICS auth section
 - Access to statistics granted to WMS_DN by yaim.
 
+4.3.10-1
+- Prepend purger logging output with Common Logging Format niceties (SB #88502)
+- Workaround SB #85209 for glite-info-provider-service <= 1.7.0.
+
index b6f37e5..16595a2 100755 (executable)
@@ -137,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -186,6 +187,7 @@ my %lbmodules = (
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -209,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -268,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -351,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -473,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -494,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -532,7 +553,7 @@ BEGIN{
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -565,6 +586,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/ ],
 );
 
 %need_jars = (
@@ -611,7 +633,7 @@ for my $jar (keys %need_jars) {
                lb.utils:R
        / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -693,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -705,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -715,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -743,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -752,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -837,6 +864,7 @@ for my $ext (keys %deps_aux) {
                        'lbjp-common' => 'emi-',
                        'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -851,7 +879,7 @@ for my $ext (keys %deps_aux) {
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -868,23 +896,25 @@ for my $ext (keys %deps_aux) {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
                        deb6_x86_64_gcc445 => {
-                               globus_essentials => 'libglobus-gssapi-gsi4',
-                               globus => 'libglobus-gssapi-gsi-dev',
-                               axis => 'libaxis-java',
-                               cares => 'libc-ares2',
-                               cppunit => 'libcppunit',
-                               expat => 'libexpat1',
-                               log4c => 'liblog4c3',
-                               curl => 'libcurl3',
-                               'mysql' => 'libmysqlclient6',
-                               'mysql-devel' => 'libmysqlclient-dev',
-                               libxslt => 'xsltproc',
-                               'jakarta-commons-codec' => 'libcommons-codec-java',
-                               'jakarta-commons-lang' => 'libcommons-lang-java',
-                               'tetex-latex' => 'texlive-latex-extra',
-                               'perl-LDAP' => 'libnet-ldap-perl',
-                               'fuse-lib' => 'libfuse2',
-                               'fuse' => 'fuse-utils',
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
                        },
                },
                etics_externs_devel => {
@@ -905,20 +935,21 @@ for my $ext (keys %deps_aux) {
                                jdk=>'java-devel',
                        },
                        deb6_x86_64_gcc445 => {
-                               cares => 'libc-ares-dev',
-                               cppunit => 'libcppunit-dev',
-                               expat => 'libexpat1-dev',
-                               libtar => 'libtar-dev',
-                               log4c => 'liblog4c-dev',
-                               postgresql => 'libpq-dev',
-                               curl => 'libcurl4-openssl-dev',
-                               libxml2 => 'libxml2-dev',
-                               openssl => 'libssl-dev',
-                               'tetex-latex' => 'texlive-latex-extra',
-                               libxslt=>'xsltproc',
-                               'httpd-devel' => 'apache2-prefork-dev',
-                               'fuse-devel' => 'libfuse-dev',
-                               gsoap => 'gsoap',
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
                        },
                },
                etics_projects => {
@@ -929,16 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
                        sl6_x86_64_gcc445EPEL => 1,
-#                      deb6_x86_64_gcc445 => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -964,7 +995,7 @@ my %gridsite_deb = (
                deb5_ia32_gcc432 =>  \%gridsite_deb,
                slc4_x86_64_gcc346 => \%gridsite_rpm,
                slc4_ia32_gcc346 => \%gridsite_rpm,
-               sl6_x86_64_gcc445 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
                deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
@@ -1002,7 +1033,11 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
@@ -1011,12 +1046,13 @@ sub mkinc
        my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -1124,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1198,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1209,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1221,10 +1260,10 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd_vcs{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd_vcs{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
@@ -1620,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index fe762ac..b102e49 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/glite/org.glite.lb/project/version.properties,v 1.164 2008/01/09 15:35:55 mmulac Exp $
-module.version=3.1.0
+module.version=3.1.1
 module.age=1
index 4002576..82392ba 100644 (file)
@@ -5,7 +5,7 @@ stagedir=.
 distdir=.
 globalprefix=glite
 lbutilsprefix=lbu
-package=glite-lb-utils-db
+package=glite-lbjp-common-db
 PREFIX=/opt/glite
 prefix=
 
@@ -176,9 +176,11 @@ install: all
 
 clean:
        rm -rvf *.o *.lo *.loT .libs lib* *.c *.h *.dox C/ CPP/
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
        rm -rvf db_expire db_test db_test_mysql db_test_psql timezone
 
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
 db-mysql.o db-mysql.lo: db-mysql.c
        ${COMPILE} ${MYSQL_CPPFLAGS} -c $<
 
@@ -203,4 +205,4 @@ db_test_mysql.lo: libglite_lbu_dbtest.la db.h db-int.h db_test.c
 db-mysql.lo: db-mysql.c db-int.h db.h
 db-pg.lo: db-pg.c db-int.h db.h
 
-.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage check_soname
+.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage check_soname distclean
index 27f197c..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -539,7 +566,7 @@ BEGIN{
        'lbjp-common.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B libtool:B/ ],
        'lbjp-common.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares:B gsoap gsoapxx libtool:B/ ],
        'jobid.api-c' =>  [ qw/cppunit:B libtool:B openssl:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
+       'jobid.api-cpp' =>  [ qw/cppunit:B libtool:B/ ],
        'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
        'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
         'jp.doc' => [],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index c65030a..537e32a 100644 (file)
@@ -1,3 +1,3 @@
 : /cvs/jra1mw/org.glite.lbjp-common.db/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
 module.version=3.0.3
-module.age=2
+module.age=3
index 746bec5..71cf0ca 100644 (file)
@@ -60,7 +60,7 @@ class ZoneTest: public  CppUnit::TestFixture
 public:
 
        void setUp() {
-               tz0 = getenv("TZ");
+               tz = tz0 = getenv("TZ");
        }
 
        void tearDown() {
index 50b0b27..84db12a 100644 (file)
@@ -339,11 +339,13 @@ clean:
        rm -rvf *.c *.h *.xml *.nsmap *.o *.lo .libs ${EXAMPLES} ${TESTS}
        rm -rvf CalcService.wsdl wscalc.xsd
        rm -rvf glite_gscompat.h sizeof_soap
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
        for v in ${gsoap_versions_noflavours} ${gsoap_versions_flavours}; do \
                rm -rvf `echo $$v | tr -d .`; \
        done
 
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
 %.c.o: %.c
        ${COMPILE} ${GSOAP_DEFAULT_CFLAGS} -o $@ -c $<
 
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 8d26b4c..58949c5 100644 (file)
@@ -164,7 +164,9 @@ install:
 
 clean:
        rm -rf *.o *.lo *.a *.la .libs test_gss gss_server gss_client
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.o: %.c
        ${COMPILE} ${GLOBUS_GSSAPI_GSI_CFLAGS} ${LIBCARES_CFLAGS} -o $@ -c $<
index 2e34da2..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -179,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -208,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -472,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -493,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -527,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -551,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -602,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -685,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -697,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -707,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -725,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -734,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -743,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -769,6 +805,7 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'vdt_globus_essentials',
                                globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
                                gridsite=>'org.gridsite.shared',
                                yaim_core=>'org.glite.yaim.core',
                                gip_release=>'glite-info-provider-release',
@@ -791,7 +828,7 @@ for my $ext (keys %deps_aux) {
                        },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
@@ -825,8 +862,9 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
@@ -835,12 +873,13 @@ for my $ext (keys %deps_aux) {
                        default => {
                                globus_essentials=>'globus-gssapi-gsi',
                                globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
                                gridsite=>'emi.gridsite.shared',
                                yaim_core=>'emi.yaim.yaim-core',
                                yaim_bdii=>'emi.bdii.yaim-bdii',
                                gip_service=>'emi.bdii.glite-info-provider-service',
                                bdii=>'emi.bdii.core',
-                               glite_version=>'emi.misc.glite-version',
+                               glite_version=>'emi.emi-version',
                                glue_schema=>'emi.bdii.glue-schema',
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
@@ -853,6 +892,30 @@ for my $ext (keys %deps_aux) {
                        sl5_x86_64_gcc412EPEL => {
                                'myproxy-devel' => 'myproxy-devel.x86_64',
                        },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
                        default => {
@@ -871,6 +934,23 @@ for my $ext (keys %deps_aux) {
                                gridsite=>'emi.gridsite.devel',
                                jdk=>'java-devel',
                        },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
@@ -880,14 +960,16 @@ for my $ext (keys %deps_aux) {
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
@@ -896,18 +978,25 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -924,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -941,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -983,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1040,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1049,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1123,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1134,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1146,53 +1260,102 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1219,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1258,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1268,33 +1437,32 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
        for my $platform ('default', keys %{$project{supported_platforms}}) {
                my $used = 0;
+               my $output = '';
 
                for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-                       my $eext = $etics_externs{$platform}{$_} ? $etics_externs{$platform}{$_} : $_;
+                       my $eext = $etics_externs{$platform}{$_};
                        my $edev = $project{etics_externs_devel}{$platform}{$_};
-                       next if ($eext eq '-');
-                       # dependencies not listed in etics_externs only for
-                       # default platform
-                       if (not defined $etics_externs{$platform}{$_} and
-                           $platform ne 'default') {
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
 #print "skipping $_ on $platform\n";
                                next;
                        }
 
-                       if (not $used) {
-                               print C qq{
-[Platform-$platform:DynamicDependency]
-};
-                               $used = 1;
-                       }
-
                        my $proj = 'externals';
                        for my $p (keys %etics_projects) {
                                for $m (@{$etics_projects{$p}}) {
@@ -1306,26 +1474,31 @@ package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
 
                        if ($edev) {
                                if ($type eq 'B') {
-                                       $eext = $edev; # no runtime - change to devel pkg
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
                                } elsif ($type eq 'BR' or $type eq 'RB') {
-                                       print C "$proj|$edev = B\n"; # additional devel pkg
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
                                }
                        }
-                       print C "$proj|$eext = $type\n";
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
                }
 
                if ($platform eq 'default') {
                        for (@{$deps{"$subsys.$module"}}) {
                                my $type = $deps_type{"$subsys.$module"}->{$_};
                                if (not $used) {
-                                       print C qq{
-[Platform-$platform:DynamicDependency]
-};
                                        $used = 1;
                                }
-                               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
+
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1412,16 +1585,41 @@ sub reshuffle_platforms($$) {
        }
 
        for $_ (keys %blacklist) {
-               if (defined $data->{default}{$_}) {
-                       $value = $data->{default}{$_};
-                       $data->{default}{$_} = '-';
-#print "  deleted $_ from default\n";
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
                        for $platform (keys %$platforms) {
-                               next if $platform eq 'default';
-                               if (not defined $data->{$platform}{$_}) {
-                                       $data->{$platform}{$_} = $value;
-#print "  added $value to $platform\n"
-                               }
+                               delete $data->{$platform}{$_};
                        }
                }
        }
@@ -1461,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 2eeb42a..4252468 100644 (file)
@@ -85,3 +85,8 @@
   - warning fixes (type cast, 32/64 portability)
   - gss functions documented in code
 
+3.0.5-1
+- compiler warnings, cosmetic changes
+- LB/GSS rutines try connecting to alternate addresses
+- savannah bug #85224 fixed. DN matches are not case-sensitive anymore.
+
index 534d2da..3190535 100644 (file)
@@ -790,9 +790,9 @@ end:
    return ret;
 }
 /* XXX XXX This is black magic. "Sometimes" server refuses the client with SSL
- *  * alert "certificate expired" even if it is not true. In this case the server
- *   * slave terminates (which helps, usually), and we can reconnect transparently.
- *    */
+ * alert "certificate expired" even if it is not true. In this case the server
+ * slave terminates (which helps, usually), and we can reconnect transparently.
+ */
 
 /* This string appears in the error message in this case */
 #define _EXPIRED_ALERT_MESSAGE "function SSL3_READ_BYTES: sslv3 alert certificate expired"
@@ -1309,6 +1309,7 @@ edg_wll_gss_watch_creds(const char *proxy_file, time_t *last_time)
       return 0;
 }
 
+/** Close the connection. */
 int
 edg_wll_gss_watch_creds_gsi(const char *proxy_file, time_t *last_time)
 {
index 552b366..88de0d8 100644 (file)
@@ -102,10 +102,12 @@ install:
 
 clean:
        rm -rvf *.o *.lo .libs lib*
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
        rm -vf type_test type_test.xml
        rm -f glite jp
 
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
 %.thr.lo: %.c
        ${COMPILE} -o $@ -c $<
 
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 43d3922..983a6c6 100644 (file)
@@ -1,3 +1,3 @@
 #: /cvs/jra1mw/org.glite.lbjp-common.jp-interface/project/version.properties,v 1.1.1.1 2009/01/21 14:43:52 zsustr Exp $
 module.version=2.1.2
-module.age=7
+module.age=8
index f41d7af..d88d882 100644 (file)
@@ -5,7 +5,7 @@ stagedir=.
 distdir=.
 globalprefix=glite
 lbutilsprefix=lbu
-package=glite-lbu-log
+package=glite-lbjp-common-log
 version=0.0.0
 PREFIX=/opt/glite
 prefix=
@@ -78,9 +78,11 @@ install: compile
 
 clean:
        rm -rvf *.o *.lo .libs lib*
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
        rm -rvf test
 
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
 check: test
        LOG4C_RCPATH=${top_srcdir}/tests ./test
 
index 27f197c..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -248,10 +244,18 @@ $externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-serv
 $externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
 $externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
 
+$externs{'mysql-server'}{withprefix}=$externs{mysql}{withprefix} if $externs{'mysql-server'}{withprefix} eq '';
+$externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mysql-devel'}{withprefix} eq '';
+$externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
+
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -267,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -350,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -423,7 +438,9 @@ sub mode_build {
 
                open MAK,">Makefile" or die "Makefile: $!\n";
 
-               print MAK "all: @modules\n\nclean check:\n";
+               print MAK "all: @modules\n\n";
+               print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
+               print MAK "clean check install:\n";
 
                for (@modules) {
                        my $full = full($_);
@@ -446,11 +463,13 @@ sub mode_build {
                        @ldeps{@{$deps{$_}}} = 1;
                        for my $x (split /,/,$staged) { delete $ldeps{$x}; }
                        my @dnames = $module ? () : keys %ldeps;
+                       my $snames = $#dnames == -1 ? '' : join('-stage ', @dnames).'-stage';
 
                        my $full = full($_);
                        my $build = $buildroot{$_};
 
                        print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+                       print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
                close MAK;
@@ -468,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -489,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -500,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -523,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -539,7 +566,7 @@ BEGIN{
        'lbjp-common.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B libtool:B/ ],
        'lbjp-common.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares:B gsoap gsoapxx libtool:B/ ],
        'jobid.api-c' =>  [ qw/cppunit:B libtool:B openssl:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
+       'jobid.api-cpp' =>  [ qw/cppunit:B libtool:B/ ],
        'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
        'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
         'jp.doc' => [],
@@ -547,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
-       'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -598,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -681,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -693,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -703,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -716,10 +753,12 @@ for my $ext (keys %deps_aux) {
 );
 
 %conflicts = (
-       'lb.glite-LB' => [ qq/emi-lb/ ],
-       'px.glite-PX' => [ qq/emi-px/ ],
-       'lb.emi-lb' => [ qq/glite-LB/ ],
-       'px.emi-px' => [ qq/glite-PX/ ],
+);
+
+%provides = (
+       'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+       'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -729,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -738,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -749,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -760,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -790,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -803,80 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_release=>'emi.bdii.glite-info-provider-release',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+               },
+               etics_locations => {
+                       axis => 'axis',
                },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -893,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -910,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -952,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1009,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1018,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1033,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1090,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1101,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1113,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = "prefix=${prefix}/usr";
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = "prefix=${prefix}";
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir ${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
-       cp ${moduleDir}/RPMTMP/SOURCES/gridsite-${version}.src.tar.gz ${moduleDir}/src/tgz";
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
+       cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1182,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
 
-[Platform-default:BuildCommand]
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1218,6 +1423,10 @@ $package_description$package_summary$defprops};
        for (@{$conflicts{"$subsys.$module"}}) {
                print C "package.conflicts = $_\n";
        }
+       for (@{$provides{"$subsys.$module"}}) {
+               print C "package.provides = $_\n";
+       }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1228,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1333,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1367,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 27de2a6..56660f5 100644 (file)
@@ -5,7 +5,7 @@ stagedir=.
 distdir=.
 globalprefix=glite
 lbutilsprefix=lbu
-package=glite-lb-utils-maildir
+package=glite-lbjp-common-maildir
 version=1.0.0
 PREFIX=/opt/glite
 prefix=
@@ -94,11 +94,13 @@ install: all
 
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
+
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
 
 %.o %.lo: %.c
        ${COMPILE} -c $<
 
 maildir.lo: maildir.c maildir.h
 
-.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage
+.PHONY: default all compile check examples doc stage dist distsrc distbin install clean distclean test_coverage
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 3afee53..2bcafc7 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.lbjp-common.maildir/project/version.properties,v 1.1 2007/11/01 20:17:45 valtri Exp $
 module.version=2.1.2
-module.age=7
+module.age=8
index 4709fa2..730f6e2 100644 (file)
@@ -3,7 +3,7 @@ top_srcdir=..
 stagedir=.
 globalprefix=glite
 lbutilsprefix=lbu
-package=glite-lb-server-bones
+package=glite-lbjp-common-server-bones
 version=0.0.1
 PREFIX=/opt/glite
 prefix=
@@ -70,15 +70,15 @@ ${LTLIB}: ${LOBJS}
 stage: compile
        $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
 
-check:
-       -echo "No unit tests so far."
+check: example
+       LOG4C_RCPATH=${PREFIX}${sysconfdir}/glite-lb ${top_srcdir}/examples/run_test.sh
 
 example: srv_example cnt_example
 
-srv_example: srv_example.o
+srv_example: srv_example.o ${LTLIB}
        ${LINK} -o $@ ${LTLIB} srv_example.o
 
-cnt_example: cnt_example.o
+cnt_example: cnt_example.o ${LTLIB}
        ${LINK} -o $@ cnt_example.o
 
 doc:
@@ -92,7 +92,9 @@ install:
 
 clean:
        rm -rvf *.o *.lo .libs lib* srv_example cnt_example
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
 
-%.o: %.c
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
+%.o %.lo: %.c
        ${COMPILE} -c $<
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 22f2bf2..c6a4830 100644 (file)
@@ -23,8 +23,7 @@ limitations under the License.
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+#include <netdb.h>
 
 #ifndef dprintf
 #define dprintf(x) { if (debug) printf x; fflush(stdout); }
@@ -59,14 +58,42 @@ static void usage(char *me)
 }
 
 
+static int try_connect(char *addr, char *port) {
+       struct addrinfo         hints;
+       struct addrinfo         *ai_all = NULL, *ai;
+       int                     gaie, sock = -1;
+
+       memset(&hints, 0, sizeof(hints));
+       hints.ai_socktype = SOCK_STREAM;
+       hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICHOST | AI_NUMERICSERV;
+       gaie = getaddrinfo(addr, port, &hints, &ai_all);
+       if (gaie != 0 || !ai_all) return -1;
+
+       for (ai = ai_all; ai; ai = ai->ai_next) {
+               sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+               if (sock == -1) continue;
+               if (connect(sock, ai->ai_addr, ai->ai_addrlen) == 0) {
+                       break;
+               } else {
+                       close(sock);
+                       sock = -1;
+               }
+       }
+       freeaddrinfo(ai_all);
+
+       return sock;
+}
+
+
 int main(int argc, char **argv)
 {
-       struct sockaddr_in      addr;
-       char                            buff[512],
-                                          *me;
-       int                                     opt,
-                                               sock,
-                                               n;
+       char                    portstr[10];
+       char                    buff[512],
+                               *me;
+       int                     opt,
+                               sock = -1,
+                               fd,
+                               n;
        int     repeat = 1;
 
        me = strrchr(argv[0], '/');
@@ -88,21 +115,16 @@ int main(int argc, char **argv)
                }
        }
 
-       bzero((char *) &addr, sizeof(addr));
-       addr.sin_family = AF_INET;
-       addr.sin_addr.s_addr = inet_addr("127.0.0.1");
-       addr.sin_port = htons(port);
-       if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
-       {
-               perror("socket");
-               exit(1);
-       }
-       if ( connect(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0 )
-       {
-               perror("connect");
+       snprintf(portstr, sizeof(portstr), "%d", port);
+
+       if ((sock = try_connect("127.0.0.1", portstr)) == -1 &&
+           (sock = try_connect("::1", portstr)) == -1) {
+               fprintf(stderr, "can't connect\n");
                exit(1);
        }
+
        n = strlen(msg? msg: DEF_MSG);
+       fd = fileno(stdout);
        for (;repeat; repeat--) {
                if ( writen(sock, msg? msg: DEF_MSG, n) != n )
                {
@@ -114,12 +136,14 @@ int main(int argc, char **argv)
                if ( n < 0 )
                {
                        perror("read() reply error");
+                       free(msg);
                        return 1;
                }
-               writen(0, buff, n);
+               writen(fd, buff, n);
        }
        close(sock);
 
+       free(msg);
        return 0;
 }
 
diff --git a/org.glite.lbjp-common.server-bones/examples/run_test.sh b/org.glite.lbjp-common.server-bones/examples/run_test.sh
new file mode 100644 (file)
index 0000000..d21b8a2
--- /dev/null
@@ -0,0 +1,37 @@
+#! /bin/bash
+
+./srv_example > /tmp/log.$$ &
+SRV_PID=$!
+disown $SRV_PID
+
+sleep 1
+
+a=`./cnt_example -p 9999 -m "Applejack
+"`
+ret1=$?
+
+b=`./cnt_example -p 9998 -m "Applejack
+"`
+ret2=$?
+
+kill -SIGTERM $SRV_PID
+
+n=`grep 'disconnect handler' /tmp/log.$$ | wc -l`
+rm -f /tmp/log.$$
+
+if [ $ret1 -ne 0 -o $ret2 -ne 0 ]; then
+       echo "$0: error launching cnt_example"
+       exit 1
+fi
+
+if [ "$a" != "reply: Applejack" -o "$b" != "reply: APPLEJACK" ]; then
+       echo "$0: error in reply"
+       exit 2
+fi
+
+if [ "$n" != "2" ]; then
+       echo "$0: error running server"
+       exit 3
+fi
+
+exit 0
index 8cae54c..cd46278 100644 (file)
@@ -26,6 +26,7 @@ limitations under the License.
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
+#include "glite/lbu/log.h"
 #include "srvbones.h"
 
 #ifndef dprintf
@@ -46,8 +47,8 @@ static int disconnect(int, struct timeval *, void *);
 static int echo(int, struct timeval *, void *);
 static int upper_echo(int, struct timeval *, void *);
 
-#define ECHO_PORT                      9999
-#define UPPER_ECHO_PORT                9998
+#define ECHO_PORT              "9999"
+#define UPPER_ECHO_PORT                "9998"
 
 #define SRV_ECHO                       0
 #define SRV_UPPER_ECHO         1
@@ -59,47 +60,24 @@ static struct glite_srvbones_service service_table[] = {
 
 int main(void)
 {
-       struct sockaddr_in      myaddr;
-
-
-       if (   ((service_table[SRV_ECHO].conn = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-               || ((service_table[SRV_UPPER_ECHO].conn = socket(AF_INET, SOCK_STREAM, 0)) == -1) )
-       {
-               perror("socket");
+       if (glite_common_log_init()) {
+               fprintf(stderr,"glite_common_log_init() failed, exiting.");
                exit(1);
        }
 
-       bzero((char *) &myaddr, sizeof(myaddr));
-       myaddr.sin_family = AF_INET;
-       myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-       myaddr.sin_port = htons(ECHO_PORT);
-       if ( bind(service_table[SRV_ECHO].conn, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1 )
-       {
-               perror("bind");
+       if (glite_srvbones_daemon_listen(NULL, ECHO_PORT, &service_table[SRV_ECHO].conn) != 0)
                exit(1);
-       }
-       bzero((char *) &myaddr, sizeof(myaddr));
-       myaddr.sin_family = AF_INET;
-       myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-       myaddr.sin_port = htons(UPPER_ECHO_PORT);
-       if ( bind(service_table[SRV_UPPER_ECHO].conn, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1 )
-       {
-               perror("bind");
-               exit(1);
-       }
 
-       if (   listen(service_table[SRV_ECHO].conn, 10)
-               || listen(service_table[SRV_UPPER_ECHO].conn, 10) )
-       {
-               perror("listen()");
+       if (glite_srvbones_daemon_listen(NULL, UPPER_ECHO_PORT, &service_table[SRV_UPPER_ECHO].conn) != 0) {
+               close(service_table[SRV_ECHO].conn);
                exit(1);
        }
 
+       setpgid(0, getpid());
 
        glite_srvbones_set_param(GLITE_SBPARAM_SLAVES_COUNT, 1);
        glite_srvbones_run(NULL, service_table, sizofa(service_table), 1);
 
-
        return 0;
 }
 
@@ -200,7 +178,6 @@ int readln(int fd, char *out, int nbytes)
        static char        *buffer_end = buffer;
        int                             n;
 
-
        dprintf(("reading line\n"));
        while ( 1 ) {
                if ( buffer_end - buffer ) {
index 5244066..f3b428c 100644 (file)
@@ -110,6 +110,13 @@ extern int glite_srvbones_run(
  */
 int glite_srvbones_daemonize(const char *servername, const char *custom_pidfile, const char *custom_logfile);
 
+/**
+ * Create listening socket.
+ *
+ * \return 0 OK, non-zero error
+ */
+int glite_srvbones_daemon_listen(const char *name, char *port, int *conn_out);
+
 #ifdef __cplusplus
 }
 #endif
index 57c1338..dee1dc0 100644 (file)
@@ -73,3 +73,6 @@
 2.1.3-1
 - Change log priority for slave suicide messages
 
+2.1.4-1
+- Quit parent process silently on background purge (improvement for SB #77974).
+
index 15b5d0d..6fce595 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.lbjp-common.server-bones/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
-module.version=2.1.3
+module.version=2.1.4
 module.age=1
index dd41c39..0510cd7 100644 (file)
@@ -46,6 +46,7 @@ limitations under the License.
 #define REQUEST_TIMEOUT                10              /* timeout for a single request */ 
 #define NEW_CLIENT_DURATION    10              /* how long a client is considered new, i.e. busy
                                                   connection is not closed to serve other clients */
+#define CON_QUEUE              10              /* listen() connection queue */
 
 #ifdef LB_PROF
 extern void _start (void), etext (void);
@@ -324,6 +325,66 @@ int glite_srvbones_daemonize(const char *servername, const char *custom_pidfile,
        return 1;
 }
 
+int glite_srvbones_daemon_listen(const char *name, char *port, int *conn_out) {
+       struct  addrinfo *ai;
+       struct  addrinfo hints;
+       int     conn;
+       int     gaie;
+       static const int zero = 0;
+       static const int one = 1;
+
+       memset (&hints, '\0', sizeof (hints));
+       hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE | AI_ADDRCONFIG;
+       hints.ai_socktype = SOCK_STREAM;
+       hints.ai_family = AF_INET6;
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0 || ai == NULL) {
+               hints.ai_family = 0;
+               gaie = getaddrinfo (NULL, port, &hints, &ai);
+       }
+
+       gaie = getaddrinfo (name, port, &hints, &ai);
+       if (gaie != 0) {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: %s", gai_strerror (gaie));
+               return 1;
+       }
+       if (ai == NULL) {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "getaddrinfo: no result");
+               return 1;
+       }
+
+       conn = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+       if ( conn < 0 ) { 
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "socket(): %s", strerror(errno));
+               freeaddrinfo(ai);
+               return 1; 
+       }
+       setsockopt(conn, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+       if (ai->ai_family == AF_INET6)
+               setsockopt(conn, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
+
+       if ( bind(conn, ai->ai_addr, ai->ai_addrlen) )
+       {
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "bind(%s): %s", port, strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1;
+       }
+
+       if ( listen(conn, CON_QUEUE) ) { 
+               glite_common_log(LOG_CATEGORY_CONTROL, LOG_PRIORITY_FATAL, "listen(): %s", strerror(errno));
+               close(conn);
+               freeaddrinfo(ai);
+               return 1; 
+       }
+
+       freeaddrinfo(ai);
+
+       *conn_out = conn;
+       return 0;
+}
+
 static int dispatchit(int sock_slave, int sock, int sidx)
 {
        struct sockaddr_storage a;
index 9af068f..9c10316 100644 (file)
@@ -5,7 +5,7 @@ top_builddir=${top_srcdir}/${builddir}
 stagedir=.
 distdir=.
 globalprefix=glite
-package=glite-lb-utils-trio
+package=glite-lbjp-common-trio
 version=0.0.0
 PREFIX=/opt/glite
 lbuprefix=lbu
@@ -109,7 +109,9 @@ install: all
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
        rm -vf trio_test
-       rm -rvf log.xml rpmbuild/ RPMS/ tgz/ debian/
        
+distclean:
+       rm -rvf Makefile.inc *.spec debian/
+
 %.o: %.c
        ${COMPILE} ${CFLAGS} -c $<
index e2b3330..16595a2 100755 (executable)
@@ -24,6 +24,7 @@
 #
 
 use Getopt::Long;
+use POSIX qw(locale_h strftime);
 
 my $pwd = `pwd`; chomp $pwd;
 my $prefix = '/usr';
@@ -52,7 +53,7 @@ my (%projects, %project);
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
 my @default_nodes = qw/lb px proxyrenewal/;
 my %enable_nodes;
 my %disable_nodes;
@@ -136,7 +137,8 @@ my %externs = (
                prefix=> '/usr'
        },
        jdk => {
-               prefix=> '/usr/java/latest'
+               prefix=> '/usr/java/latest',
+               locations => [ '/usr/lib/jvm/java', '/usr/java/latest' ],
        },
        libtar => {
                prefix=> '/usr'
@@ -154,14 +156,6 @@ my %externs = (
                prefix=>'/opt/activemq-cpp-library',
                pkg => 'activemq-cpp'
        },
-       apr => {
-               prefix=>'/opt/apr',
-               pkg => 'apr-1'
-       },
-       aprutil => {
-               prefix=>'/opt/apr-util',
-               pkg => 'apr-util-1'
-       },
 );
 
 my %jar = (
@@ -187,12 +181,13 @@ my (%etics_externs, %etics_projects);
 # additional modules from $project{modules} are automatically added
 #
 my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg/], 
+       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim logger-msg nagios/], 
        'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
        'jobid' => [qw/api-c api-cpp api-java/],
        'jp' => [ qw/client doc index primary server-common ws-interface/ ],
        'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
        'px' => [ qw/proxyrenewal myproxy-yaim/ ],
+       'canl' => [ qw/c/ ],
        );
 
 
@@ -216,6 +211,7 @@ my @opts = (
        'lbjp-common-tag=s' => \$lbjp_tag,
        'jp-tag=s' => \$jp_tag,
        'jobid-tag=s' => \$jobid_tag,
+       'canl-tag=s' => \$canl_tag,
        'help' => \$help,
        'libdir=s' => \$libdir,
        'project=s' => \$project,
@@ -253,9 +249,13 @@ $externs{'mysql-devel'}{wihtprefix}=$externs{mysql}{withprefix} if $externs{'mys
 $externs{'gsoapxx'}{withprefix}=$externs{gsoap}{withprefix} if $externs{'gsoapxx'}{withprefix} eq '';
 
 %project = %{$projects{$project}};
-for $_ (keys %{$project{etics_externs}}) {
-       $etics_externs{$_} = $project{etics_externs}{$_};
+for my $platform (keys %{$project{etics_externs}}) {
+       for $_ (keys %{$project{etics_externs}{$platform}}) {
+               $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
+       }
 }
+reshuffle_platforms(\%etics_externs, $project{supported_platforms});
+reshuffle_platforms(\%{$project{etics_externs_devel}}, $project{supported_platforms});
 for $_ (keys %{$project{etics_projects}}) {
        $etics_projects{$_} = $project{etics_projects}{$_};
 }
@@ -271,6 +271,10 @@ for my $ext (keys %need_externs_aux) {
                $need_externs_type{$ext}->{$pkg} = $type;
        }
 }
+if ($project eq 'emi') {
+       $extranodmod{lb} = 'lb.emi-lb';
+       $extranodmod{px} = 'px.emi-px';
+}
 for $_ (keys %{$project{modules}}) {
        push @{$lbmodules{$_}},@{$project{modules}{$_}};
 }
@@ -354,7 +358,14 @@ if ($mode eq 'build') { for my $ext (keys %externs) {
                        $jdk_prefix = $ENV{'JAVA_HOME'};
                        print "JAVA_HOME=$jdk_prefix\n";
                } else {
-                       print "(using default $externs{$ext}{prefix}))\n"
+                       foreach my $i (0..$#{$externs{$ext}{locations}}) {
+                               if (-e $externs{$ext}{locations}[$i]) {
+                                       $jdk_prefix=$externs{$ext}{locations}[$i];
+                                       print "(found directory $jdk_prefix)\n";
+                                       last;
+                               }
+                       }
+                       print "(using default $externs{$ext}{prefix})\n" unless ($jdk_prefix);
                }
                $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
        }
@@ -476,7 +487,7 @@ sub mode_checkout() {
                                }
                        }       
                }
-               if ($lbjp_tag){
+               if ($lbjp_tag) {
                        for (@{$lbmodules{'lbjp-common'}}){
                                if ("lbjp-common.".$_ eq $module){
                                         $tag = '-r '.$lbjp_tag;
@@ -497,6 +508,13 @@ sub mode_checkout() {
                                 }
                        }
                }
+               if ($canl_tag) {
+                       for (@{$lbmodules{'canl'}}){
+                               if ("canl.".$_ eq $module){
+                                        $tag = '-r '.$canl_tag;
+                                }
+                       }
+               }
                #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
                #       print "found";
                #}
@@ -508,18 +526,18 @@ sub mode_checkout() {
 
 BEGIN{
 %etics_externs = (
-       'myproxy-devel'=>'myproxy-devel',
-       'myproxy-libs'=>'myproxy-libs',
-       'myproxy-server'=>'myproxy-server',
-       'myproxy-admin'=>'myproxy-admin',
-       cares=>'c-ares',
-       voms=>'org.glite.security.voms-api-cpp',
-       utiljava=>'org.glite.security.util-java',
-       gpt=>'gpt',
-       fetchcrl=>'fetch-crl',
-       activemq=>'activemq-cpp-library',
-       apr=>'apr-dev',
-       aprutil=>'aprutil-dev',
+       default => {
+               'myproxy-devel'=>'myproxy-devel',
+               'myproxy-libs'=>'myproxy-libs',
+               'myproxy-server'=>'myproxy-server',
+               'myproxy-admin'=>'myproxy-admin',
+               cares=>'c-ares',
+               voms=>'org.glite.security.voms-api-cpp',
+               utiljava=>'org.glite.security.util-java',
+               gpt=>'gpt',
+               fetchcrl=>'fetch-crl',
+               activemq=>'activemq-cpp-library',
+       },
 );
 
 %etics_projects = (
@@ -531,10 +549,11 @@ BEGIN{
        'lb.doc' => [ qw/tetex-latex:B/ ],
        'lb.logger' => [ qw/cppunit:B libtool:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+       'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
        'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B libxml2 flex:B/ ],
        'lb.state-machine' => [ qw/classads libtool:B libxslt:B expat:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B/ ],
-       'lb.ws-interface' => [ qw/libxslt:B/ ],
+       'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
        'lb.types' => [ qw// ],
        'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
@@ -555,17 +574,19 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ 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/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       '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/ ],
 );
 
 %need_jars = (
@@ -606,8 +627,13 @@ for my $jar (keys %need_jars) {
        'lb.logger-msg' => [ qw/
                lb.logger
        / ],
+       'lb.nagios' => [ qw/
+               lb.client:R
+               lb.ws-test:R
+               lb.utils:R
+       / ],
        'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
+               lb.ws-interface lb.types:B lb.common lb.state-machine lb.utils:R
                lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
                jobid.api-c
                lbjp-common.gsoap-plugin lbjp-common.gss
@@ -689,6 +715,8 @@ for my $jar (keys %need_jars) {
        'px.emi-px' => [qw/px.myproxy-yaim:R/],
        'px.myproxy-yaim' => [ qw// ],
        'px.myproxy-config' => [],
+
+       'canl.c' => [],
 );
 
 for my $ext (keys %deps_aux) {
@@ -701,7 +729,7 @@ for my $ext (keys %deps_aux) {
 }
 
 
-%extrafull = ( gridsite=>'org.gridsite.core');
+%extrafull = ( gridsite=>'org.gridsite.core', 'canl.c' => 'emi.canl.canl-c');
 
 #( java => 'client-java' );
 %extranodmod = (
@@ -711,7 +739,8 @@ for my $ext (keys %deps_aux) {
        jpclient => 'jp.client',
        lb => 'lb.glite-LB',
        px => 'px.glite-PX',
-       proxyrenewal => 'px.proxyrenewal'
+       proxyrenewal => 'px.proxyrenewal',
+       canl => 'canl.c',
 );
 
 %obsoletes = (
@@ -729,6 +758,7 @@ for my $ext (keys %deps_aux) {
 %provides = (
        'lbjp-common.gss' => [ qq/glite-security-gss/ ],
        'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+       'lb.nagios' => [ qq/glite-lb-nagios-plugins/ ],
 );
 
 %cvs_prefix = (
@@ -738,6 +768,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'org.glite',
        'gridsite' => 'org',
        'px' => 'org.glite',
+       'canl' => 'emi',
 );
 
 %cvs_tag_prefix = (
@@ -747,6 +778,7 @@ for my $ext (keys %deps_aux) {
        'lbjp-common' => 'glite-',
        'gridsite' => '',
        'px' => 'glite-',
+       'canl' => 'emi-',
 );
 
 # ==== projects specification ====
@@ -758,6 +790,7 @@ for my $ext (keys %deps_aux) {
 #                        (${NAME.location}, ETICS conf. dependencies)
 # etics_projects ....... ETICS project names of externals
 # etics_externs_devel .. ETICS modules names of devel versions of externals
+# etics_locations ...... ETICS locations in ${NAME.location} properties
 # need_externs_aux ..... project-specific external dependencies
 # supported_platforms .. platforms supported by the project
 # modules .............. additional modules in subsystems
@@ -769,29 +802,38 @@ for my $ext (keys %deps_aux) {
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
-                       globus_essentials=>'vdt_globus_essentials',
-                       globus=>'globus',
-                       gridsite=>'org.gridsite.shared',
-                       yaim_core=>'org.glite.yaim.core',
-                       gip_release=>'glite-info-provider-release',
-                       gip_service=>'glite-info-provider-service',
-                       bdii=>'bdii',
-                       glite_version=>'glite-version',
-                       glite_info_templates=>'glite-info-templates',
-                       glue_schema=>'glue-schema',
-                       trustmanager=>'org.glite.security.trustmanager',
-                       axis=>'axis',
-                       lcas=>'org.glite.security.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'org.glite.build.common-cpp',
+                       default => {
+                               globus_essentials=>'vdt_globus_essentials',
+                               globus=>'globus',
+                               globus_proxy_utils=>'vdt_globus_essentials',
+                               gridsite=>'org.gridsite.shared',
+                               yaim_core=>'org.glite.yaim.core',
+                               gip_release=>'glite-info-provider-release',
+                               gip_service=>'glite-info-provider-service',
+                               bdii=>'bdii',
+                               glite_version=>'glite-version',
+                               glite_info_templates=>'glite-info-templates',
+                               glue_schema=>'glue-schema',
+                               trustmanager=>'org.glite.security.trustmanager',
+                               axis=>'axis',
+                               lcas=>'org.glite.security.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'org.glite.build.common-cpp',
+                               jdk=>'jdk',
+                       },
                },
                etics_externs_devel => {
-                       gridsite=>'org.gridsite.devel',
+                       default => {
+                               gridsite=>'org.gridsite.devel',
+                       },
                },
                etics_projects => {
-                       vdt=>[qw/globus globus_essentials gpt/],
+                       vdt=>[qw/globus globus_essentials globus_proxy_utils gpt/],
                        'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
+               etics_locations => {
+                       '*' => '',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
                        'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
@@ -799,10 +841,18 @@ for my $ext (keys %deps_aux) {
                        'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
                },
+               supported_platforms => {
+                       sl5_x86_64_gcc412 => 1,
+                       sl5_ia32_gcc412 => 1,
+                       deb5_x86_64_gcc432 => 1,
+                       deb5_ia32_gcc432 => 1,
+                       slc4_x86_64_gcc346 => 1,
+                       slc4_ia32_gcc346 => 1,
+               },
                modules => {
                        'lb' => [ qw/glite-LB/ ],
                        'px' => [ qw/glite-PX/ ],
-               }
+               },
        },
 
        emi => {
@@ -812,79 +862,141 @@ for my $ext (keys %deps_aux) {
                        'jp' => 'emi-',
                        'jobid' => 'emi-',
                        'lbjp-common' => 'emi-',
-                       'gridsite' => '',
+                       'gridsite' => 'emi-',
                        'px' => 'emi-',
+                       'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
-                       globus_essentials=>'globus-gssapi-gsi',
-                       globus=>'globus-gssapi-gsi-devel',
-                       gridsite=>'emi.gridsite.shared',
-                       yaim_core=>'emi.yaim.yaim-core',
-                       yaim_bdii=>'emi.bdii.yaim-bdii',
-                       gip_service=>'emi.bdii.glite-info-provider-service',
-                       bdii=>'emi.bdii.core',
-                       glite_version=>'emi.misc.glite-version',
-                       glue_schema=>'emi.bdii.glue-schema',
-                       trustmanager=>'emi.java-security.trustmanager',
-                       trustmanager_axis=>'emi.java-security.trustmanager-axis',
-                       axis=>'axis1.4',
-                       lcas=>'emi.sac.lcas',
-                       gsoapxx=>'-',
-                       build_common_cpp=>'emi.misc.glite.build-common-cpp',
-                       jdk=>'java',
+                       default => {
+                               globus_essentials=>'globus-gssapi-gsi',
+                               globus=>'globus-gssapi-gsi-devel',
+                               globus_proxy_utils=>'globus-proxy-utils',
+                               gridsite=>'emi.gridsite.shared',
+                               yaim_core=>'emi.yaim.yaim-core',
+                               yaim_bdii=>'emi.bdii.yaim-bdii',
+                               gip_service=>'emi.bdii.glite-info-provider-service',
+                               bdii=>'emi.bdii.core',
+                               glite_version=>'emi.emi-version',
+                               glue_schema=>'emi.bdii.glue-schema',
+                               trustmanager=>'emi.java-security.trustmanager',
+                               trustmanager_axis=>'emi.java-security.trustmanager-axis',
+                               axis=>'axis1.4',
+                               lcas=>'emi.sac.lcas',
+                               gsoapxx=>'-',
+                               build_common_cpp=>'emi.misc.glite.build-common-cpp',
+                               jdk=>'java',
+                       },
+                       sl5_x86_64_gcc412EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       sl6_x86_64_gcc445EPEL => {
+                               'myproxy-devel' => 'myproxy-devel.x86_64',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               axis => 'axis1.4',
+                               # mappings in ETICS project configuration
+                               #globus_essentials => 'libglobus-gssapi-gsi4',
+                               #globus => 'libglobus-gssapi-gsi-dev',
+                               #axis => 'libaxis-java',
+                               #cares => 'libc-ares2',
+                               #cppunit => 'libcppunit',
+                               #expat => 'libexpat1',
+                               #log4c => 'liblog4c3',
+                               #curl => 'libcurl3',
+                               #'mysql' => 'libmysqlclient16',
+                               #'mysql-devel' => 'libmysqlclient-dev',
+                               #libxslt => 'xsltproc',
+                               #'jakarta-commons-codec' => 'libcommons-codec-java',
+                               #'jakarta-commons-lang' => 'libcommons-lang-java',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #'perl-LDAP' => 'libnet-ldap-perl',
+                               #'fuse-lib' => 'libfuse2',
+                               #'fuse' => 'fuse-utils',
+                       },
                },
                etics_externs_devel => {
-                       cares => 'c-ares-devel',
-                       classads => 'classads-devel',
-                       cppunit => 'cppunit-devel',
-                       expat => 'expat-devel',
-                       gsoap => 'gsoap-devel',
-                       voms => 'org.glite.security.voms-api',
-                       libtar => 'libtar-devel',
-                       log4c => 'log4c-devel',
-                       postgresql => 'postgresql-devel',
-                       curl => 'curl-devel',
-                       libxml2 => 'libxml2-devel',
-                       openssl => 'openssl-devel',
-                       gridsite=>'emi.gridsite.devel',
-                       jdk=>'java-devel',
+                       default => {
+                               cares => 'c-ares-devel',
+                               classads => 'classads-devel',
+                               cppunit => 'cppunit-devel',
+                               expat => 'expat-devel',
+                               gsoap => 'gsoap-devel',
+                               voms => 'org.glite.security.voms-api',
+                               libtar => 'libtar-devel',
+                               log4c => 'log4c-devel',
+                               postgresql => 'postgresql-devel',
+                               curl => 'curl-devel',
+                               libxml2 => 'libxml2-devel',
+                               openssl => 'openssl-devel',
+                               gridsite=>'emi.gridsite.devel',
+                               jdk=>'java-devel',
+                       },
+                       deb6_x86_64_gcc445 => {
+                               # mappings in ETICS project configuration
+                               #cares => 'libc-ares-dev',
+                               #cppunit => 'libcppunit-dev',
+                               #expat => 'libexpat1-dev',
+                               #libtar => 'libtar-dev',
+                               #log4c => 'liblog4c-dev',
+                               #postgresql => 'libpq-dev',
+                               #curl => 'libcurl4-openssl-dev',
+                               #libxml2 => 'libxml2-dev',
+                               #openssl => 'libssl-dev',
+                               #'tetex-latex' => 'texlive-latex-extra',
+                               #libxslt=>'xsltproc',
+                               #'httpd-devel' => 'apache2-prefork-dev',
+                               #'fuse-devel' => 'libfuse-dev',
+                               #gsoap => 'gsoap',
+                       },
                },
                etics_projects => {
                        'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
+               etics_locations => {
+                       axis => 'axis',
+               },
                need_externs_aux => {
                        'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
-                       'lb.glite-LB' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+                       'lb.emi-lb' => [ qw/fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
                        'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R perl-LDAP:R/ ],
-                       'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+                       'px.emi-px' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
                        'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
                },
                supported_platforms => {
                        sl5_x86_64_gcc412EPEL => 1,
                        sl5_ia32_gcc412EPEL => 1,
+                       sl6_x86_64_gcc445EPEL => 1,
+                       deb6_x86_64_gcc445 => 1,
                },
                modules => {
                        'lb' => [ qw/emi-lb/ ],
                        'px' => [ qw/emi-px/ ],
-               }
+               },
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
        'gridsite.core' => {
-               sl5_x86_64_gcc412 => { aprSuffix => '1' },
-               sl5_ia32_gcc412 => { aprSuffix => '1' },
-               sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
-               sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
-               deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
-               deb5_ia32_gcc432 => { aprSuffix => '1.0' },
-               slc4_x86_64_gcc346 => { aprSuffix => '0' },
-               slc4_ia32_gcc346 => { aprSuffix => '0' },
-               default => { 
-               }
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc445EPEL => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
        },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
@@ -901,6 +1013,9 @@ for my $ext (keys %deps_aux) {
        'lb.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
+       'lb.nagios' => {
+               default => { 'package.buildarch' => 'noarch' },
+       },
        'px.yaim' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -918,20 +1033,26 @@ $buildroot{'gridsite.core'} = 'src';
 sub full
 {
        my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+       my $subsys = $short;
+       $subsys =~ s/\..*//;
+
+       my $cvs_prefix = exists $cvs_prefix{$subsys} ? $cvs_prefix{$subsys} : 'org.glite';
+       return $extrafull{$short} ? $extrafull{$short} : "$cvs_prefix.$short";
 }
 
 sub mkinc
 {
        my %aux;
+       my ($old_locale, $date);
        undef %aux;
        my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.nagios lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB lb.emi-lb
 lbjp-common.gss lbjp-common.gsoap-plugin
 jobid.api-c jobid.api-cpp jobid.api-java
 lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
 jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config px.emi-px
+canl.c
 /;
        @aux{@m} = (1) x ($#m+1);
 
@@ -960,10 +1081,23 @@ px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
                        }
                }
        }
+
+       mkdir $build."project" unless (-d $build."project");
+       open PKGCHL,">".$build."project/changelog"
+               or die $build."project/changelog: $!\n";
+       $old_locale = setlocale(LC_TIME);
+       setlocale(LC_TIME, "C");
+       $date = strftime("%a %b %d %Y", gmtime());
+       setlocale(LC_TIME, $old_locale);
+       print PKGCHL qq{* $date CESNET team <emi-lb\@metacentrum.cz>
+- automatically generated package
+};
+       close PKGCHL;
+
        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 changelog') {
+               for my $file ('.pre', '.post', '.preun', '.postun') {
                        my $pfile = "project/$file";
                        if (-f "$full/$pfile") {
                                mkdir "$build/project" unless (-d "$build/project");
@@ -1017,7 +1151,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1026,12 +1160,13 @@ sub mode_etics {
                ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
        }
        else { 
-               my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+               my $full = full "$subsys.$module";
+               my $path = "$full/project";
                if ($subsys eq 'gridsite') {
                        $path = "$cvs_prefix{$subsys}.$subsys.core/project";
                }
                open V,"$path/version.properties"
-                       or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+                       or die "$path/version.properties: $!\n";
        
                while ($_ = <V>) {
                        chomp;
@@ -1041,28 +1176,30 @@ sub mode_etics {
                close V;
        }
 
+       # XXX: --with ignored for platform-dependend packages
        my @copts = ();
        my %ge;
        @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
 
        for (@{$need_externs{"$subsys.$module"}}) {
            if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
                next if ($eext eq '-');
-               if ($project ne 'glite') {
+               if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_}) {
+                       $eext = $project{etics_locations}{$_} if ($project{etics_locations}{$_});
+                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+               } else {
                        if ($ge{$_} and not defined $externs{$_}{pkg}) {
                                push @copts, "--with-$_=\${stageDir}";
                        }
-               } else {
-                       push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
                }
            }
        }
 
        for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+               my $eext = $etics_externs{default}{$_} ? $etics_externs{default}{$_} : $_;
 
-               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+               push @copts,"--with-$_ \${$eext.location}$jar{$_}" if (defined $project{etics_locations}{'*'} or defined $project{etics_locations}{$_});
        }
 
        my $conf;
@@ -1098,8 +1235,10 @@ sub mode_etics {
        my $package_description = "";
        my $package_summary = "";
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+       my $cvs_module = full "$subsys.$module";
+
+       if (-e "$cvs_module/project/package.description") {
+               open V, "$cvs_module/project/package.description";
                $package_description = join ("", <V>);
                close V;
                chomp $package_description;
@@ -1109,8 +1248,8 @@ sub mode_etics {
        else { 
                print STDERR "package.description not found for $subsys.$module!\n"; }
 
-       if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
-               open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+       if (-e "$cvs_module/project/package.summary") {
+               open V, "$cvs_module/project/package.summary";
                $package_summary = join ("", <V>);
                close V;
                chomp $package_summary;
@@ -1121,50 +1260,103 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_module 2>/dev/null";
+       #$cmd_vcs{checkout} = "((test -d jra1mw/.git && (cd jra1mw; git pull)) || (git clone -q http://scientific.zcu.cz/git/jra1mw.git";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout -b \${tag} --track origin/epel)" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
-                       my ($flags, $prefix);
+                       my $flags;
 
                        if ($project ne 'glite') {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
-                               $prefix = 'prefix=${prefix}/usr';
+                               # don't evaluate pkg-config calls to get them into source package
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=\`pkg-config gsoap --variable=prefix\`
+       OPENSSL_GLOBUS_FLAGS=\`pkg-config globus-openssl --cflags\`
+       OPENSSL_GLOBUS_LIBS=\`pkg-config globus-openssl --libs\`';
                        } else {
-                               $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
-                               $prefix = 'prefix=${prefix}';
+                               $flags = 'RELEASE_VERSION=${age}.${platformFamily}
+       GSOAPDIR=${gsoap.location}
+       OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor}
+       OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}
+       HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
-                       $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
-                       $cmd{install} = "make $prefix $flags install";
-                       $cmd{packaging} = "mkdir \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz
-       make $prefix $flags rpm && \
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
+       project = $project
+       top_srcdir = ..
+       $flags
+       EOF";
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
+               if ($subsys eq 'lb' and $module eq 'client') {
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+               }
        }
 
        my $defprops = '';
@@ -1190,32 +1382,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
 
-[Platform-default:BuildCommand]
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
+
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-aprSuffix = 0
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1229,6 +1426,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1239,41 +1437,68 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }
 
-       print C qq{
-[Platform-default:DynamicDependency]
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               my $edev = $project{etics_externs_devel}{$_};
-               next if ($eext eq '-');
+       for my $platform ('default', keys %{$project{supported_platforms}}) {
+               my $used = 0;
+               my $output = '';
+
+               for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+                       my $eext = $etics_externs{$platform}{$_};
+                       my $edev = $project{etics_externs_devel}{$platform}{$_};
+
+                       # for the default platform using package of the same
+                       # name for runtime dependency
+                       if (not $eext) {
+                               if ($platform eq 'default') {
+#print "default runtime $_ on default\n";
+                                       $eext = $_; }
+                               else {
+#print "no runtime $_ on $platform\n";
+                                       $eext = '-'; }
+                       }
+                       if ($eext eq '-' and $edev eq '-') {
+#print "skipping $_ on $platform\n";
+                               next;
+                       }
 
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
+                       my $proj = 'externals';
+                       for my $p (keys %etics_projects) {
+                               for $m (@{$etics_projects{$p}}) {
+                                       $proj = $p if $m eq $_;
+                               }
                        }
-               }
 
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
+                       my $type = $need_externs_type{"$subsys.$module"}->{$_};
 
-               if ($edev) {
-                       if ($type eq 'B') {
-                               $eext = $edev; # no runtime - change to devel pkg
-                       } elsif ($type eq 'BR' or $type eq 'RB') {
-                               print C "$proj|$edev = B\n"; # additional devel pkg
+                       if ($edev) {
+                               if ($type eq 'B') {
+                                       # no runtime - change to devel pkg
+                                       $eext = $edev;
+                               } elsif ($type eq 'BR' or $type eq 'RB') {
+                                       # additional devel pkg
+                                       if ($edev ne '-') { $output .= "$proj|$edev = B\n"; }
+                               }
+                       }
+                       if ($eext ne '-') { $output .= "$proj|$eext = $type\n"; }
+               }
+
+               if ($platform eq 'default') {
+                       for (@{$deps{"$subsys.$module"}}) {
+                               my $type = $deps_type{"$subsys.$module"}->{$_};
+                               if (not $used) {
+                                       $used = 1;
+                               }
+                               $output .= "$project{etics_name}|$project{etics_name}.$_ = $type\n";
                        }
                }
-               print C "$proj|$eext = $type\n";
-       }
 
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+               if ($output) {
+                                       print C qq{
+[Platform-$platform:DynamicDependency]
+$output};
+               }
        }
 
        close C;
@@ -1344,6 +1569,62 @@ sub getlibdir {
         return $libdir;
 }
 
+sub reshuffle_platforms($$) {
+       my ($data, $platforms) = @_;
+       my ($platform, %blacklist, $value);
+
+       return if not $platforms;
+
+       for $platform (keys %$data) {
+#print "plat: $platform: $data->{$platform}\n";
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+#print "  blacklist: $_ = $data->{$platform}{$_}\n";
+                       $blacklist{$_} = 1;
+               }
+       }
+
+       for $_ (keys %blacklist) {
+               $value = $data->{default}{$_} ? $data->{default}{$_} : $_;
+               for $platform (keys %$platforms) {
+                       next if $platform eq 'default';
+                       if (not defined $data->{$platform}{$_}) {
+                               $data->{$platform}{$_} = $value;
+#print "added $value to $platform\n"
+                       }
+               }
+               $data->{default}{$_} = '-';
+#print "deleted $_ from default\n";
+       }
+
+       # merge dependencies across the supported platforms
+       %blacklist = [];
+       for $platform (keys %$platforms) {
+               next if $platform eq 'default';
+               for $_ (keys %{$data->{$platform}}) {
+                       $blacklist{$_} = 1;
+               }
+       }
+       for $_ (keys %blacklist) {
+               $value = undef;
+               $same = 1;
+               for $platform (keys %$platforms) {
+                       if (not $value) { $value = $data->{$platform}{$_}; }
+                       if (not $data->{$platform}{$_} or $value ne $data->{$platform}{$_}) {
+                               $same = 0;
+                               last;
+                       }
+               }
+               if ($same and $value) {
+#print "merged dependency $_\n";
+                       $data->{default}{$_} = $value;
+                       for $platform (keys %$platforms) {
+                               delete $data->{$platform}{$_};
+                       }
+               }
+       }
+}
+
 sub usage {
        my @ext = keys %externs;
        my @myjars = keys %jar;
@@ -1378,6 +1659,7 @@ What to build:
   --jp-tag=tag                 checkout JP modules with specific tag
   --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
   --jobid-tag=tag              checkout jobid modules with specific tag
+  --canl-tag=tag               checkout canl modules with specific tag
 
 Dependencies (summary of what will be used is always printed):
   --with-EXTERNAL=PATH         where to look for an external [autodetect]
index 320e968..2705339 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/jra1mw/org.glite.lbjp-common.trio/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
 module.version=2.1.2
-module.age=7
+module.age=8
index 8065827..da8a1f0 100644 (file)
@@ -1,3 +1,3 @@
 # : /cvs/glite/org.glite.lbjp-common/project/version.properties,v 1.1 2009/01/21 12:57:26 akrenek Exp $
-module.version=3.0.6
+module.version=3.0.7
 module.age=1