Debian packaging of gridsite:
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Wed, 12 Oct 2011 10:55:11 +0000 (10:55 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Wed, 12 Oct 2011 10:55:11 +0000 (10:55 +0000)
- platform specific build commands
- no runtime dependencies on libraries (fuse-libs)
- less hacky build of gridsite-1.5.compat package

org.glite.lb/configure

index 6492c76..2557b75 100755 (executable)
@@ -553,15 +553,16 @@ BEGIN{
         'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
         'jp.server-common' => [],
         'jp.ws-interface' => [],
-       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2 openssl:B build_common_cpp:B doxygen:B/ ],
+       'gridsite.core' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ],
        'gridsite.commands' => [ qw/curl:R openssl:R/ ],
        'gridsite.apache' => [ qw/libxml2:R openssl:R curl:R/ ],
        'gridsite.shared' => [ qw/libxml2:R openssl:R/ ],
        'gridsite.devel' => [ qw// ],
-       'gridsite.slashgrid' => [ qw/curl:R fuse-libs:R fuse:R/],
+       'gridsite.slashgrid' => [ qw/curl:R fuse:R/],
        'gridsite.services' => [ qw/curl:R gsoap:R/ ],
        'gridsite.service-clients' => [ qw/curl:R gsoap:R gsoapxx:R/ ],
        'gridsite.gsexec' => [ qw// ],
+       'gridsite.1.5-compat' => [ qw/httpd-devel:B gsoap:B globus:B curl:B doxygen:B fuse-devel:B libxml2:B openssl:B build_common_cpp:B doxygen:B/ ],
        'px.proxyrenewal' => [ qw/globus:B globus_essentials:R myproxy-devel:B myproxy-libs:R voms libtool:B/ ],
        'px.myproxy-config' => [ qw/myproxy-admin:R/ ], # in myproxy-config.spec
 );
@@ -917,6 +918,7 @@ for my $ext (keys %deps_aux) {
                                libxslt=>'xsltproc',
                                'httpd-devel' => 'apache2-prefork-dev',
                                'fuse-devel' => 'libfuse-dev',
+                               gsoap => 'gsoap',
                        },
                },
                etics_projects => {
@@ -945,7 +947,26 @@ for my $ext (keys %deps_aux) {
        },
 );
 
+my %gridsite_rpm = (
+       'package.RPMSLocation' => "\${moduleDir}/RPMTMP/RPMS",
+       'package.SRPMSLocation' => "\${moduleDir}/RPMTMP/SRPMS",
+);
+my %gridsite_deb = (
+       'package.DEBSLocation' => "\${moduleDir}/RPMTMP",
+);
 %platform_properties = (
+       'gridsite.core' => {
+               sl5_x86_64_gcc412 => \%gridsite_rpm,
+               sl5_ia32_gcc412 => \%gridsite_rpm,
+               sl5_x86_64_gcc412EPEL => \%gridsite_rpm,
+               sl5_ia32_gcc412EPEL => \%gridsite_rpm,
+               deb5_x86_64_gcc432 =>  \%gridsite_deb,
+               deb5_ia32_gcc432 =>  \%gridsite_deb,
+               slc4_x86_64_gcc346 => \%gridsite_rpm,
+               slc4_ia32_gcc346 => \%gridsite_rpm,
+               sl6_x86_64_gcc444 => \%gridsite_rpm,
+               deb6_x86_64_gcc445 => \%gridsite_deb,
+       },
        'jobid.api-java' => {
                default => { 'package.buildarch' => 'noarch' },
        },
@@ -1094,7 +1115,7 @@ sub mode_etics {
 
        die "$0: --module required with --etics\n" unless $fmod;
        
-       my ($subsys,$module) = split /\./,$fmod;
+       my ($subsys,$module) = split /\./,$fmod,2;
 
        my ($major,$minor,$rev,$age);
 
@@ -1200,16 +1221,22 @@ sub mode_etics {
                print STDERR "package.summary not found for $subsys.$module!\n"; }
 
        my %cmd;
-       @cmd{qw/configure compile test install packaging clean/} = ('None') x 6;
-       $cmd{clean} = 'make clean';
-       $cmd{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
-       #$cmd{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
-       #$cmd{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
-       #$cmd{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
-       $cmd{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.$module 2>/dev/null";
+       #$cmd_vcs{checkout} = "(test -d jra1mw/.git && (cd jra1mw; git pull) || git clone http://scientific.zcu.cz/git/jra1mw.git)";
+       #$cmd_vcs{checkout} .= " && (cd jra1mw; git checkout \${tag})" unless ($conftag =~ /HEAD/);
+       #$cmd_vcs{checkout} .= " && ln -s jra1mw/$cvs_prefix{$subsys}.$subsys.$module \${moduleName}";
+       $cmd_vcs{tag} = "cvs -d \${vcsroot} tag -R \${tag} ${moduleName}";
+
+       $cmd{default}{init} = 'None';
+       $cmd{default}{configure} = 'None';
+       $cmd{default}{compile} = 'None';
+       $cmd{default}{test} = 'None';
+       $cmd{default}{install} = 'None';
+       $cmd{default}{packaging} = 'None';
+       $cmd{default}{clean} = 'make clean';
 
        if ($subsys eq 'gridsite') {
-               $cmd{tag} = 'None';
+               $cmd_vcs{tag} = 'None';
 
                if ($module eq 'core') {
                        my $flags;
@@ -1228,38 +1255,68 @@ sub mode_etics {
        HTTPD_FLAGS=-I${httpd-devel.location}/include/httpd -I${httpd-devel.location}/include/apache2 -I${httpd-devel.location}/include/apr-1 -I${httpd-devel.location}/include/apr-1.0 -I${httpd-devel.location}/include/apr-0 -I${httpd-devel.location}/include/pcre';
                        }
 
-                       $cmd{configure} = "cat > Makefile.inc <<EOF
+                       $cmd{default}{configure} = "cat > Makefile.inc <<EOF
        project = $project
-       libdir = $libdir
        top_srcdir = ..
-       
        $flags
        EOF";
-                       $cmd{compile} = "make prefix=\${prefix}$project{local_prefix}";
-                       $cmd{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{clean}";
-                       $cmd{install} = "make prefix=\${prefix}$project{local_prefix} install";
-                       $cmd{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
-       make prefix=\${prefix}$project{local_prefix} rpm && \
+                       $cmd{default}{compile} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir}";
+                       $cmd{default}{clean} = "rm -rvf \${moduleDir}/src/tgz; $cmd{default}{clean}";
+                       $cmd{default}{install} = "make prefix=\${prefix}$project{local_prefix} libdir=\${libdir} install";
+                       $cmd{default}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       make prefix=\${prefix}$project{local_prefix} rpm && \\
        cp \${moduleDir}/RPMTMP/SOURCES/gridsite-\${version}.src.tar.gz \${moduleDir}/src/tgz";
+
+                       for my $p ('deb5_x86_64_gcc432', 'deb5_ia32_gcc432', 'deb6_x86_64_gcc445', 'deb6_ia32_gcc445') {
+                               $cmd{$p} = ();
+                               for my $c (keys %{$cmd{default}}) { $cmd{$p}{$c} = $cmd{default}{$c}; }
+                               $cmd{$p}{packaging} = "mkdir -p \${moduleDir}/RPMTMP/SOURCES \${moduleDir}/src/tgz 2>/dev/null || true
+       chmod +x \${moduleDir}/src/make-debian-files || true
+       make prefix=\${prefix}$project{local_prefix} deb && \\
+       cp \${moduleDir}/RPMTMP/gridsite_\${version}-\${age}.\${platformFamily}.tar.gz \${moduleDir}/src/tgz";
+                       }
+               }
+               elsif ($module eq '1.5-compat') {
+                       $cmd_vcs{checkout} = "cvs -d \${vcsroot} co -d \${moduleName} ".($conftag eq 'HEAD' ? '-A' : '-r ${tag}')." $cvs_prefix{$subsys}.$subsys.core 2>/dev/null";
+                       $cmd{default}{init} = 'echo "/sbin/ldconfig" > project/.post
+       echo "/sbin/ldconfig" > project/.postun';
+                       $cmd{default}{configure} = "cat > src/Makefile.inc <<EOF
+       project = emi
+       libdir = \${libdir}
+       MAJOR_VERSION=1
+       MINOR_VERSION=1.5
+       PATCH_VERSION=1.5.0
+       VERSION=\\\$(PATCH_VERSION)
+       RELEASE_VERSION=\${age}.\${platformFamily}
+       GSOAPDIR=\\`pkg-config gsoap --variable=prefix\\`
+       OPENSSL_GLOBUS_FLAGS=\\`pkg-config globus-openssl --cflags\\`
+       OPENSSL_GLOBUS_LIBS=\\`pkg-config globus-openssl --libs\\`
+       EOF";
+                       $cmd{default}{compile} = "make -C src prefix=\${prefix}$project{local_prefix}
+       rm -fv project/debian.changelog";
+                       $cmd{default}{install} = "make -C src prefix=\${prefix}$project{local_prefix} install-lib
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so.1
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.so
+       rm -fv \${prefix}$project{local_prefix}/\${libdir}/libgridsite*.a";
                }
                else {
-                       $cmd{clean} = 'None';
-                       $cmd{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
-                       $cmd{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
+                       $cmd{default}{clean} = 'None';
+                       $cmd{default}{packaging} = "echo building nothing, org.gridsite.core make rpm step will create this";
+                       $cmd_vcs{checkout} = "mkdir -v \${moduleName} 2>/dev/null || true";
                }
        }
        elsif ($subsys eq 'px' and $module eq 'myproxy-config') {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure --root=\${prefix} --prefix= --stage=\${stageDir} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{packaging} = "make rpm package=".$confprefix."$subsys-myproxy-config";
        }
        else {
-               $cmd{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
-               $cmd{compile} = 'make';
-               $cmd{test} = 'make check';
-               $cmd{install} = 'make install';
+               $cmd{default}{configure} = "/usr/bin/perl $confdir/configure $project{flavours} --root=\${prefix} --prefix=$project{local_prefix} --stage=\${stageDir} --sysroot=\${package.prefix} --libdir=\${libdir} --project=\${projectName} --module $subsys.$module @copts";
+               $cmd{default}{compile} = 'make';
+               $cmd{default}{test} = 'make check';
+               $cmd{default}{install} = 'make install';
                if ($subsys eq 'lb' and $module eq 'client') {
-                       $cmd{compile} = "make rpath=$project{local_prefix}/\${libdir}";
-                       $cmd{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{compile} = "make rpath=$project{local_prefix}/\${libdir}";
+                       $cmd{default}{install} = "make install post-install rpath=$project{local_prefix}/\${libdir}";
                }
        }
 
@@ -1286,31 +1343,37 @@ $dwpath
 [Platform-default:VcsCommand]
 displayName = None
 description = None
-tag = $cmd{tag}
+tag = $cmd_vcs{tag}
 branch = None
 commit = None
-checkout = $cmd{checkout}
+checkout = $cmd_vcs{checkout}
+
+};
+
+       for my $p (keys %cmd) {
+               next if $p ne 'default' and exists $project{supported_platforms} and not exists $project{supported_platforms}{$p};
 
-[Platform-default:BuildCommand]
+               print C qq{[Platform-$p:BuildCommand]
 postpublish = None
-packaging = $cmd{packaging}
+packaging = $cmd{$p}{packaging}
 displayName = None
 description = None
 doc = None
 prepublish = None
 publish = None
-compile = $cmd{compile}
-init = None
-install = $cmd{install}
-clean = $cmd{clean}
-test = $cmd{test}
-configure = $cmd{configure}
+compile = $cmd{$p}{compile}
+init = $cmd{$p}{init}
+install = $cmd{$p}{install}
+clean = $cmd{$p}{clean}
+test = $cmd{$p}{test}
+configure = $cmd{$p}{configure}
 checkstyle = None
 
-[Platform-default:Property]
+};
+       }
+
+       print C qq{[Platform-default:Property]
 $buildroot
-package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS
 package.preserve.libtool = false
 $package_description$package_summary$defprops};
 
@@ -1324,6 +1387,7 @@ $package_description$package_summary$defprops};
        for (@{$provides{"$subsys.$module"}}) {
                print C "package.provides = $_\n";
        }
+       print C "\n";
 
        for my $pp (keys %{$platform_properties{"$subsys.$module"}}) {
                next if $pp eq 'default';
@@ -1334,8 +1398,6 @@ $package_description$package_summary$defprops};
                for my $p (keys %{$platform_properties{"$subsys.$module"}->{$pp}}) {
                        print C $p . ' = ' . $platform_properties{"$subsys.$module"}->{$pp}->{$p} . "\n";
                }
-               print C "package.RPMSLocation = \${moduleDir}/RPMTMP/RPMS
-package.SRPMSLocation = \${moduleDir}/RPMTMP/SRPMS\n";
                print C "$package_description$package_summary\n";
        }