--- /dev/null
+#!/usr/bin/perl
+
+# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
+#
+# For the purpose of standalone builds of lb/jobid/lbjp-common components
+# it is copied on tagging
+
+# $Header$
+#
+# Copyright (c) Members of the EGEE Collaboration. 2004-2010.
+# See http://www.eu-egee.org/partners/ for details on the copyright holders.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+use Getopt::Long;
+
+my $pwd = `pwd`; chomp $pwd;
+my $prefix = '/usr';
+my $stagedir = undef;
+my $root = $pwd.'/stage';
+my $sysroot = '';
+my $sysconfdir;
+my $localstatedir;
+my $staged;
+my $module;
+my $thrflavour = 'gcc64dbgpthr';
+my $nothrflavour = 'gcc64dbg';
+my $mode = 'build';
+my $help = 0;
+my $listmodules;
+my $version;
+my $branch;
+my $output;
+my $lb_tag = '';
+my $lbjp_tag = '';
+my $jp_tag = '';
+my $jobid_tag = '';
+my $libdir = getlibdir();
+my $project = 'glite';
+my (%projects, %project);
+my $debug = 0;
+my $pkg_config_env = (defined $ENV{PKG_CONFIG_PATH}) ? "$ENV{PKG_CONFIG_PATH}:" : '';
+
+my @nodes = qw/client server logger logger-msg utils client-java doc ws-test db jpprimary jpindex jpclient harvester lb px proxyrenewal/;
+my @default_nodes = qw/lb px proxyrenewal/;
+my %enable_nodes;
+my %disable_nodes;
+my %default_nodes; @default_nodes{@default_nodes} = (1) x ($#default_nodes + 1);
+
+# key: internal package name (arguments, ...)
+# 'pkg': pkg-config name
+# 'prefix': used when pkg-config fails
+my %externs = (
+ cares => {
+ prefix => '/opt/c-ares',
+ pkg => 'libcares'
+ },
+ classads => {
+ prefix=> '/usr',
+ pkg => 'classads'
+ },
+ cppunit => {
+ prefix=> '/usr',
+ pkg => 'cppunit'
+ },
+ expat => {
+ prefix=> '/usr',
+ pkg => 'expat'
+ },
+ globus => {
+ prefix=> '/opt/globus',
+ pkg => 'globus-gssapi-gsi'
+ },
+ 'myproxy-devel' => {
+ prefix=> '/opt/globus',
+ pkg => 'myproxy'
+ },
+ 'myproxy-server' => {
+ prefix=> '',
+ },
+ 'myproxy-libs' => {
+ prefix=> '',
+ },
+ 'myproxy-admin' => {
+ prefix=> '',
+ },
+ gsoap => {
+ prefix=> '/usr',
+ pkg => 'gsoap'
+ },
+ gsoapxx => {
+ prefix=> '/usr',
+ pkg => 'gsoap++'
+ },
+ mysql => {
+ prefix=> '/usr'
+ },
+ 'mysql-devel' => {
+ prefix=> ''
+ },
+ 'mysql-server' => {
+ prefix => ''
+ },
+ voms => {
+ prefix => '/opt/glite',
+ pkg => 'voms-2.0'
+ },
+ gridsite => {
+ prefix => '/opt/glite'
+ },
+ lcas => {
+ prefix => '/opt/glite',
+ pkg => 'lcas'
+ },
+ trustmanager => {
+ prefix => '/opt/glite'
+ },
+ trustmanager_axis => {
+ prefix => '/opt/glite'
+ },
+ utiljava => {
+ prefix=> '/opt/glite'
+ },
+ ant => {
+ prefix=> '/usr'
+ },
+ jdk => {
+ prefix=> '/usr/java/latest'
+ },
+ libtar => {
+ prefix=> '/usr'
+ },
+ axis => {
+ prefix=> '/usr'
+ },
+ log4c => {
+ prefix=> '/usr'
+ },
+ postgresql => {
+ prefix=> '/usr'
+ },
+ activemq => {
+ prefix=>'/opt/activemq-cpp-library',
+ pkg => 'activemq-cpp'
+ },
+ apr => {
+ prefix=>'/opt/apr',
+ pkg => 'apr-1'
+ },
+ aprutil => {
+ prefix=>'/opt/apr-util',
+ pkg => 'apr-util-1'
+ },
+);
+
+my %jar = (
+ 'jakarta-commons-codec' => '/usr/share/java/commons-codec.jar',
+ 'jakarta-commons-lang' => '/usr/share/java/commons-lang.jar',
+);
+
+
+my %glite_prefix;
+my %need_externs;
+my %need_externs_type;
+my %need_jars;
+my %extrafull;
+my %extranodmod;
+my %deps;
+my %deps_type;
+my %buildroot;
+my (%etics_externs, %etics_projects);
+
+my %lbmodules = (
+ 'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test harvester yaim glite-LB logger-msg/],
+ 'lbjp-common' => [qw/db log maildir server-bones trio jp-interface gss gsoap-plugin/],
+ 'jobid' => [qw/api-c api-cpp api-java/],
+ 'jp' => [ qw/client doc index primary server-common ws-interface/ ],
+ 'gridsite' => [ qw/apache shared commands core devel slashgrid services service-clients gsexec/ ],
+ 'px' => [ qw/proxyrenewal glite-PX myproxy-yaim/ ],
+ );
+
+
+my @opts = (
+ 'prefix:s' => \$prefix,
+ 'staged=s' => \$staged,
+ 'module=s' => \$module,
+ 'thrflavour:s' => \$thrflavour,
+ 'nothrflavour:s' => \$nothrflavour,
+ 'mode=s' => \$mode,
+ 'listmodules=s' => \$listmodules,
+ 'version=s' => \$version,
+ 'branch=s' => \$branch,
+ 'output=s' => \$output,
+ 'stage=s' => \$stagedir,
+ 'root:s' => \$root,
+ 'sysroot:s' => \$sysroot,
+ 'sysconfdir=s' => \$sysconfdir,
+ 'localstatedir=s' => \$localstatedir,
+ 'lb-tag=s' => \$lb_tag,
+ 'lbjp-common-tag=s' => \$lbjp_tag,
+ 'jp-tag=s' => \$jp_tag,
+ 'jobid-tag=s' => \$jobid_tag,
+ 'help' => \$help,
+ 'libdir=s' => \$libdir,
+ 'project=s' => \$project,
+ 'debug' => \$debug,
+);
+
+for (@nodes) {
+ $enable_nodes{$_} = 0;
+ $disable_nodes{$_} = 0;
+
+ push @opts,"disable-$_",\$disable_nodes{$_};
+ push @opts,"enable-$_",\$enable_nodes{$_};
+}
+
+push @opts,"with-$_=s",\$externs{$_}{withprefix} for keys %externs;
+push @opts,"with-$_=s",\$jar{$_} for keys %jar;
+
+my @keeparg = @ARGV;
+
+GetOptions @opts or die "Errors parsing command line\n";
+$prefix=~s/\/$//;
+$stagedir=~s/\/$// if ($stagedir);
+$root=~s/\/$//;
+$sysroot=~s/\/$//;
+if (not $sysconfdir) { $sysconfdir = $prefix eq '/usr' ? '/etc' : "$prefix/etc"; }
+if (not $localstatedir) { $localstatedir = $prefix eq '/usr' ? '/var' : "$prefix/var"; }
+$sysconfdir=~s/\/$//;
+$localstatedir=~s/\/$//;
+
+$externs{'mysql-server'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-server'}{prefix} eq '';
+$externs{'mysql-devel'}{prefix}=$externs{mysql}{prefix} if $externs{'mysql-devel'}{prefix} eq '';
+$externs{'gsoapxx'}{prefix}=$externs{gsoap}{prefix} if $externs{'gsoapxx'}{prefix} eq '';
+
+%project = %{$projects{$project}};
+for $_ (keys %{$project{etics_externs}}) {
+ $etics_externs{$_} = $project{etics_externs}{$_};
+}
+for $_ (keys %{$project{etics_projects}}) {
+ $etics_projects{$_} = $project{etics_projects}{$_};
+}
+for $_ (keys %{$project{need_externs_aux}}) {
+ $need_externs_aux{$_} = $project{need_externs_aux}{$_};
+}
+for my $ext (keys %need_externs_aux) {
+ for (@{$need_externs_aux{$ext}}) {
+ my ($pkg, $type) =/([^:]*)(?::(.*))?/;
+ $type = 'BR' unless ($type);
+
+ push @{$need_externs{$ext}},$pkg;
+ $need_externs_type{$ext}->{$pkg} = $type;
+ }
+}
+
+
+if ($help) { usage(); exit 0; }
+
+if ($listmodules) {
+ my $name_prefix = ($listmodules eq 'gridsite' and $project eq 'glite') ? 'org' : $project{etics_name};
+ my @m = map "$name_prefix.$listmodules.$_",@{$lbmodules{$listmodules}};
+ print "@m\n";
+ exit 0;
+}
+
+warn "$0: --version, --branch and --output make sense only in --mode=etics\n"
+ if ($version || $output || $branch) && $mode ne 'etics';
+
+my $en;
+for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
+
+my $dis;
+for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
+
+die "--enable-* and --disable-* are mutually exclusive\n"
+ if $en && $dis;
+
+die "--module cannot be used with --enable-* or --disable-*\n"
+ if $module && ($en || $dis);
+
+die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},{$lbmodules{jp}};
+
+if ($dis) {
+ for (@nodes) {
+ $enable_nodes{$_} = 1 unless ($disable_nodes{$_} or not $default_nodes{$_});
+ }
+}
+
+if (!$en && !$dis) { for (@nodes) { $enable_nodes{$_} = 1 if ($default_nodes{$_}) } };
+
+for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
+
+$stagedir = $root unless $stagedir;
+
+if ($mode eq 'build') { for my $ext (keys %externs) {
+ if (defined $externs{$ext} and defined $externs{$ext}{withprefix}) { $externs{$ext}{prefix} = $externs{$ext}{withprefix}; }
+ elsif (defined $externs{$ext}{pkg}) {
+ my ($flag, $env, $cmd, $ret);
+ my $pkg = $externs{$ext}{pkg};
+ my $flagname = uc $externs{$ext}{pkg};
+ $flagname =~ s/-[0-9\.]*$//;
+ $flagname =~ y/-\+/_X/;
+
+ print "Checking $pkg ... ";
+ $env = "PKG_CONFIG_PATH=$pkg_config_env$stagedir$prefix/$libdir/pkgconfig";
+ $cmd = "$env pkg-config $pkg --exists >/dev/null";
+ `$cmd`; $ret = $?;
+ print "('$cmd' => $ret)\n" if ($debug);
+ if ($ret == 0) {
+ $externs{$ext}{prefix}=`$env pkg-config $pkg --variable=prefix`;
+ chomp $externs{$ext}{prefix};
+ print "$externs{$ext}{prefix}\n";
+
+ $flag=`$env pkg-config $pkg --cflags`;
+ $externs{$ext}{flags} .= "${flagname}_CFLAGS=$flag" if ($flag);
+ $flag=`$env pkg-config $pkg --libs`;
+ $externs{$ext}{flags} .= "${flagname}_LIBS=$flag" if ($flag);
+ } else {
+ print "(using default $externs{$ext}{prefix})\n";
+ }
+ print "\n" if ($debug);
+ }
+ elsif ($ext eq 'jdk') {
+ my $jdk_prefix;
+
+ print "Looking for some caffein ... ";
+ if (defined $ENV{'JDK_HOME'}) {
+ $jdk_prefix = $ENV{'JDK_HOME'};
+ print "JDK_HOME=$jdk_prefix\n";
+ } elsif (defined $ENV{'JAVA_HOME'}) {
+ $jdk_prefix = $ENV{'JAVA_HOME'};
+ print "JAVA_HOME=$jdk_prefix\n";
+ } else {
+ print "(using default $externs{$ext}{prefix}))\n"
+ }
+ $externs{$ext}{prefix} = $jdk_prefix if ($jdk_prefix);
+ }
+} }
+
+if ($mode eq 'build') {
+ print "Writing config.status\n";
+ open CONF,">config.status" or die "config.status: $!\n";
+ for ('JDK_HOME', 'JAVA_HOME', 'PKG_CONFIG_PATH') {
+ print CONF "$_=$ENV{$_} " if (defined $ENV{$_});
+ }
+ print CONF "$0 @keeparg\n";
+ close CONF;
+}
+
+
+my @modules;
+my %aux;
+
+if ($module) {
+# push @modules,split(/[,.]+/,$module);
+ push @modules,$module;
+}
+else {
+ @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
+
+ my $n;
+
+ do {
+ local $"="\n";
+ $n = $#modules;
+ push @modules,(map @{$deps{$_}},@modules);
+
+ undef %aux; @aux{@modules} = (1) x ($#modules+1);
+ @modules = keys %aux;
+ } while ($#modules > $n);
+}
+
+@aux{@modules} = (1) x ($#modules+1);
+delete $aux{$_} for (split /,/,$staged);
+@modules = keys %aux;
+
+mode_build() if $mode eq 'build';
+mode_checkout() if $mode eq 'checkout';
+mode_etics($module) if $mode eq 'etics';
+
+sub mode_build {
+ print "\nBuilding modules: @modules\n";
+ print "Mode: "; print $module ? "single module" : "multiple modules"; print "\n";
+
+ my @ext = map @{$need_externs{$_}},@modules;
+ my @myjars = map @{$need_jars{$_}},@modules;
+ undef %aux; @aux{@ext} = 1;
+ @ext = keys %aux;
+ undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
+ @myjars = keys %aux;
+
+ print "\nRequired externals:\n";
+ print "\t$_: ".($externs{$_}{prefix}?$externs{$_}{prefix}:'-')."\n" for @ext;
+ print "\t$_: $jar{$_}\n" for @myjars;
+ for (@ext) { if (defined($externs{$_}{flags})) { print "$externs{$_}{flags}"; } };
+ print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
+
+ mkinc($_) for @modules;
+
+ if ($module) {
+ print "Not creating summary Makefile\n" if $debug;
+ } else {
+ print "Creating Makefile\n";
+
+ open MAK,">Makefile" or die "Makefile: $!\n";
+
+ print MAK "all: @modules\n\nclean check:\n";
+
+ for (@modules) {
+ my $full = full($_);
+ print MAK "\tcd $full/$buildroot{$_} && \${MAKE} \$@\n"
+ }
+
+ print MAK "\ndistclean:\n";
+
+ for (@modules) {
+ my $full = full($_);
+ print MAK $buildroot{$_} eq '' ?
+ "\tcd $full && \${MAKE} distclean\n" :
+ "\trm -rf $full/$buildroot{$_}\n"
+ }
+
+ print MAK "\n";
+
+ for (@modules) {
+ my %ldeps; undef %ldeps;
+ @ldeps{@{$deps{$_}}} = 1;
+ for my $x (split /,/,$staged) { delete $ldeps{$x}; }
+ my @dnames = $module ? () : keys %ldeps;
+
+ my $full = full($_);
+ my $build = $buildroot{$_};
+
+ print MAK "$_: @dnames\n\tcd $full/$build && \${MAKE} && \${MAKE} install\n\n";
+ }
+
+ close MAK;
+ }
+}
+
+sub mode_checkout() {
+ for (@modules) {
+ my $module = $_;
+ my $tag = "";
+ if ($lb_tag){
+ for (@{$lbmodules{lb}}){
+ if ("lb.".$_ eq $module){
+ $tag = '-r '.$lb_tag;
+ }
+ }
+ }
+ if ($lbjp_tag){
+ for (@{$lbmodules{'lbjp-common'}}){
+ if ("lbjp-common.".$_ eq $module){
+ $tag = '-r '.$lbjp_tag;
+ }
+ }
+ }
+ if ($jp_tag){
+ for (@{$lbmodules{'jp'}}){
+ if ("jp.".$_ eq $module){
+ $tag = '-r '.$jp_tag;
+ }
+ }
+ }
+ if ($jobid_tag){
+ for (@{$lbmodules{jobid}}){
+ if ("jobid.".$_ eq $module){
+ $tag = '-r '.$jobid_tag;
+ }
+ }
+ }
+ #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
+ # print "found";
+ #}
+ $_ = full($_);
+ print "\n*** Checking out $_\n";
+ system("cvs checkout $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
+ }
+}
+
+BEGIN{
+%etics_externs = (
+ 'myproxy-devel'=>'myproxy-devel',
+ 'myproxy-libs'=>'myproxy-libs',
+ 'myproxy-server'=>'myproxy-server',
+ 'myproxy-admin'=>'myproxy-admin',
+ cares=>'c-ares',
+ voms=>'org.glite.security.voms-api-cpp',
+ utiljava=>'org.glite.security.util-java',
+ gpt=>'gpt',
+ fetchcrl=>'fetch-crl',
+ activemq=>'activemq-cpp-library',
+ apr=>'apr-dev',
+ aprutil=>'aprutil-dev',
+);
+
+%etics_projects = (
+);
+
+%need_externs_aux = (
+ 'lb.client' => [ qw/cppunit:B classads libtool:B/ ],
+ 'lb.common' => [ qw/expat cares:B cppunit:B classads libtool:B/ ],
+ 'lb.doc' => [ qw/tetex-latex:B/ ],
+ 'lb.logger' => [ qw/cppunit:B libtool:B/ ],
+ 'lb.logger-msg' => [ qw/cppunit:B activemq libtool:B/ ],
+ 'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite bison:B libtool:B/ ],
+ 'lb.state-machine' => [ qw/classads libtool:B/ ],
+ 'lb.utils' => [ qw/cppunit:B libtool:B/ ],
+ 'lb.ws-interface' => [],
+ 'lb.ws-test' => [ qw/gsoap:B libtool:B/ ],
+ 'lb.types' => [ qw// ],
+ 'lb.harvester' => [ qw/docbook-utils:B libtool:B/ ],
+ 'lbjp-common.db' => [ qw/mysql:B mysql-devel:B postgresql:B cppunit:B log4c:B libtool:B/ ],
+ 'lbjp-common.log' => [ qw/log4c libtool:B/ ],
+ 'lbjp-common.maildir' => [ qw/libtool:B/ ],
+ 'lbjp-common.server-bones' => [ qw/libtool:B/ ],
+ 'lbjp-common.trio' => [ qw/cppunit:B libtool:B/ ],
+ 'lbjp-common.jp-interface' => [ qw/cppunit:B log4c:B libtool:B/ ],
+ 'lbjp-common.gss' => [ qw/globus_essentials:R globus:B cares cppunit:B libtool:B/ ],
+ 'lbjp-common.gsoap-plugin' => [ qw/cppunit:B globus_essentials:R globus:B cares:B gsoap gsoapxx libtool:B/ ],
+ 'jobid.api-c' => [ qw/cppunit:B libtool:B/ ],
+ 'jobid.api-cpp' => [ qw/cppunit:B/ ],
+ 'jobid.api-java' => [ qw/ant:B jdk:B/ ],
+ 'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
+ 'jp.doc' => [],
+ 'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
+ 'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
+ 'jp.server-common' => [],
+ 'jp.ws-interface' => [],
+ 'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+ 'gridsite.commands' => [ qw/curl:R openssl:R/ ],
+ 'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
+ 'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
+ 'gridsite.devel' => [],
+ 'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+ 'gridsite.services' => [ qw/curl:R gsoap:R/ ],
+ 'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
+ 'gridsite.gsexec' => [ qw// ],
+ 'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:R/ ],
+ 'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec
+);
+
+%need_jars = (
+ 'jobid.api-java' => [ qw/jakarta-commons-codec/ ],
+ 'lb.client-java' => [ qw/jakarta-commons-lang/ ],
+);
+
+for my $jar (keys %need_jars) {
+ for (@{$need_jars{$jar}}) {
+ $need_externs_type{$jar}->{$_} = 'BR'; # XXX
+ }
+}
+
+%deps_aux = (
+ 'lb.client' => [ qw/
+ lb.types:B lb.common
+ lbjp-common.trio
+ jobid.api-cpp:B jobid.api-c
+ lbjp-common.gss
+ / ],
+ 'lb.client-java' => [ qw/
+ lb.types:B
+ lb.ws-interface:B
+ jobid.api-java
+ / ],
+ 'lb.common' => [ qw/
+ jobid.api-cpp:B jobid.api-c
+ lb.types:B lbjp-common.trio lbjp-common.gss
+ / ],
+ 'lb.doc' => [ qw/lb.types:B/ ],
+ 'lb.logger' => [ qw/
+ lbjp-common.trio
+ lbjp-common.log
+ jobid.api-c
+ lb.common
+ lbjp-common.gss
+ / ],
+ 'lb.logger-msg' => [ qw/
+ lb.logger
+ / ],
+ 'lb.server' => [ qw/
+ lb.ws-interface lb.types:B lb.common lb.state-machine
+ lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir lbjp-common.log
+ jobid.api-c
+ lbjp-common.gsoap-plugin lbjp-common.gss
+ / ],
+ 'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface lbjp-common.gss/ ],
+ 'lb.utils' => [ qw/
+ lbjp-common.jp-interface
+ jobid.api-c
+ lbjp-common.trio lbjp-common.maildir
+ lb.client lb.state-machine
+ / ],
+ 'lb.ws-test' => [ qw/lbjp-common.gsoap-plugin lb.ws-interface/ ],
+ 'lb.ws-interface' => [ qw/lb.types:B/ ],
+ 'lb.types' => [ qw// ],
+ 'lb.harvester' => [ qw/
+ jobid.api-c lbjp-common.trio lbjp-common.db lb.common lb.client
+ lbjp-common.gss lbjp-common.log
+ / ],
+ 'lb.yaim' => [ qw// ],
+ 'lb.glite-LB' => [ qw/
+ lb.logger:R lb.server:R lb.utils:R lb.doc:R
+ lb.ws-test:R lb.harvester:R lb.yaim:R lb.client-java:R
+ lb.logger-msg:R
+ / ],
+ 'lbjp-common.db' => [ qw/lbjp-common.trio lbjp-common.log/ ],
+ 'lbjp-common.maildir' => [ qw// ],
+ 'lbjp-common.log' => [ qw// ],
+ 'lbjp-common.server-bones' => [ qw/lbjp-common.log/ ],
+ 'lbjp-common.trio' => [ qw// ],
+ 'lbjp-common.gss' => [ qw// ],
+ 'lbjp-common.gsoap-plugin' => [ qw/lbjp-common.gss/ ],
+ 'jobid.api-c' => [ qw// ],
+ 'jobid.api-cpp' => [ qw/jobid.api-c/ ],
+ 'jobid.api-java' => [ qw// ],
+
+ 'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
+
+ 'jp.client' => [ qw/
+ jp.ws-interface
+ lbjp-common.jp-interface lbjp-common.maildir
+ jobid.api-c
+ lbjp-common.gsoap-plugin
+ / ],
+ 'jp.doc' => [ qw// ],
+ 'jp.index' => [ qw/
+ jp.server-common jp.ws-interface
+ lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
+ lbjp-common.gsoap-plugin
+ / ],
+ 'jp.primary' => [ qw/
+ jobid.api-c
+ jp.server-common jp.ws-interface
+ lb.state-machine
+ lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
+ lbjp-common.gsoap-plugin
+ / ],
+ 'jp.server-common' => [ qw/
+ lbjp-common.jp-interface lbjp-common.db
+ / ],
+ 'jp.ws-interface' => [ qw// ],
+
+ 'gridsite.core' => [ qw// ],
+ 'gridsite.commands' => [ qw/gridsite.shared:R/ ],
+ 'gridsite.apache' => [ qw/gridsite.shared:R/ ],
+ 'gridsite.shared' => [ qw// ],
+ 'gridsite.devel' => [ qw/gridsite.shared:R/ ],
+ 'gridsite.slashgrid' => [ qw/gridsite.shared:R/],
+ 'gridsite.services' => [ qw/gridsite.shared:R/ ],
+ 'gridsite.service-clients' => [ qw/gridsite.shared:R/ ],
+ 'gridsite.gsexec' => [ qw// ],
+
+ 'px.proxyrenewal' => [ qw// ],
+ 'px.glite-PX' => [qw/px.myproxy-yaim:R/],
+ 'px.myproxy-yaim' => [ qw// ],
+ 'px.myproxy-config' => [],
+);
+
+for my $ext (keys %deps_aux) {
+ for (@{$deps_aux{$ext}}) {
+ /([^:]*)(?::(.*))?/;
+ push @{$deps{$ext}},$1;
+ my $type = $2 ? $2 : 'BR';
+ $deps_type{$ext}->{$1} = $type;
+ }
+}
+
+
+%extrafull = ( gridsite=>'org.gridsite.core');
+
+#( java => 'client-java' );
+%extranodmod = (
+ db => 'lbjp-common.db',
+ jpprimary => 'jp.primary',
+ jpindex => 'jp.index',
+ jpclient => 'jp.client',
+ lb => 'lb.glite-LB',
+ px => 'px.glite-PX',
+ proxyrenewal => 'px.proxyrenewal'
+);
+
+%obsoletes = (
+ 'lb.yaim' => [ qq/glite-yaim-lb/ ],
+ 'px.proxyrenewal' => [ qq/glite-security-proxyrenewal/ ],
+ 'px.myproxy-yaim' => [ qq/glite-yaim-myproxy/ ],
+ 'px.myproxy-config' => [ qq/myproxy-config/ ], # in myproxy-config.spec
+ 'lbjp-common.gss' => [ qq/glite-security-gss/ ],
+ 'lbjp-common.gsoap-plugin' => [ qq/glite-security-gsoap-plugin/ ],
+ 'lb.glite-LB' => [ qq/glite-LB/ ],
+ 'px.glite-PX' => [ qq/glite-PX/ ],
+);
+
+%cvs_prefix = (
+ 'lb' => 'org.glite',
+ 'jp' => 'org.glite',
+ 'jobid' => 'org.glite',
+ 'lbjp-common' => 'org.glite',
+ 'gridsite' => 'org',
+ 'px' => 'org.glite',
+);
+
+%cvs_tag_prefix = (
+ 'lb' => 'glite-',
+ 'jp' => 'glite-',
+ 'jobid' => 'glite-',
+ 'lbjp-common' => 'glite-',
+ 'gridsite' => '',
+ 'px' => 'glite-',
+);
+
+# ==== projects specification ====
+# etics_name ........... ETICS project name
+# conf_prefix .......... ETICS configurations name prefix
+# tag_prefix ........... VCS tag prefix
+# local_prefix ......... prefix (relative to stage)
+# etics_externs ........ ETICS modules names of externals
+# (${NAME.location}, ETICS conf. dependencies)
+# etics_projects ....... ETICS project names of externals
+# etics_externs_devel .. ETICS modules names of devel versions of externals
+# need_externs_aux ..... project-specific external dependencies
+# supported_platforms .. platforms supported by the project
+%projects = (
+ glite => {
+ etics_name => 'org.glite',
+ conf_prefix => { %cvs_tag_prefix },
+ tag_prefix => { %cvs_tag_prefix },
+ flavours => '--thrflavour=${globus.thr.flavor} --nothrflavour=${globus.nothr.flavor}',
+ local_prefix => '',
+ etics_externs => {
+ globus_essentials=>'vdt_globus_essentials',
+ globus=>'globus',
+ gridsite=>'org.gridsite.shared',
+ yaim_core=>'org.glite.yaim.core',
+ gip_release=>'glite-info-provider-release',
+ gip_service=>'glite-info-provider-service',
+ bdii=>'bdii',
+ glite_version=>'glite-version',
+ glite_info_templates=>'glite-info-templates',
+ glue_schema=>'glue-schema',
+ trustmanager=>'org.glite.security.trustmanager',
+ axis=>'axis',
+ lcas=>'org.glite.security.lcas',
+ gsoapxx=>'-',
+ build_common_cpp=>'org.glite.build.common-cpp',
+ },
+ etics_externs_devel => {
+ gridsite=>'org.gridsite.devel',
+ },
+ etics_projects => {
+ vdt=>[qw/globus globus_essentials gpt/],
+ 'org.glite'=>[qw/voms gridsite lcas gip_release gip_service bdii glite_version glite_info_templates glue_schema yaim_core/],
+ },
+ need_externs_aux => {
+ 'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager utiljava libtool:B/ ],
+ 'lb.glite-LB' => [ qw/fetchcrl:R gpt:R gip_release:R gip_service:R bdii:R glite_version:R glite_info_templates:R glue_schema:R/ ],
+ 'lb.yaim' => [ qw/yaim_core:R/ ],
+ 'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R gpt:R glue_schema:R/],
+ 'px.myproxy-yaim' => [ qw/yaim_core:R/ ],
+ },
+ },
+
+ emi => {
+ etics_name => 'emi',
+ conf_prefix => {
+ 'lb' => 'emi-',
+ 'jp' => 'emi-',
+ 'jobid' => 'emi-',
+ 'lbjp-common' => 'emi-',
+ 'gridsite' => '',
+ 'px' => 'emi-',
+ },
+ tag_prefix => { %cvs_tag_prefix },
+ flavours => '--thrflavour= --nothrflavour=',
+ local_prefix => '/usr',
+ etics_externs => {
+ globus_essentials=>'globus-gssapi-gsi',
+ globus=>'globus-gssapi-gsi-devel',
+ gridsite=>'emi.gridsite.shared',
+ yaim_core=>'emi.yaim.yaim-core',
+ yaim_bdii=>'emi.bdii.yaim-bdii',
+ gip_release=>'emi.bdii.glite-info-provider-release',
+ gip_service=>'emi.bdii.glite-info-provider-service',
+ bdii=>'emi.bdii.bdii-core',
+ glite_version=>'emi.misc.glite-version',
+ glue_schema=>'emi.bdii.glue-schema',
+ trustmanager=>'emi.java-security.trustmanager',
+ trustmanager_axis=>'emi.java-security.trustmanager-axis',
+ axis=>'axis1.4',
+ lcas=>'emi.sac.lcas',
+ gsoapxx=>'-',
+ build_common_cpp=>'emi.misc.glite.build-common-cpp',
+ },
+ etics_externs_devel => {
+ cares => 'c-ares-devel',
+ classads => 'classads-devel',
+ cppunit => 'cppunit-devel',
+ expat => 'expat-devel',
+ gsoap => 'gsoap-devel',
+ voms => 'org.glite.security.voms-api',
+ libtar => 'libtar-devel',
+ log4c => 'log4c-devel',
+ postgresql => 'postgresql-devel',
+ curl => 'curl-devel',
+ libxml2 => 'libxml2-devel',
+ openssl => 'openssl-devel',
+ gridsite=>'emi.gridsite.devel',
+ },
+ etics_projects => {
+ 'emi'=>[qw/voms voms-devel gridsite lcas gip_release gip_service bdii glite_version glue_schema yaim_core yaim_bdii trustmanager trustmanager_axis/],
+ },
+ need_externs_aux => {
+ 'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager trustmanager_axis libtool:B/ ],
+ 'lb.glite-LB' => [ qw/fetchcrl:R gip_release:R gip_service:R bdii:R glite_version:R glue_schema:R/ ],
+ 'lb.yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
+ 'px.glite-PX' => [qw/myproxy-server:R myproxy-admin:R fetchcrl:R gip_service:R bdii:R glite_version:R glue_schema:R/],
+ 'px.myproxy-yaim' => [ qw/yaim_core:R yaim_bdii:R/ ],
+ },
+ supported_platforms => {
+ sl5_x86_64_gcc412EPEL => 1,
+ sl5_ia32_gcc412EPEL => 1,
+ },
+ },
+);
+
+%platform_properties = (
+ 'gridsite.core' => {
+ sl5_x86_64_gcc412 => { aprSuffix => '1' },
+ sl5_ia32_gcc412 => { aprSuffix => '1' },
+ sl5_x86_64_gcc412EPEL => { aprSuffix => '1' },
+ sl5_ia32_gcc412EPEL => { aprSuffix => '1' },
+ deb5_x86_64_gcc432 => { aprSuffix => '1.0' },
+ deb5_ia32_gcc432 => { aprSuffix => '1.0' },
+ slc4_x86_64_gcc346 => { aprSuffix => '0' },
+ slc4_ia32_gcc346 => { aprSuffix => '0' },
+ default => {
+ }
+ },
+ 'jobid.api-java' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'lb.types' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'lb.doc' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'lb.ws-interface' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'lb.yaim' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'px.yaim' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+ 'px.myproxy-config' => {
+ default => { 'package.buildarch' => 'noarch' },
+ },
+);
+
+my @k = keys %deps_aux;
+@buildroot{@k} = ('') x ($#k+1);
+
+$buildroot{'gridsite.core'} = 'src';
+}
+
+sub full
+{
+ my $short = shift;
+ return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
+}
+
+sub mkinc
+{
+ my %aux;
+ undef %aux;
+ my @m=qw/
+lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.logger-msg lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester lb.yaim lb.glite-LB
+lbjp-common.gss lbjp-common.gsoap-plugin
+jobid.api-c jobid.api-cpp jobid.api-java
+lbjp-common.db lbjp-common.log lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface lbjp-common.gss lbjp-common.gsoap-plugin
+jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
+px.proxyrenewal px.myproxy-yaim px.glite-PX px.myproxy-config
+/;
+ @aux{@m} = (1) x ($#m+1);
+
+ my $short = shift;
+ my $full = full $short;
+
+ unless ($aux{$short}) {
+ print "Makefile.inc not needed in $full\n";
+ return;
+ }
+
+ my $top_srcdir = '.';
+ my $build = '';
+
+ if ($module) {
+ $top_srcdir = $0;
+ $top_srcdir =~ s,/?[^/]*$,,;
+ $top_srcdir =~ s,^$,\.,;
+ } else {
+ $build = "$full/";
+ unless ($buildroot{$_} eq '') {
+ $top_srcdir = '..';
+ $build .= "$buildroot{$_}/";
+ unless (-d "$build") {
+ mkdir "$build" or die "mkdir $build: $!\n";
+ }
+ }
+ }
+ unless ($top_srcdir eq '.') {
+ unlink $build."Makefile";
+ symlink "$top_srcdir/Makefile",$build."Makefile" or die "symlink $top_srcdir/Makefile ".$build."Makefile: $!\n";
+ for my $file ('.pre', '.post', '.preun', '.postun changelog') {
+ my $pfile = "project/$file";
+ if (-f "$full/$pfile") {
+ mkdir "$build/project" unless (-d "$build/project");
+ unlink $build.$pfile;
+ symlink "../$top_srcdir/$pfile", $build.$pfile or die "symlink ../$top_srcdir/$pfile ".$build."$pfile: $!\n";
+ }
+ }
+ }
+
+ open MKINC,">".$build."Makefile.inc"
+ or die $build."Makefile.inc: $!\n";
+
+ print "Creating ".$build."Makefile.inc\n";
+
+ print MKINC qq{project = $project
+PREFIX = $root
+prefix = $prefix
+stagedir = $stagedir
+sysroot = $sysroot
+sysconfdir = $sysconfdir
+localstatedir = $localstatedir
+thrflavour = $thrflavour
+nothrflavour = $nothrflavour
+libdir = $libdir
+top_srcdir = $top_srcdir
+};
+
+ for (@{$need_externs{$short}}) {
+ next unless defined $externs{$_} and defined $externs{$_}{prefix};
+ print MKINC "${_}_prefix = $externs{$_}{prefix}\n";
+ print MKINC "$externs{$_}{flags}" if defined $externs{$_}{flags};
+ }
+
+ for (@{$need_jars{$short}}) {
+ print MKINC "${_}_jar = $jar{$_}\n"
+ }
+
+ my $need_gsoap = 0;
+ for (@{$need_externs{$short}}) { $need_gsoap = 1 if $_ eq 'gsoap'; }
+
+ print MKINC "gsoap_default_version=".gsoap_version()."\n" if $need_gsoap;
+
+ close MKINC;
+}
+
+BEGIN{
+};
+
+sub mode_etics {
+ $fmod = shift;
+
+ die "$0: --module required with --etics\n" unless $fmod;
+
+ my ($subsys,$module) = split /\./,$fmod;
+
+ my ($major,$minor,$rev,$age);
+
+ if ($version) {
+ $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
+ ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
+ }
+ else {
+ my $path = "$cvs_prefix{$subsys}.$subsys.$module/project";
+ if ($subsys eq 'gridsite') {
+ $path = "$cvs_prefix{$subsys}.$subsys.core/project";
+ }
+ open V,"$path/version.properties"
+ or die "$cvs_prefix{$subsys}.$subsys.$module/project/version.properties: $!\n";
+
+ while ($_ = <V>) {
+ chomp;
+ ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
+ $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
+ }
+ close V;
+ }
+
+ my @copts = ();
+ my %ge;
+ @ge{@{$etics_projects{$project{etics_name}}}} = (1) x ($#{$etics_projects{$project{etics_name}}}+1);
+
+ for (@{$need_externs{"$subsys.$module"}}) {
+ if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/ and (defined $externs{$_} or defined $jar{$_})) {
+ my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+ next if ($eext eq '-');
+ if ($project ne 'glite') {
+ if ($ge{$_} and not defined $externs{$_}{pkg}) {
+ push @copts, "--with-$_=\${stageDir}";
+ }
+ } else {
+ push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
+ }
+ }
+ }
+
+ for (@{$need_jars{"$subsys.$module"}}) {
+ my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+
+ push @copts,"--with-$_ \${$eext.location}$jar{$_}" if ($project eq 'glite');
+ }
+
+ my $conf;
+ my $conftag;
+ my ($confprefix, $nameprefix);
+
+ $dwpath = "path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz\n";
+
+ $confprefix = $project{conf_prefix}{$subsys};
+ $nameprefix = $confprefix;
+ $nameprefix =~ s/-$//;
+ $nameprefix =~ s/-/\./g;
+
+ if ($branch) {
+ $conf = "$confprefix${subsys}-${module}_$branch";
+ $conftag = $branch;
+ # forced low age number
+ $age = $branch eq 'HEAD' ? '0head' : '0dev'; }
+ 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}" :
+ "$project{tag_prefix}{$subsys}$subsys-${module}_R_${major}_${minor}_${rev}_${age}"; }
+
+ my $file = $output ? $output : "$conf.ini";
+ open C,">$file" or die "$file: $!\n";
+
+ my $buildroot = $buildroot{"$subsys.$module"} eq '' ? '#no build.root' : "build.root = " . $buildroot{"$subsys.$module"};
+
+ my $confdir = $buildroot{"$subsys.$module"} eq '' ? '.' : '..';
+
+ my $package_description = "";
+ my $package_summary = "";
+
+ if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.description") {
+ open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.description";
+ $package_description = join ("", <V>);
+ close V;
+ chomp $package_description;
+ $package_description =~ s/\n/\\n/g;
+ $package_description = "package.description = $package_description\n";
+ }
+ else {
+ print STDERR "package.description not found for $subsys.$module!\n"; }
+
+ if (-e "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary") {
+ open V, "$cvs_prefix{$subsys}.$subsys.$module/project/package.summary";
+ $package_summary = join ("", <V>);
+ close V;
+ chomp $package_summary;
+ $package_summary =~ s/\n/\\n/g;
+ $package_summary = "package.summary = $package_summary\n";
+ }
+ else {
+ print STDERR "package.summary not found for $subsys.$module!\n"; }
+
+ my %cmd;
+ @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
+ $cmd{clean} = 'make clean';
+ $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
+ #$cmd{checkout} = "(test -d \${moduleName}/.git && (cd \${moduleName}; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git \${moduleName})";
+ #$cmd{checkout} .= " && (cd \${moduleName}; git checkout ${tag})" unless ($conftag =~ /HEAD/);
+ $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+ if ($subsys eq 'gridsite') {
+ $cmd{tag} = 'None';
+
+ if ($module eq 'core') {
+ my ($flags, $prefix);
+
+ if ($project ne 'glite') {
+ $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=`pkg-config gsoap --variable=prefix` OPENSSL_GLOBUS_FLAGS=`pkg-config globus-openssl --cflags` OPENSSL_GLOBUS_LIBS=`pkg-config globus-openssl --libs` FLAVOR_GLOBUS_EXT= HTTPD_FLAGS="-I/usr/include/httpd -I/usr/include/apache2 -I/usr/include/apr-${aprSuffix} -I/usr/include/pcre"';
+ $prefix = "prefix=${prefix}/usr";
+ } else {
+ $flags = 'RELEASE_VERSION=${age}.${platformFamily} libdir=${libdir} GSOAPDIR=${gsoap.location} OPENSSL_GLOBUS_FLAGS=-I${globus.location}/include/${globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${globus.location}/${libdir}/ FLAVOR_GLOBUS_EXT=_${globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-${aprSuffix} -I${httpd-devel.location}/include/pcre"';
+ $prefix = "prefix=${prefix}";
+ }
+
+ $cmd{compile} = "echo 'make $flags' > build.sh\n\tmake $flags build";
+ $cmd{clean} = "rm -rvf build.sh; $cmd{clean}";
+ $cmd{install} = "make $prefix $flags install";
+ $cmd{packaging} = "make $prefix $flags rpm";
+ }
+ else {
+ $cmd{clean} = 'None';
+ $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+ $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+ }
+ }
+ elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
+ $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+ $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+ }
+ else {
+ $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+ $cmd{compile} = 'make';
+ $cmd{test} = 'make check';
+ $cmd{install} = 'make install';
+ }
+
+ my $defprops = '';
+
+ for my $p (keys %{$platform_properties{"$subsys.$module"}->{default}}) {
+ $defprops .= $p . ' = ' . $platform_properties{"$subsys.$module"}->{default}->{$p} . "\n";
+ }
+
+ print STDERR "Writing $file\n";
+ print C qq{
+[Configuration-$conf]
+profile = None
+moduleName = $project{etics_name}.$subsys.$module
+displayName = $conf
+description = $cvs_prefix{$subsys}.$subsys.$module
+projectName = $project{etics_name}
+age = $age
+deploymentType = None
+vcsroot = :pserver:anonymous\@glite.cvs.cern.ch:/cvs/glite
+tag = $conftag
+version = $major.$minor.$rev
+$dwpath
+[Platform-default:VcsCommand]
+displayName = None
+description = None
+tag = $cmd{tag}
+branch = None
+commit = None
+checkout = $cmd{checkout}
+
+[Platform-default:BuildCommand]
+postpublish = None
+packaging = $cmd{packaging}
+displayName = None
+description = None
+doc = None
+prepublish = None
+publish = None
+compile = $cmd{compile}
+init = None
+install = $cmd{install}
+clean = $cmd{clean}
+test = $cmd{test}
+configure = $cmd{configure}
+checkstyle = None
+
+[Platform-default:Property]
+$buildroot
+aprSuffix = 0
+package.RPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/RPMS
+package.SRPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/SRPMS
+package.preserve.libtool = false
+$package_description$package_summary$defprops};
+
+ for (@{$obsoletes{"$subsys.$module"}}) {
+ print C "package.obsoletes = $_\n";
+ print C "package.replaces = $_\n";
+ }
+
+ for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
+ next if $pp eq 'default';
+ next if exists $project{supported_platforms} and not exists $project{supported_platforms}{$pp};
+
+ print C "[Platform-$pp:Property]\n$buildroot\n";
+
+ for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
+ print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
+ }
+ print C "package.RPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/RPMS
+package.SRPMSLocation = \${moduleDir}/$cvs_prefix{$subsys}.$subsys.$module/RPMTMP/SRPMS\n";
+ print C "$package_description$package_summary\n";
+ }
+
+ print C qq{
+[Platform-default:DynamicDependency]
+};
+ for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
+ my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
+ my $edev = $project{etics_externs_devel}{$_};
+ next if ($eext eq '-');
+
+ my $proj = 'externals';
+ for my $p (keys %etics_projects) {
+ for $m (@{$etics_projects{$p}}) {
+ $proj = $p if $m eq $_;
+ }
+ }
+
+ my $type = $need_externs_type{"$subsys.$module"}->{$_};
+
+ if ($edev) {
+ if ($type eq 'B') {
+ $eext = $edev; # no runtime - change to devel pkg
+ } elsif ($type eq 'BR' or $type eq 'RB') {
+ print C "$proj|$edev = B\n"; # additional devel pkg
+ }
+ }
+ print C "$proj|$eext = $type\n";
+ }
+
+ for (@{$deps{"$subsys.$module"}}) {
+ my $type = $deps_type{"$subsys.$module"}->{$_};
+ print C "$project{etics_name}|$project{etics_name}.$_ = $type\n";
+ }
+
+ close C;
+}
+
+sub gsoap_version {
+ local $_;
+ my $gsoap_version;
+ open S,"$externs{gsoap}{prefix}/bin/soapcpp2 -v 2>&1 |" or die "$externs{gsoap}{prefix}/bin/soapcpp2: $!\n";
+
+ while ($_ = <S>) {
+ chomp;
+
+ $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
+ $gsoap_version = $1 if /The gSOAP code generator for C and C\+\+, soapcpp2 release ([.[:digit:][:alpha:]]+)$/;
+ }
+ close S;
+ return $gsoap_version;
+}
+
+sub getlibdir {
+ if ( -e "/etc/debian_version") { # We are on Debian
+ $lib64="lib";
+ $lib32="lib32"; }
+ else { # Another distribution
+ $lib64="lib64";
+ $lib32="lib"; }
+ $libdir=$lib32;
+
+ open INP, "uname -s | "; # Check kernel name
+ $kname= <INP>;
+ chomp($kname);
+ close INP;
+
+ if ( $kname eq "Linux") {
+ $arch = ("x86_64\npowerpc\nppc64\n");
+
+ open INP, "uname -p | "; # Check processor type
+ $procname= <INP>;
+ chomp($procname);
+ close INP;
+
+ if ($arch =~/^$procname\n/) {
+ return ($lib64); }
+
+ open INP, "uname -m | "; # Check machine hardware
+ $machname= <INP>;
+ chomp($machname);
+ close INP;
+
+ if ($arch =~/^$machname\n/) {
+ return ($lib64); }
+
+ # special cases (hyperlink lib64, Debian)
+ if (-l "/usr/lib64") {
+ $libdir=$lib32; }
+
+ # if /usr/lib64 doesn't exist at all (AIX)
+ unless ( -e "/usr/lib64" ) {
+ $libdir=$lib32; }
+ }
+
+ if ( $kname eq "SunOS") {
+ if (-e "/usr/lib/64") {
+ $libdir="lib/64"; }
+ }
+
+ return $libdir;
+}
+
+sub usage {
+ my @ext = keys %externs;
+ my @myjars = keys %jar;
+
+ print STDERR qq{
+Usage: $0 options
+
+General options (defaults in []):
+ --prefix=PREFIX destination directory [./stage]
+ --stage=DIR staging directory [./stage]
+ --root=DIR installation root (custom relocation root -> sysroot) [./stage]
+ --sysroot=DIR system root (custom relocation root -> sysroot) []
+ --sysconfdir=DIR system configuration directory [PREFIX/etc]
+ --staged=module,module,... what is already in PREFIX (specify without org.glite.)
+ --thrflavour=flavour
+ --nothrflavour=flavour threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
+ --listmodules=subsys list modules of a subsystem
+ --version=maj.min.rev-age specify version here instead of reading version.properties
+ --branch=branch CVS branch/etics name suffix (HEAD, branch_2_1, ...)
+ --libdir=libdir typically [lib,lib64] postfix
+ --project=PROJECT build or generate etics for a project (glite/emi) [emi]
+ --debug print more details
+
+Mode of operation:
+ --mode=\{checkout|build|etics\} what to do [build]
+
+What to build:
+ --module=module build this module only
+ --enable-NODE build this "node" (set of modules) only
+ --disable-NODE don't build this node
+ --lb-tag=tag checkout LB modules with specific tag
+ --jp-tag=tag checkout JP modules with specific tag
+ --lbjp-common-tag=tag checkout lbjp-common modules with specific tag
+ --jobid-tag=tag checkout jobid modules with specific tag
+
+Dependencies (summary of what will be used is always printed):
+ --with-EXTERNAL=PATH where to look for an external [autodetect]
+ --with-JAR=JAR where to look for jars
+
+Available nodes:
+ @nodes
+
+Default nodes:
+ @default_nodes
+
+Externals (not all for all modules) are:
+ @ext
+
+External jars are:
+ @myjars
+
+};
+
+}