my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.1.2-2
 - Module rebuilt
 
+2.1.2-3
+- Module rebuilt
+
 2.2.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.2.0-5
 - Module rebuilt
 
+1.2.0-6
+- Module rebuilt
+
 1.3.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.2.0-5
 - Module rebuilt
 
+1.2.0-6
+- Module rebuilt
+
 1.3.0-1
 - Merge from branch_3_2
 
 
 
 GEN:=${stagedir}${prefix}/sbin/glite-lb-at3 ${top_srcdir}/project/genEventTypes.pl
 AT3DIR:=${stagedir}${prefix}/share/glite-lb/at3
-axis_classpath:=$(shell ${top_srcdir}/project/list-jars.sh ${axis_prefix}/lib ${axis_prefix}/share/java /usr/share/java /usr/lib/java)
+axis_classpath:=$(shell ${top_srcdir}/project/list-jars.sh ${axis_prefix}/lib ${axis_prefix}/share/java ${axis_prefix}/share/java/axis /usr/share/java /usr/lib/java /usr/lib/java/axis)
 trustmanager_classpath:=$(shell ls -1 ${trustmanager_prefix}/share/java/glite-security-trustmanager.jar ${trustmanager_prefix}/share/java/trustmanager.jar ${trustmanager_prefix}/share/java/trustmanager-axis.jar ${stagedir}${prefix}/share/java/trustmanager.jar ${stagedir}${prefix}/share/java/trustmanager-axis.jar 2>/dev/null | tr '\012' :)
 
 all compile: compile-java-axis compile-java-lb compile-java-gen compile-java-lb2 build-jar examples build-c
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.2.2-1
 - Limit number of jars used for axis (scanning script with the expected list)
 
+1.2.3-1
+- Improved building and packaging for Fedora and Debian
+
 1.3.0-1
 - Merge from branch_3_2
 
 
 Vendor: EMI
 Group: System Environment/Libraries
 BuildRequires: ant
+%if 0%{?fedora}
+BuildRequires: axis
+%else
 BuildRequires: axis1.4
+%endif
 BuildRequires: chrpath
 BuildRequires: emi-trustmanager
 BuildRequires: emi-trustmanager-axis
 
        #echo $prefix >&2
        for pkgid in $LIST; do
                #echo $pkgid >&2
-               for pkg in `ls -1 ${prefix}/${pkgid}*.jar 2>/dev/null`; do
+               for pkg in `ls -1 ${prefix}/${pkgid}*.jar ${prefix}/apache-${pkgid}*.jar 2>/dev/null`; do
                        if ! test -h ${pkg}; then
                                CP="$CP:${pkg}"
                        fi
 
 endif
 
 logevent: logevent.o args.o
-       ${LINK} -o $@ logevent.o args.o ${default_clientlib} ${EXT_LIB} 
+       ${LINK} -o $@ logevent.o args.o ${default_clientlib} ${EXT_LIB} ${PLUS_EXTRA_LIB} -lm
 
 notify: notify.o
-       ${LINKXX} -o $@ notify.o ${default_clientpluslib} ${EXT_LIB} ${PLUS_EXTRA_LIB}
+       ${LINK} -o $@ notify.o ${default_clientpluslib} ${EXT_LIB} ${PLUS_EXTRA_LIB}
 
 register_sandbox: %: %.o
-       ${LINK} -o $@ $@.o ${default_clientlib} ${EXT_LIB}
+       ${LINK} -o $@ $@.o ${default_clientlib} ${EXT_LIB} ${PLUS_EXTRA_LIB}
 
 ${TOOLS} ${EXAMPLES} ${EXAMPLES_CL}: %: %.o
-       ${LINK} -o $@ $< ${default_clientlib} ${default_commonlib} ${EXT_LIB} 
+       ${LINK} -o $@ $< ${default_clientlib} ${default_commonlib} ${EXT_LIB} ${PLUS_EXTRA_LIB}
 
 ${EXAMPLES_CL_THR}: %: %.o
-       ${LINK} -o $@ $< ${default_clientlib_thr} ${default_commonlib_thr} ${EXT_LIB} -lpthread
+       ${LINK} -o $@ $< ${default_clientlib_thr} ${default_commonlib_thr} ${EXT_LIB} ${PLUS_EXTRA_LIB} -lpthread
 
 ${TOOLS}: ${default_clientlib}
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
        else if ( src[i] == '>' ) *op = EDG_WLL_QUERY_OP_GREATER;
        else if ( src[i] == '<' )
        {
-               if ( (src[i+1] != '\0') && (src[++i] == '>') )
+               if ( (src[i+1] != '\0') && (src[i+1] == '>') ) {
                        *op = EDG_WLL_QUERY_OP_UNEQUAL;
-               else
+                       i++;
+               } else
                        *op = EDG_WLL_QUERY_OP_LESS;
        } 
        else return NULL;
 
 5.1.4-2
 - Module rebuilt
 
+5.1.5-1
+- Showing CREAM data for WMS+CREAM jobs in the job_status example
+- Fixed conditions parsing in the query_ext example
+- Avoid logging unnecessary events when registering sandbox transfers
+
 5.2.0-1
 - Torque jobs support
 - Showing CREAM data for WMS->CREAM jobs
 
 
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/ test_parse il_test parse.cpp events.tex status.tex
+       rm -rvf ${REPORTS}
        rm -rvf dist ${package}-*.tar.gz
 
 distclean:
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 8.1.3-3
 - Module rebuilt
 
+8.1.4-1
+- Missing files in clean targets added
+- Handling seqnumbers for jobs going through CREAM
+
 8.2.0-1
 - Merge from branch_3_2
 - Torque jobs support
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.3.4-1
 - CREAM and SB Transfers documentation
 
+1.3.5-1
+- Added dependency on LaTex for Debian and Fedora.
+- New functionality tests described
+- L&B 2.0 not to be advertised as stable release anymore
+
 1.4.0-1
 - Merge from branch_3_2
 
 
 \hline
 {\tt lb-test-notif-keeper.sh} & Test the \texttt{notif-keeper} script \\
 \hline
+{\tt lb-test-dump-load.sh} & Test the dump (backup) and load (restore) procedure \\
+\hline
+{\tt lb-test-collections.sh} & A placeholder for collection-specific regression tests \\
+\hline
 \end{tabularx}
 
 \subsubsection{Event logging examples}
 
 \result\ All information was succesfully downloaded and matched expectations.
 
+\subsubsection{Dump \& Load Events}
+\label{dumpload}
+\req\ All \LB\ services configured and running.
+
+\what
+\begin{enumerate}
+\item Register tests jobs of all applicable types, including collections and DAGs
+\item Generate events to change the state of all types of test jobs. At least one subjob in any type of collection must remain free of events to test embryonic registration
+\item Check all those jobs are in their expected states.
+\item Dump events for all test jobs
+\item Purge all test jobs from the \LB server
+\item Test that all test jobs were actually purged (status query must return \texttt{EIDRM})
+\item Load dumped events
+\item Check that all test jobs are in their expected states as before
+\end{enumerate}
+
+\how\ \ctblb{lb-test-dump-load.sh}
+
+\result\ All jobs were first purged and then restored to their previous states.
+
+\note\ The test registers multiple jobs for each type to reduce the probability of an accidental positive result (could be caused by random event ordering).
+
+\note\ The probe includes artificial delays (about 12\,s worth) but also performs a lot of action. The test takes approx. 150\,s to finish.
+
+\subsubsection{Collection-specific tests}
+\label{dumpload}
+\req\ All \LB\ services configured and running.
+
+\what
+\begin{enumerate}
+\item Register a collection
+\item Try querying for jobs by parent ID only
+\end{enumerate}
+
+\how\ \ctblb{lb-test-collections.sh}
+
+\result\ Children were returned.
+
 
 \section{LB ``In the Wild''---Real-World WMS Test}
 \req\ All \LB services running, working grid infrastructure accessible (including permissions). 
 
 \item \LBver{3.2}: included in the EMI-2 \emph{Matterhorn} release
 \item \LBver{3.1}: an update for the EMI-1 \emph{Kebnekaise} release
 \item \LBver{3.0}: included in the EMI-1 \emph{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,
-\item \LBver{1.x}: old stable version, in production as part of gLite 3.1.
+\item \LBver{2.1}: replacement for \LBver{2.0} in gLite 3.2
+\item \LBver{2.0}: included in gLite 3.2 release
+\item \LBver{1.x}: included in gLite 3.1 release
 \end{itemize}
-\textbf{The older version of \LB that appeared in gLite 3.0 became obsolete and is not maintained anymore.}
 
 \textbf{\LB packages can be obtained from two distinguished sources:}
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 }
 %project = %{$projects{$project}};
 $project_version = $project{current_version} unless $project_version;
+if ($project ne 'emi' or $project_version <= 1) {
+       $lbmodules{'gridsite'} = [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ];
+}
 for my $platform (keys %{$project{etics_externs}}) {
        for $_ (keys %{$project{etics_externs}{$platform}}) {
                $etics_externs{$platform}{$_} = $project{etics_externs}{$platform}{$_};
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.libs' => [ qw/libxml2:R openssl:R/ ],
+       'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
        'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.commands' => [ qw/gridsite.core:B/ ],
        'gridsite.apache' => [ qw/gridsite.core:B/ ],
        'gridsite.libs' => [ qw/gridsite.core:B / ],
+       'gridsite.shared' => [ qw/gridsite.core:B / ],
        'gridsite.devel' => [ qw/gridsite.core:B/ ],
        'gridsite.slashgrid' => [ qw/gridsite.core:B/],
        'gridsite.services' => [ qw/gridsite.core:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        }
 
                        $cmd{default}{configure} = "cat > Makefile.inc <<EOF
-       project = $project
+       project = $project$project_version
        top_srcdir = ..
        $flags
        EOF";
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 Package: emi-lb
 Section: net
 Architecture: any
-Depends: ${misc:Depends}, bdii, emi-version, fetch-crl, glite-lb-client-java, glite-lb-client-progs, glite-lb-doc, glite-lb-harvester, glite-lb-logger, glite-lb-logger-msg, glite-lb-server, glite-lb-utils, glite-lb-ws-test, glite-lb-yaim, glue-schema
-Recommends: glite-info-provider-service
+Depends: ${misc:Depends}, bdii, emi-version, fetch-crl, glite-lb-client-progs, glite-lb-doc, glite-lb-harvester, glite-lb-logger, glite-lb-logger-msg, glite-lb-server, glite-lb-utils, glite-lb-ws-test, glue-schema
+Recommends: glite-info-provider-service glite-lb-client-java glite-lb-yaim
 Description: @SUMMARY@
 @DEBIAN_DESCRIPTION@
 
 Requires: bdii
 Requires: emi-version
 Requires: fetch-crl
+%if ! 0%{?fedora}
 Requires: glite-lb-client-java
+%endif
 Requires: glite-lb-client-progs
 Requires: glite-lb-doc
 Requires: glite-lb-harvester
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.2.3-2
 - Module rebuilt
 
+1.2.3-3
+- Module rebuilt
+
 1.3.0-1
 - Fixed template database encoding
 
 
 version=${module.version}
 
 CC=gcc
-CXX=gcc
+CXX=g++
 
 VPATH:=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc:${top_srcdir}/examples:${top_srcdir}/config
 
        gzip -f $(notdir $?)
 
 glite-lb-cmsclient: cmsclient.o
-       $(CC) $< ${EXT_LIB} -o $@
+       $(CXX) $< ${EXT_LIB} -o $@
 
 man: ${MAN_GZ}
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.1.3-3
 - Module rebuilt
 
+1.1.4-1
+- Improved build and packaging for Fedora
+- Alternative activemq-cpp library package name supported on Fedora
+
 1.2.0-1
 - Merge from branch_3_2
 
 
 License: ASL 2.0
 Vendor: EMI
 Group: System Environment/Daemons
+%if 0%{?fedora}
+BuildRequires: activemq-cpp-devel%{_isa}
+%else
 BuildRequires: activemq-cpp-library
+%endif
 BuildRequires: cppunit-devel%{?_isa}
 BuildRequires: glite-lb-logger-devel%{?_isa}
 BuildRequires: glite-lbjp-common-log-devel%{?_isa}
 
 
 GLITE_LBJP_COMMON_GSS_CFLAGS?=`PKG_CONFIG_PATH=$$PKG_CONFIG_PATH:${PREFIX}${prefix}/${libdir}/pkgconfig pkg-config glite-security-gss --cflags`
 
+os=${shell uname}
+DL_LIBS=
+ifeq (${os},Linux)
+       DL_LIBS=-ldl
+endif
+
 DEBUG:=-g -O0
 CFLAGS:=${DEBUG} \
        -I${stagedir}${prefix}/include -I${top_srcdir}/src -I${top_srcdir}/interface \
 HDRS:=interlogd.h il_error.h
 
 COMMON_LIB:=-lglite_lb_common
-
-EXT_LIB:=-lglite_lbu_trio -lglite_lbu_log
-
 GLITE_GSS_LIB:=-lglite_security_gss
 
+EXT_LIB:=-lglite_lbu_trio -lglite_lbu_log ${GLITE_GSS_LIB} -lglite_jobid
+
 CPPUNIT_LIBS?=-L${cppunit_prefix}/${libdir} -lcppunit
 CPPUNIT_CFLAGS?=-I${cppunit_prefix}/include
 
        ${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} -lpthread
+       ${LINK} -o $@ ${INTERLOG_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread ${DL_LIBS}
 
 glite-lb-notif-interlogd: ${INTERLOG_NOTIF_OBJS}
-       ${LINK} -export-dynamic -o $@ ${INTERLOG_NOTIF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
+       ${LINK} -export-dynamic -o $@ ${INTERLOG_NOTIF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread ${DL_LIBS}
 
 glite-lb-interlogd-perf: ${INTERLOG_PERF_OBJS}
        ${LINK} -o $@ ${INTERLOG_PERF_OBJS} ${COMMON_LIB}${default_thrflavour} ${EXT_LIB} -lpthread
        -echo commented out -- fix needed
 
 check.il: ${INTERLOG_TEST_OBJS}
-       ${LINKXX} -o $@ ${COMMON_LIB}${default_thrflavour} ${CPPUNIT_LIBS} ${EXT_LIB} -lpthread $+
+       ${LINKXX} -o $@ ${COMMON_LIB}${default_thrflavour} ${CPPUNIT_LIBS} ${GLITE_GSS_LIB} -lglite_jobid -lpthread ${DL_LIBS} $+
 
 install:
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/bin
 
 clean:
        rm -rvf .libs/ *.o *.lo *.no ${LOGD} ${INTERLOGD} ${NOTIF_INTERLOGD} ${MAN_GZ} startup
+       rm -rvf check.ll check.il
        rm -rvf dist ${package}-*.tar.gz
 
 distclean:
        rm -rvf Makefile.inc *.spec debian/
 
-.PHONY: default all compile man stage check check.il check.ll install clean distclean dist distcheck
+.PHONY: default all compile man stage check install clean distclean dist distcheck
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.3.4-2
 - Module rebuilt
 
+2.3.5-1
+- Improved build and packaging for Fedora
+- Fix for notification interlogger failures (bug #95013)
+- Explicit pkg-config dependency
+
 2.4.0-1
 - Merge from branch_3_2
 - Torque jobs support
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.1.1-4
 - Module rebuilt
 
+1.1.1-5
+- Module rebuilt
+
 1.2.0-1
 - Merge from branch_3_2
 
 
 endif
 CLASSADS_CFLAGS?=-I${classads_prefix}/include -I${classads_prefix}/include/classad
 CLASSADS_LIBS?=${classads_libs} -lclassad
+classad_namespace:=${shell if ${classads_prefix}/bin/classad_version | grep -i 'classad namespace.*yes' >/dev/null; then echo yes; fi}
+ifeq (${classad_namespace},yes)
+CLASSADS_CFLAGS+=-DCLASSAD_NAMESPACE=classad::
+else
+CLASSADS_CFLAGS+=-DCLASSAD_NAMESPACE=
+endif
 
 ifneq (${cares_prefix},/usr)
        cares_libs := -L${cares_prefix}/${libdir} -L${cares_prefix}/lib
 LIBCARES_LIBS?=${cares_libs} -lcares
 
 GSOAP_CFLAGS?=-I${gsoap_prefix}/include -I${gsoap_prefix}/
+ifeq (${expat_prefix},/usr)
+EXPAT_CFLAGS?=
+EXPAT_LIBS?=-lexpat
+else
 EXPAT_CFLAGS?=-I${expat_prefix}/include
+EXPAT_LIBS?=-L${expat_prefix}/${libdir} -lexpat
+endif
 GLOBUS_GSSAPI_GSI_CFLAGS?=-I${globus_prefix}/include/${nothrflavour}
 KERBEROS_GSSAPI_GSI_CFLAGS=-DNO_GLOBUS_GSSAPI
 
 gsoap_bin_prefix:=${shell if [ -x  ${gsoap_prefix}/bin/soapcpp2 ]; then echo ${gsoap_prefix}/bin; else echo ${gsoap_prefix}; fi }
 
 EXT_LIBS:=  \
-       -lz \
        ${GRIDSITE_LIBS} \
        ${CLASSADS_LIBS} \
        ${LIBCARES_LIBS} 
 ifeq ($(shell test -f ${stagedir}${prefix}/${libdir}/libglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}_c.so && echo ok),ok)
        langflavour:=_c
 endif
-GSOAP_LIB:=-L${stagedir}${prefix}/${libdir} -lglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}${langflavour}
+GSOAP_LIB:=-L${stagedir}${prefix}/${libdir} -lglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}${langflavour} -lglite_security_gss${default_flavour} ${GSOAP_LIBS}
 
 ifeq ($(GLITE_LB_SERVER_WITH_WS),yes)
        BKSERVER_OBJS:= \
                ${LB_UTILS_DB_LIB} \
                ${GSOAP_LIB} \
                ${EXT_LIBS} \
-               ${classadslib} \
+               ${EXPAT_LIBS} \
                -lglite_lbu_maildir \
-               -lglite_lbu_log
+               -lglite_lbu_log \
+               -lglite_lbu_trio \
+               -lglite_jobid
 else
        BKSERVER_OBJS:= ${BKSERVER_BASE_OBJS}
                
                ${LB_UTILS_DB_LIB} \
                -lglite_security_gss${default_flavour} \
                ${EXT_LIBS} \
-               ${classadslib} \
+               ${EXPAT_LIBS} \
                -lglite_lbu_maildir \
-               -lglite_lbu_log
+               -lglite_lbu_log \
+               -lglite_lbu_trio \
+               -lglite_jobid
 endif
 
 INDEX_OBJS:= index.o index_parse.o jobstat_supp.o openserver.o \
        lb_authz.o store.o bkindex.o stats.o server_stats.o\
        request.o db_store.o srv_purge.o notif_match.o il_lbproxy.o dump.o lb_xml_parse.o il_notification.o lb_proto.o lb_text.o server_state.o lb_xml_parse_V21.o lb_html.o cond_dump.o notification.o seqcode.o userjobs.o load.o db_calls.o db_supp.o lb_rss.o pretty_print_wrapper.o authz_policy.o crypto.o
 
-INDEX_LIBS:= ${SRVBONES_LIB} ${COMMON_LIBS} ${LB_MACHINE_LIB} ${EXT_LIBS} ${LB_UTILS_DB_LIB}
+INDEX_LIBS:= ${SRVBONES_LIB} ${COMMON_LIBS} ${LB_MACHINE_LIB} ${EXT_LIBS} \
+       ${EXPAT_LIBS} ${LB_UTILS_DB_LIB} -lglite_lbu_trio -lglite_jobid
 
 WS_CLIENT_OBJS:= $(GSOAP_FILES_PREFIX)C.o $(GSOAP_FILES_PREFIX)Client.o ws_fault.o ws_typeref.o
 WS_CLIENT_LIBS:= ${GSOAP_LIB} -lglite_lb_common${default_flavour} \
        crypto.o
 
 MONDB_OBJS:=mon-db.o ${LIB_OBJS_BK}
-MONDB_LIBS:=${COMMON_LIBS} ${LB_MACHINE_LIB} ${LB_UTILS_DB_LIB} ${EXT_LIBS}
+MONDB_LIBS:=${COMMON_LIBS} ${LB_MACHINE_LIB} ${LB_UTILS_DB_LIB} ${EXT_LIBS} \
+       ${EXPAT_LIBS} -lglite_lbu_trio -lglite_jobid
 
 ifeq (${GLITE_LB_SERVER_WITH_LCAS},yes)
 LCAS_PLUGIN_OBJS:=lcas_lb.o
 
 test_xml: test_xml.cpp
        ${CXX} -c ${CFLAGS} ${CPPUNIT_CFLAGS} $<
-       ${LINKXX} -o $@ test_xml.o lb_xml_parse.o ${LB_COMMON_LIB} ${CPPUNIT_LIBS}
+       ${LINKXX} -o $@ test_xml.o lb_xml_parse.o ${LB_COMMON_LIB} ${CPPUNIT_LIBS} ${EXPAT_LIBS} -lglite_lbu_trio -lglite_jobid
 
 test.query: test_query_events
        # XXX coredumps ./test_query_events
 
 test_query_events: ${query_events_objs}
        ${LINKXX} -o $@ ${query_events_objs} \
-       ${CPPUNIT_LIBS} ${LB_COMMON_LIB} ${LB_MACHINE_LIB} ${classadslib} -lglite_lbu_log
+       ${CPPUNIT_LIBS} ${LB_COMMON_LIB} ${LB_MACHINE_LIB} ${CLASSADS_LIBS} -lglite_lbu_log -lglite_lbu_trio -lglite_security_gss${default_flavour} -lglite_jobid
 
 test.soapconv: test_soap_conv
        LD_LIBRARY_PATH=${cares_prefix}/${libdir}:${classads_prefix}/${libdir}:${LD_LIBRARY_PATH} ./test_soap_conv
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
   - Explicit pkg-config dependency (needed to build lbjp-common.gss on Debian)
 - Enabling job status queries over socket (fixes the proxy purge, second part of the SB #88630)
 
+2.3.6-1
+- Improved building and packaging for Fedora
+- New convenience function to check current user's (ctx) authorization for actions
+- Fixed dump/load
+  - Generate fake registration events for subjobs on dump
+  - Register jobs on load, recalculate states
+  - Greyjobs temporarily allowed when loading from a dump file
+  - Not only events but also jobs stored in DB on load (SB #92557, SB #92564)
+  - Jobs registered on load, states recalculated
+- Fixed crash when building with -O2
+- Fixed handling of READ_ANONYMIZED permission in queries
+- Owner-based conditions forbidden in notif registrations if the only authorization category is READ_ANONYMIZED (fixes a possible security issue)
+- Fixed crash when running without owner index.
+- Job listing over HTML simplified (algorithm complexity reduced)
+- HTML/text output production now in a single function
+- Server statistics available in text format as well as in HTML
+- Stats list constructed systematically
+- Error code returned if statistics cannot be retireved
+- The READ_ALL auth rule observed in event-only queries. Fix for SB #92128
+- End of notification stream also when error occures. Preventively keep ending item in the array anyway.
+- Fixed the <> relationship evaluation for JDL attribute queries
+- CREAM jobs also turned to zombies on purge
+
 2.4.0-1
 - Resolved packaging warnings
 - Job status queries over socket enabled (fixes the proxy purge, second part of the SB #88630)
 
                                                        edg_wll_SetError(ctx, ENOMEM, "edg_wll_JobStatusServer() calloc children_states failed!");
                                                        goto rollback;
                                                }
-                                               while ((num_f = edg_wll_FetchRow(ctx, sh, sizeof(out_stat), NULL, out_stat)) == 3
+                                               while ((num_f = edg_wll_FetchRow(ctx, sh, sizeof(out_stat)/sizeof(out_stat[0]), NULL, out_stat)) == 3
                                                        && i < num_sub) {
                                                        if (!strcmp(INTSTAT_VERSION,out_stat[0])) {
                                                                js = dec_intJobStat(out_stat[1], &s_out);
 
 #include <string.h>
 
 int pretty_print(char *jdl, char **formated_print){
-       ClassAd        *classad;
-       ClassAdParser  parser;
+       CLASSAD_NAMESPACE ClassAd        *classad;
+       CLASSAD_NAMESPACE ClassAdParser  parser;
 
        classad = parser.ParseClassAd(std::string(jdl), true);
        if (! classad){
                return -1;      // not ClassAd data
        }
 
-       PrettyPrint     pp;
+       CLASSAD_NAMESPACE PrettyPrint   pp;
        std::string buf;
        pp.Unparse(buf, classad);
        *formated_print = strdup(buf.c_str());
 
        size_t maxn = store->maxn;
        void *tmp;
 
-       if (n >= maxn) {
+       // one more item for the array ending shouldn't be needed,
+       // only preventively here
+       if (n + 1 >= maxn) {
                maxn = maxn ? maxn << 1 : 256;
-               if ((tmp = realloc(store->jobs, maxn * sizeof(*store->jobs))) == NULL)
+               if ((tmp = realloc(store->jobs, (maxn + 1) * sizeof(*store->jobs))) == NULL)
                        return edg_wll_SetError(ctx, errno ? : ENOMEM, NULL);
                store->jobs = tmp;
 
                if (!(store->flags & EDG_WLL_STAT_NO_STATES)) {
-                       if ((tmp = realloc(store->states, maxn * sizeof(*store->states))) == NULL)
+                       if ((tmp = realloc(store->states, (maxn + 1) * sizeof(*store->states))) == NULL)
                                return edg_wll_SetError(ctx, errno ? : ENOMEM, NULL);
                        store->states = tmp;
                }
 
                store->maxn = maxn;
        }
+
        store->jobs[n] = jobid;
+       store->jobs[n + 1] = NULL;
+
        if (!(store->flags & EDG_WLL_STAT_NO_STATES)) {
                if (status) store->states[n] = *status;
                else memset(&store->states[n], 0, sizeof(*store->states));
+               memset(&store->states[n + 1], 0, sizeof(*store->states));
        }
        store->n++;
 
                }
        }
 
+cleanup:
        // finish
        cb(ctx, NULL, NULL, data);
 
-cleanup:
        free(qbase);
        free(state_where);
        free(tags_where);
 
                                                if ( !strcmp(conds[i][j].value.c, extr_val) ) {
                                                        if ( conds[i][j].op == EDG_WLL_QUERY_OP_EQUAL ) goto or_satisfied;
-                                                       else if ( conds[i][j].op == EDG_WLL_QUERY_OP_UNEQUAL ) goto or_satisfied;
                                                }
+                                               else if ( conds[i][j].op == EDG_WLL_QUERY_OP_UNEQUAL ) goto or_satisfied;
                                        }
                                }
                                break;
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.3.2-3
 - Module rebuilt
 
+1.3.3-1
+- Affected JobID added wen logging 'really running on a bad branch' (SB #92129)
+
 1.4.0-1
 - Merge from branch_3_2
 - Torque jobs support
 
                        /* consistence check -- should not receive two contradicting ReallyRunning's within single
                           deep resub cycle */
                        if (fine_res == RET_BADBRANCH) {
+                               char *jobid_s;
+
+                               jobid_s = glite_jobid_unparse(e->any.jobId);
                                syslog(LOG_ERR,"ReallyRunning on bad branch %s (%s)",
                                                e->any.source == EDG_WLL_SOURCE_LOG_MONITOR ? e->reallyRunning.wn_seq : e->any.seqcode,
-                                               e->any.jobId);
+                                               jobid_s);
+                               free(jobid_s);
                                break;
                        }
                        /* select the branch unless TOOOLD, i.e. before deep resubmission */
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.3.1-4
 - Module rebuilt
 
+1.3.1-5
+- Module rebuilt
+
 1.4.0-1
 - Merge from branch_3_2
 - Torque jobs support
 
 PREFIX=/opt/glite
 prefix=
 
-expat_prefix=/opt/expat
 gsoap_prefix=/opt/gsoap
 
 default: all
 
 DEBUG:=-g -O0 -Wall
 
-ifneq (${expat_prefix},/usr)
-       expatlib := -L${expat_prefix}/${libdir} -L${expat_prefix}/lib
-endif
-EXPAT_CFLAGS?=-I${expat_prefix}/include
-EXPAT_LIB?=${expatlib} -lexpat
 GSOAP_CFLAGS?=-I${gsoap_prefix}/include -I${gsoap_prefix}/
 GLITE_LBJP_COMMON_GSS_CFLAGS?=`PKG_CONFIG_PATH=$$PKG_CONFIG_PATH:${PREFIX}${prefix}/${libdir}/pkgconfig pkg-config glite-security-gss --cflags`
 
        -DVERSION=\"${version}\" \
        -I${stagedir}${prefix}/include -I${top_srcdir}/src -I. \
        -I${top_srcdir}/interface \
-       ${EXPAT_CFLAGS} \
        ${GSOAP_CFLAGS} \
        ${COVERAGE_FLAGS} \
        -D_GNU_SOURCE ${GLITE_LBJP_COMMON_GSS_CFLAGS} ${CFLAGS}
 LINKXX:=libtool --mode=link  ${CXX} -rpath ${stagedir}${prefix}/${libdir} ${LDFLAGS}
 XSLTPROC:=xsltproc --novalid
 
-EXT_LIBS:= ${EXPAT_LIBS}
+EXT_LIBS:=
 
 ifeq (${thrflavour},)
 COMMON_LIB:=-lglite_lb_common
 JP_LIBS:=-lglite_jp_common_${nothrflavour}
 endif
 
-UTILS:=mon purge dump load dump_exporter
-ALLUTILS:=${UTILS} state_history statistics
+os=${shell uname}
+DL_LIBS=
+ifeq (${os},Linux)
+       DL_LIBS=-ldl
+endif
+
+UTILS:=purge dump load
+ALLUTILS:=${UTILS} mon dump_exporter state_history statistics
 STATISTICS_OBJS:=statistics.o process_attrs.o process_attrs2.o
 
 MAN_GZ:=glite-lb-mon.1.gz
 ${UTILS}: %: %.o
        ${LINK} -o $@ $< ${COMMON_LIB} ${CLIENT_LIB} ${EXT_LIBS} -lglite_lbu_maildir
 
+mon: %: %.o
+       ${LINK} -o $@ $< ${COMMON_LIB} ${CLIENT_LIB} ${EXT_LIBS} -lglite_jobid
+
+dump_exporter: %: %.o
+       ${LINK} -o $@ $< ${COMMON_LIB} ${CLIENT_LIB} ${EXT_LIBS} -lglite_jobid -lglite_lbu_maildir
+
 statistics: ${STATISTICS_OBJS}
-       ${LINK} -rdynamic -o $@ ${STATISTICS_OBJS} ${COMMON_LIB} ${JP_LIBS} ${EXT_LIBS} 
+       ${LINK} -rdynamic -o $@ ${STATISTICS_OBJS} ${COMMON_LIB} ${JP_LIBS} ${EXT_LIBS} -lglite_lbu_trio ${DL_LIBS}
 
 state_history: state_history.o
-       ${LINK} -o $@ state_history.o -lglite_lb_statemachine ${PLUS_LIB}
+       ${LINK} -o $@ state_history.o -lglite_jobid ${COMMON_LIB} ${CLIENT_LIB} -lglite_lb_statemachine ${PLUS_LIB}
 
 check: compile 
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.2.1-4
 - Module rebuilt
 
+2.2.2-1
+- Improve build and packaging for Fedora
+- Explicit pkg-config dependency
+
 2.3.0-1
 - Merge from branch_3_2
 
 
 #include <sys/time.h>
 
 
+#include "glite/jobid/cjobid.h"
 #include "glite/lbu/maildir.h"
 #include "glite/lb/context.h"
 #include "glite/lb/events.h"
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 3.3.1-4
 - Module rebuilt
 
+3.3.1-5
+- Module rebuilt
+
 3.4.0-1
 - Torque jobs support
 
 
 ifeq ($(shell test -f ${stagedir}${prefix}/${libdir}/libglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}_c.so && echo ok),ok)
        langflavour:=_c
 endif
-GSOAP_LIB:=-L${stagedir}${prefix}/${libdir} -lglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}${langflavour}
+GSOAP_LIB:=-L${stagedir}${prefix}/${libdir} -lglite_security_gsoap_plugin_${dotless_gsoap_ver}${default_flavour}${langflavour} ${GSOAP_LIBS}
 
 WS_CLIENT_OBJS:= $(GSOAP_FILES_PREFIX)C.o $(GSOAP_FILES_PREFIX)Client.o ws_fault.o
 # ws_typeref.o
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.3.0-5
 - Module rebuilt
 
+1.3.1-1
+- Improved build and packaging for Fedora
+- Explicit pkg-config dependency
+
 1.4.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 4.4.3-2
 - Module rebuilt
 
+4.4.3-3
+- Module rebuilt
+
 4.5.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 3.1.2-2
 - Module rebuilt
 
+3.1.3-1
+- Explicit pkg-config dependency
+- Using less portable timegm() instead of mktime() and setenv(). Not touching environment is better for thread applications and the code is reduced.
+
 3.2.0-1
 - Merge from branch_3_2
 
 
 
 int glite_lbu_InitDBContextPsql(glite_lbu_DBContext *ctx_gen) {
        glite_lbu_DBContextPsql ctx;
-       int err = 0;
 
        ctx = calloc(1, sizeof *ctx);
        if (!ctx) return ENOMEM;
 
 #include <errno.h>
 #include <pthread.h>
 #include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
+#include <time.h>
 #include <unistd.h>
 
 #include <glite/lbu/trio.h>
 }
 
 
-static time_t tm2time(struct tm *tm) {
-       static struct tm tm_last = { tm_year:0, tm_mon:0 };
-       static time_t t = (time_t)-1;
-       static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-       char *tz;
-
-       pthread_mutex_lock(&lock);
-       if (tm->tm_year == tm_last.tm_year && tm->tm_mon == tm_last.tm_mon) {
-               t = t + (tm->tm_sec - tm_last.tm_sec)
-                     + (tm->tm_min - tm_last.tm_min) * 60
-                     + (tm->tm_hour - tm_last.tm_hour) * 3600
-                     + (tm->tm_mday - tm_last.tm_mday) * 86400;
-               memcpy(&tm_last, tm, sizeof tm_last);
-       } else {
-               tz = getenv("TZ");
-               if (tz) tz = strdup(tz);
-               setenv("TZ", "UTC", 1);
-               tzset();
-
-               t =  mktime(tm);
-               memcpy(&tm_last, tm, sizeof tm_last);
-
-               if (tz) setenv("TZ", tz, 1);
-               else unsetenv("TZ");
-               free(tz);
-               tzset();
-       }
-       pthread_mutex_unlock(&lock);
-
-       return t;
-}
-
-
 time_t glite_lbu_StrToTime(const char *str) {
        struct tm       tm;
 
        tm.tm_year -= 1900;
        tm.tm_mon--;
 
-       return tm2time(&tm);
+       return timegm(&tm);
 }
 
 
        tm.tm_mon--;
        tm.tm_sec = sec;
 
-       return (sec - tm.tm_sec) + tm2time(&tm);
+       return (sec - tm.tm_sec) + timegm(&tm);
 }
 
 
 
 
 int glite_lbu_DBQueryCaps(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return EINVAL;
+       if (!VALID(ctx->backend)) return -1;
        return backends[ctx->backend]->queryCaps(ctx);
 }
 
 
 
 int glite_lbu_FetchRow(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
+       if (!VALID(stmt->ctx->backend)) return -1;
        return backends[stmt->ctx->backend]->fetchRow(stmt, n, lengths, results);
 }
 
 
 
 int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt) {
-       if (!VALID(ctx->backend)) return EINVAL;
+       if (!VALID(ctx->backend)) return -1;
        return backends[ctx->backend]->execSQL(ctx, cmd, stmt);
 }
 
 
 
 int glite_lbu_ExecPreparedStmt_v(glite_lbu_Statement stmt, int n, va_list ap) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
+       if (!VALID(stmt->ctx->backend)) return -1;
        return backends[stmt->ctx->backend]->execPreparedStmt_v(stmt, n, ap);
 }
 
 
 
 long int glite_lbu_Lastid(glite_lbu_Statement stmt) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
+       if (!VALID(stmt->ctx->backend)) return 0;
        return backends[stmt->ctx->backend]->lastid(stmt);
 }
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 3.1.2-2
 - Module rebuilt
 
+3.1.2-3
+- Module rebuilt
+
 3.2.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 3.1.3-2
 - Module rebuilt
 
+3.1.4-1
+- Explicit dependency on pkg-config
+- Specify proper length of strings (GGUS #82746), fixes behaviour with Globus >= 5.2.1
+
+3.1.4-2
+- Module rebuilt
+
 3.2.0-1
 - -L/usr/lib not added explicitly to link options
 - Merge from branch_3_2
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.2.1-2
 - Module rebuilt
 
+2.2.1-3
+- Module rebuilt
+
 2.3.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 1.2.0-5
 - Module rebuilt
 
+1.2.0-6
+- Module rebuilt
+
 1.3.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.2.1-4
 - Module rebuilt
 
+2.2.1-5
+- Module rebuilt
+
 2.3.0-1
 - Merge from branch_3_2
 
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.2.2-2
 - Module rebuilt
 
+2.2.2-3
+- Module rebuilt
+
 2.3.0-1
 - Merge from branch_3_2
 
 
 
 clean:
        rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
-       rm -vf trio_test
+       rm -rvf trio_test ${REPORTS}
        rm -rvf dist ${package}-*.tar.gz
        
 distclean:
 
 my $debug = 0;
 my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
 
-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 nagios/;
+my @nodes = qw/client server logger logger-msg nagios utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal canl/;
+my @default_nodes = qw/lb px proxyrenewal nagios canl/;
 my %enable_nodes;
 my %disable_nodes;
 my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
        gridsite => {
                prefix => '/opt/glite'
        },
-       lcas => {
-               prefix => '/opt/glite',
-               pkg => 'lcas'
-       },
        trustmanager => {
                prefix => '/opt/glite'
        },
 
                print MAK "all: @modules\n\n";
                print MAK "stage: ".(join '-stage ', @modules)."-stage\n\n";
-               print MAK "clean check install:\n";
+               print MAK "clean check install dist distcheck rpm deb:\n";
 
                for (@modules) {
                        my $full = full($_);
                        print MAK "$_-stage: $snames\n\tcd $full/$build && \${MAKE} && \${MAKE} stage\n\n";
                }
 
+               print MAK qq/release-rpm: clean dist distcheck rpm
+
+release-deb: clean dist distcheck deb
+
+.PHONY: all stage clean check install dist distcheck rpm deb release-rpm release-deb
+/;
+
                close MAK;
        }
 }
        'lb.logger' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B globus:B pkgconfig:B/ ],
        'lb.nagios' => [ qw/globus_proxy_utils:R/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B lcas gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
+       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql-server:R cppunit:B gsoap:B classads:B voms:B gridsite:B bison:B libtool:B libxml2 flex:B pkgconfig:B/ ],
        'lb.state-machine' => [ qw/classads:B libtool:B libxslt:B expat:B globus:B pkgconfig:B/ ],
        'lb.utils' => [ qw/cppunit:B libtool:B globus:B pkgconfig:B/ ],
        'lb.ws-interface' => [ qw/libxslt:B tidy:B/ ],
        'canl' => 'emi-',
 );
 
+%cvs_tag_suffix = (
+       'lb' => '',
+       'jp' => '',
+       'jobid' => '',
+       'lbjp-common' => '',
+       'gridsite' => '-core',
+       'px' => '',
+       'canl' => '',
+);
+
+
 # ==== projects specification ====
 # etics_name ........... ETICS project name
 # conf_prefix .......... ETICS configurations name prefix
                etics_name => 'org.glite',
                conf_prefix => { %cvs_tag_prefix },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
                local_prefix => '',
                etics_externs => {
                                glue_schema=>'glue-schema',
                                trustmanager=>'org.glite.security.trustmanager',
                                axis=>'axis',
-                               lcas=>'org.glite.security.lcas',
                                gsoapxx=>'-',
                                jdk=>'jdk',
                                voms=>'org.glite.security.voms-api-cpp',
                },
                etics_projects => {
                        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/],
+                       'org.glite'=>[qw/voms gridsite gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
                },
                etics_locations => {
                        '*' => '',
                        'canl' => 'emi-',
                },
                tag_prefix => { %cvs_tag_prefix },
+               tag_suffix => { %cvs_tag_suffix },
                flavours => '--thrflavour= --nothrflavour=',
                local_prefix => '/usr',
                etics_externs => {
                                trustmanager=>'emi.java-security.trustmanager',
                                trustmanager_axis=>'emi.java-security.trustmanager-axis',
                                axis=>'axis1.4',
-                               lcas=>'emi.sac.lcas',
                                gsoapxx=>'-',
                                jdk=>'java',
                                voms => 'emi.voms.voms-api',
                        },
                },
                etics_projects => {
-                       'emi'=>[qw/voms voms-devel gridsite lcas gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+                       'emi'=>[qw/voms voms-devel gridsite gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
                },
                etics_locations => {
                        axis => 'axis',
                while (<V>) {
                        chomp;
                        ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+                       $age = $1 if /module\.age\s*=\s*(\S+)/;
                }
                close V;
                $_ = $old_;
 
        print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
 
+       print MKINC '
+-include ${top_srcdir}/project/version.properties
+version=${module.version}
+
+${package}-${version}.tar.gz:
+       rm -rf dist
+       for dist in ${SOURCES} ${SOURCES_EXEC} configure project/ChangeLog project/debian.* project/*.spec project/package.* project/version.properties; do \
+               dir=${package}-${version}/`dirname $$dist`; \
+               mkdir -p dist/$$dir || :; \
+               install -m 0644 ${top_srcdir}/$$dist dist/$$dir; \
+       done
+       for dist in ${SOURCES_EXEC} configure; do \
+               chmod +x dist/${package}-${version}/$$dist; \
+       done
+       (cd dist; tar -czf ${package}-${version}.tar.gz ${package}-${version})
+       mv dist/${package}-${version}.tar.gz .
+
+dist: ${package}-${version}.tar.gz
+
+distcheck: ${package}-${version}.tar.gz
+       rm -rf dist
+       mkdir -p dist
+       cp ${package}-${version}.tar.gz dist
+       (cd dist; tar -xzf ${package}-${version}.tar.gz)
+       a=`(cd dist/${package}-${version}; find . -type f | sort)`; \
+       b=`(cd ${top_srcdir}; find . -path ./dist -prune -or -type f -print | sort)`; \
+       echo "$$a" >dist/files-dist; \
+       echo "$$b" | egrep -v "(^./Makefile.inc$$|^./${package}-${version}.tar.gz$$|^./debian|^./[^/]*.spec$$|\.cvsignore|^\./project/changelog$$|/CVS)" >dist/files-original
+       diff -U0 dist/files-dist dist/files-original
+
+rpm: ${package}-${version}.tar.gz
+       dir=dist/rpm_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir/BUILD $$dir/RPMS $$dir/SOURCES $$dir/SRPMS; \
+       cp ${package}-${version}.tar.gz $$dir/SOURCES/${package}-${version}-${module.age}.src.tar.gz && \
+       rpmbuild -bs --nodeps --define "_topdir $$dir" ${package}.spec && \
+       cp -v $$dir/SRPMS/*.src.rpm dist/
+
+deb: ${package}-${version}.tar.gz
+       dir=dist/dpkg_build_src; \
+       rm -rf $$dir; \
+       mkdir -p $$dir; \
+       cp ${package}-${version}.tar.gz $$dir/${package}_${version}.orig.tar.gz && \
+       tar zxf $$dir/${package}_${version}.orig.tar.gz -C $$dir && \
+       cp -rf debian/ $$dir/${package}-${version} && \
+       (cd $$dir/${package}-${version} && dpkg-buildpackage -S -d -nc -us -uc) && \
+       cp -v $$dir/*.tar.gz $$dir/*.dsc dist/
+';
+
        close MKINC;
 
        my $dh;
                }
        }
 
-       print "Creating ${build}debian/\n" if ($debug);;
-
-       `rm -rfv  ${build}debian`;
-       mkdir $build."debian" or die $!;
-       `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
-       `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
-       `rm -f ${build}debian/*.orig`;
-       opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
-       for $_ (readdir $dh) {
-               if (/^debian\.(.*)/) {
-                       `mv ${build}debian/$_ ${build}debian/$1`;
-                       $debian = 1;
+       if ($module and -d $build."debian") {
+               print "Skipping ${build}debian/ (no rewrite in single module mode)\n" if ($debug);
+               `rm -f ${build}debian.*`;
+       } else {
+               print "Creating ${build}debian/\n" if ($debug);;
+
+               `rm -rfv  ${build}debian`;
+               mkdir $build."debian" or die $!;
+               `cp $abs_srcdir/project/debian.* ${build}debian/ 2>/dev/null`;
+               `mv ${build}debian.* ${build}debian/ 2>/dev/null`;
+               `rm -f ${build}debian/*.orig`;
+               opendir $dh, "${build}debian" || die "Can't open ${build}debian: $!";
+               for $_ (readdir $dh) {
+                       if (/^debian\.(.*)/) {
+                               `mv ${build}debian/$_ ${build}debian/$1`;
+                               $debian = 1;
+                       }
                }
-       }
-       closedir $dh;
+               closedir $dh;
 
-       if ($debian) {
-               my ($dir, $file);
+               if ($debian) {
+                       my ($dir, $file);
 
-               chmod 0755, "${build}debian/rules";
-               $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
-               $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
-               $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
-               $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
-               $file="${build}debian/changelog"; if (not -f $file) {
-                       open FH, ">$file" or die $!;
-                       print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
+                       chmod 0755, "${build}debian/rules";
+                       $file="${build}debian/docs"; if (not -f $file) { `touch $file`; }
+                       $dir="${build}debian/source"; if (not -d $dir) { mkdir $dir; }
+                       $file="${build}debian/source/format"; if (not -f $file) { `echo "3.0 (quilt)" > $file` }
+                       $file="${build}debian/compat"; if (not -f $file) { `echo "7" > $file` }
+                       $file="${build}debian/changelog"; if (not -f $file) {
+                               open FH, ">$file" or die $!;
+                               print FH qq{$packageName ($major.$minor.$rev-$age) unstable; urgency=low
 
   * Automatically generated package
 
  -- $package{maintainer}  $debdate
 };
-                       close FH;
-               }
+                               close FH;
+                       }
 
-       } else {
-               `rm -rf ${build}debian`;
+               } else {
+                       `rm -rf ${build}debian`;
+               }
        }
 }
 
        my ($workspaceDir, $srcPackageName, $srcAge, $topDir);
 
        # old-school packaging by ETICS for EMI-1
-       if ($project eq 'emi' and $project_version == 1) { return; }
+       if ($project eq 'emi' and $project_version == 1 and $fmod ne 'gridsite.core') { return; }
 
        if ($fmod eq 'gridsite.core') {
                $workspaceDir = '..';
                $srcPackageName = 'gridsite';
+               $srcTarBall = "../$srcPackageName-\${version}.src.tar.gz";
                $srcAge = '';
                $topDir = '../';
        } else {
                $workspaceDir = '${workspaceDir}';
                $srcPackageName = '${packageName}';
+               $srcTarBall = "$srcPackageName-\${version}.tar.gz";
                $srcAge = '-${age}';
                $topDir = '';
        }
        $cmd->{default}{packaging} = $rpmprepare;
        $cmd->{default}{packaging} .= "dir=\${workspaceDir}/rpm_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SRPMSLocation} \$dir/{BUILD,RPMS,SOURCES,SRPMS} 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/SOURCES/
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/SOURCES/$srcPackageName-\${version}${srcAge}.src.tar.gz
        rpmbuild -bs --nodeps --define \"_topdir \$dir\" $srcPackageName.spec
        cp -v \$dir/SRPMS/*.src.rpm \${package.SRPMSLocation}/
        rm -rf \$dir";
                $cmd->{$p}{packaging} = $debprepare;
                $cmd->{$p}{packaging} .= "dir=\${workspaceDir}/dpkg_build_src_\$\$
        mkdir -p \${package.tgzLocation} \${package.SDEBSLocation} \$dir 2>/dev/null || true
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \${package.tgzLocation}/
-       cp -vf $workspaceDir/$srcPackageName-\${version}${srcAge}.src.tar.gz \$dir/${srcPackageName}_\${version}.orig.tar.gz
+       cp -vf $srcTarBall \${package.tgzLocation}/$srcPackageName-\${version}${srcAge}.src.tar.gz
+       cp -vf $srcTarBall \$dir/${srcPackageName}_\${version}.orig.tar.gz
        tar xzf \$dir/${srcPackageName}_\${version}.orig.tar.gz -C \$dir
        cp -rf ${topDir}debian/ \$dir/$srcPackageName-\${version}/
        cd \$dir/$srcPackageName-\${version}
        else {
                $conf = "$confprefix$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 # XXX: gridsite hack
-               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}_R_${major}_${minor}_${rev}" : 
+               $conftag = $subsys eq 'gridsite' ? "$project{tag_prefix}{$subsys}${subsys}$project{tag_suffix}{$subsys}_R_${major}_${minor}_${rev}" : 
                        "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
 
                # lowering age for older packaging
        #$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/\${tag})" unless ($conftag eq /HEAD/);
        #$cmd_vcs{checkout} .= ")) && (test -d \${moduleName} || ln -s jra1mw/$cvs_module \${moduleName})";
-       $cmd_vcs{checkout} .= "\n\ttest -f \${packageName}-\${version}-\${age}.src.tar.gz || (ln -s \${moduleName} \${packageName}-\${version}; tar -chf - \${packageName}-\${version} --exclude CVS --exclude .git --exclude .etics | gzip --best > \${packageName}-\${version}-\${age}.src.tar.gz; rm \${packageName}-\${version})";
        $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
 
        $cmd{default}{init} = 'None';
                        $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
                        $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
-               mode_etics_packaging($fmod, \%cmd);
+               mode_etics_packaging($fmod, \%cmd, "make dist\n\t", "make dist\n\t");
        }
 
        my $defprops = '';
 
 2.2.2-3
 - Module rebuilt
 
+2.2.3-1
+- Missing files in clean targets added
+- Explicit pkg-config dependency
+
 2.3.0-1
 - Merge from branch_3_2