rpms/globus-core/EL-4 globus-spec-creator, NONE, 1.1 globus-core.spec, 1.3, 1.4 import.log, 1.3, 1.4

Mattias Ellert ellert at fedoraproject.org
Mon Apr 27 16:53:37 UTC 2009


Author: ellert

Update of /cvs/pkgs/rpms/globus-core/EL-4
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv16348/EL-4

Modified Files:
	globus-core.spec import.log 
Added Files:
	globus-spec-creator 
Log Message:
* Mon Apr 27 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 5.15-4
- Install the globus-spec-creator script
- Add -Wl,--as-needed to the libtool script



--- NEW FILE globus-spec-creator ---
#!/usr/bin/perl

use Getopt::Long;
use POSIX;
use XML::DOM;
use User::pwent;
use Sys::Hostname;
use Pod::Usage;

my $gptfile;
my $setupfile;
my $release = "1";
my $directory;
my $setupdirectory;
my $toolkitversion = "4.2.1";
my $email;
my $nodoc;
my $help;

GetOptions('gptfile=s' => \$gptfile,
	   'setupfile=s' => \$setupfile,
	   'release=s' => \$release,
	   'directory=s' => \$directory,
	   'toolkitversion=s' => \$toolkitversion,
	   'email=s' => \$email,
	   'nodoc' => \$nodoc,
	   'help' => \$help);

Pod::Usage::pod2usage() if defined $help;

die "Missing --gptfile option" unless defined $gptfile;

setlocale(LC_TIME, 'C');

my $login = getlogin || getpwuid($<);
my $pw = getpwnam($login);
my ($fullname, $location, $phone) = split(/,/, $pw->gecos);
my $host = hostname;

$email = "$login\@$host" unless defined $email;

if (defined $directory) {
    $setupdirectory = $directory;
    $setupdirectory =~ s![^/]*$!setup!;
}

my $parser = new XML::DOM::Parser;

my %srcdeps;
my %setupdeps;

my $gptdoc = $parser->parsefile($gptfile);

my $gptmeta = $gptdoc->getElementsByTagName("gpt_package_metadata");
my $gptname = $gptmeta->item(0)->getAttributeNode("Name")->getValue;

my $gptagingver = $gptmeta->item(0)->getElementsByTagName("Aging_Version");
my $gptmajorver = $gptagingver->item(0)->getAttributeNode("Major")->getValue;
my $gptminorver = $gptagingver->item(0)->getAttributeNode("Minor")->getValue;

my $gptdesc = $gptmeta->item(0)->getElementsByTagName("Description");
my $description = $gptdesc->item(0)->getFirstChild->getData;
$description =~ s!^\s+|\s+$!!g;

for my $srcdep ($gptmeta->item(0)
		->getElementsByTagName("Source_Dependencies")) {
    my $type = $srcdep->getAttributeNode("Type")->getValue;
    $srcdeps{$type} = {} unless defined $srcdeps{$type};
    for my $dep ($srcdep->getElementsByTagName("Dependency")) {
	my $depname = $dep->getAttributeNode("Name")->getValue;
	my $deppkg = $dep->getAttributeNode("Package")->getValue
	    if defined $dep->getAttributeNode("Package");
	$depname = $depname . "-progs" if ($deppkg eq "pgm");
	$depname = $depname . "-doc" if ($deppkg eq "doc");
	$depname =~ tr/_/-/;
	my $depver = $dep->getElementsByTagName("Simple_Version")
	    ->item(0)->getAttributeNode("Major")->getValue;
	$srcdeps{$type}{$depname} = $depver
	    unless (defined $srcdeps{$type}{$depname}
		    and $srcdeps{$type}{$depname} >= $depver);
    }
}

for my $setupdep ($gptmeta->item(0)
		  ->getElementsByTagName("Source_Setup_Dependency")) {
    my $type = $setupdep->getAttributeNode("PkgType")->getValue;
    $setupdeps{$type} = {} unless defined $setupdeps{$type};
    for my $dep ($setupdep->getElementsByTagName("Setup_Dependency")) {
	my $depname = $dep->getAttributeNode("Name")->getValue;
	$depname =~ tr/_/-/;
	my $depver = $dep->getElementsByTagName("Simple_Version")
	    ->item(0)->getAttributeNode("Major")->getValue;
	$setupdeps{$type}{$depname} = $depver
	    unless (defined $setupdeps{$type}{$depname}
		    and $setupdeps{$type}{$depname} >= $depver);
    }
}

my $pkglibs = $gptmeta->item(0)->getElementsByTagName("Build_Environment")
    ->item(0)->getElementsByTagName("pkg_libs")->item(0);
$pkglibs = $pkglibs->getFirstChild if defined $pkglibs;

my $setupname;
my $setupversion;
my $setupdescription;
my $postinstall;

if (defined $setupfile) {

    my $setupdoc = $parser->parsefile($setupfile);

    my $setupmeta = $setupdoc->getElementsByTagName("gpt_package_metadata");
    $setupname = $setupmeta->item(0)->getAttributeNode("Name")->getValue;

    die "Setup package name does not match main package name"
	if ($setupname ne $gptname . '_setup');

    my $setupagingver = $setupmeta->item(0)
	->getElementsByTagName("Aging_Version");
    my $setupmajorver = $setupagingver->item(0)
	->getAttributeNode("Major")->getValue;
    my $setupminorver = $setupagingver->item(0)
	->getAttributeNode("Minor")->getValue;

    my $setupdesc = $setupmeta->item(0)->getElementsByTagName("Description");
    $setupdescription = $setupdesc->item(0)->getFirstChild->getData;
    $setupdescription =~ s!^\s+|\s+$!!g;

    for my $srcdep ($setupmeta->item(0)
		    ->getElementsByTagName("Source_Dependencies")) {
	my $type = $srcdep->getAttributeNode("Type")->getValue;
	$srcdeps{$type} = {} unless defined $srcdeps{$type};
	for my $dep ($srcdep->getElementsByTagName("Dependency")) {
	    my $depname = $dep->getAttributeNode("Name")->getValue;
	    my $deppkg = $dep->getAttributeNode("Package")->getValue
		if defined $dep->getAttributeNode("Package");
	    $depname = $depname . "-progs" if ($deppkg eq "pgm");
	    $depname =~ tr/_/-/;
	    my $depver = $dep->getElementsByTagName("Simple_Version")
		->item(0)->getAttributeNode("Major")->getValue;
	    $srcdeps{$type}{$depname} = $depver
		unless (defined $srcdeps{$type}{$depname}
			and $srcdeps{$type}{$depname} >= $depver);
	}
    }

    for my $setupdep ($setupmeta->item(0)
		      ->getElementsByTagName("Source_Setup_Dependency")) {
	my $type = $setupdep->getAttributeNode("PkgType")->getValue;
	$setupdeps{$type} = {} unless defined $setupdeps{$type};
	for my $dep ($setupdep->getElementsByTagName("Setup_Dependency")) {
	    my $depname = $dep->getAttributeNode("Name")->getValue;
	    $depname =~ tr/_/-/;
	    my $depver = $dep->getElementsByTagName("Simple_Version")
		->item(0)->getAttributeNode("Major")->getValue;
	    $setupdeps{$type}{$depname} = $depver
		unless (defined $setupdeps{$type}{$depname}
			and $setupdeps{$type}{$depname} >= $depver);
	}
    }

    my $setuppostinstall = $setupmeta->item(0)
	->getElementsByTagName("Post_Install_Program");
    $postinstall = $setuppostinstall->item(0)->getFirstChild->getData
	if defined $setuppostinstall->item(0);
    $postinstall =~ s!^\s+|\s+$!!g;

    $setupversion = $setupmajorver . '.' . $setupminorver;
}

my $name = $gptname;
$name =~ tr/_/-/;

my $version = $gptmajorver . '.' . $gptminorver;

my $libs = 1;
if (!%{$srcdeps{'lib_link'}} and !%{$srcdeps{'rtl_runtime'}}) {
    $libs = 0;
}

my $develpkg = 1;
my $docpkg = 1;
my $progspkg = 0;

if (!$libs) {
    $develpkg = 0;
    $docpkg = 0;
}
else {
    $docpkg = 0 if defined $nodoc;
    $progspkg = 1 if (%{$srcdeps{'pgm_link'}} or %{$srcdeps{'pgm_runtime'}});
}

print "%ifarch alpha ia64 ppc64 s390x sparc64 x86_64\n";
print "%global flavor gcc64pthr\n";
print "%else\n";
print "%global flavor gcc32pthr\n";
print "%endif\n\n";

print "Name:\t\t$name\n";
print "%global _name %(tr - _ <<< %{name})\n";
print "Version:\t$version\n";
print "%global setupversion $setupversion\n" if defined $setupfile;
print "Release:\t$release%{?dist}\n";
print "Summary:\tGlobus Toolkit - $description\n";
print "\n";

if ($libs) {
    print "Group:\t\tSystem Environment/Libraries\n";
}
else {
    print "Group:\t\tApplications/Internet\n";
}
print "License:\tASL 2.0\n";
print "URL:\t\thttp://www.globus.org/\n";
print "#\t\tSource is extracted from the globus toolkit installer:\n";
print "#\t\twget -N http://www-unix.globus.org/ftppub/gt4/$toolkitversion/installers/src/gt$toolkitversion-all-source-installer.tar.bz2\n";
print "#\t\ttar -jxf gt$toolkitversion-all-source-installer.tar.bz2\n";
print "#\t\tmv gt$toolkitversion-all-source-installer/source-trees/" . ($directory ? $directory : "###DIRECTORY###") . " $gptname-$version\n";
print "#\t\tcp -p gt$toolkitversion-all-source-installer/source-trees/core/source/GLOBUS_LICENSE $gptname-$version\n"
    if ($name ne "globus-core");
print "#\t\ttar -zcf $gptname-$version.tar.gz $gptname-$version\n";
print "Source:\t\t%{_name}-%{version}.tar.gz\n";
if (defined $setupfile) {
    print "#\t\tSource1 is extracted from the globus toolkit installer:\n";
    print "#\t\twget -N http://www-unix.globus.org/ftppub/gt4/$toolkitversion/installers/src/gt$toolkitversion-all-source-installer.tar.bz2\n";
    print "#\t\ttar -jxf gt$toolkitversion-all-source-installer.tar.bz2\n";
    print "#\t\tmv gt$toolkitversion-all-source-installer/source-trees/" . ($setupdirectory ? $setupdirectory : "###DIRECTORY###") . " $setupname-$setupversion\n";
    print "#\t\tcp -p gt$toolkitversion-all-source-installer/source-trees/core/source/GLOBUS_LICENSE $setupname-$setupversion\n";
    print "#\t\ttar -zcf $setupname-$setupversion.tar.gz $setupname-$setupversion\n";
    print "Source1:\t%{_name}_setup-%{setupversion}.tar.gz\n";
}
if ($docpkg) {
    print "#\t\tThis is a workaround for the broken epstopdf script in RHEL5\n";
    print "#\t\tSee: https://bugzilla.redhat.com/show_bug.cgi?id=450388\n";
    print "Source9:\tepstopdf-2.9.5gw\n";
}
my $p = 0;
while ($ARGV[$p]) {
    print "#\t\t### INSERT PATCH DESCRIPTION HERE ###:\n";
    print "#\t\thttp://bugzilla.globus.org/bugzilla/show_bug.cgi?id=###BUG NUMBER###\n";
    print "Patch$p:" . ($p < 10 ? "\t\t" : "\t") . "$ARGV[$p]\n";
    $p++;
}
print "BuildRoot:\t%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)\n";
print "\n";

if (!$libs) {
    print "Provides:\t%{name}-setup = %{setupversion}\n"
	if defined $setupfile;
    my $hasrequires = 0;
    while (($key, $value) = each(%{$srcdeps{'pgm_link'}})) {
	# Explicit Requires for libraries should not be used according to the
	# packaging guidelines. The autogenerated Requires on sonames make them
	# redundant. Only add Requires for GPT glue packages and XIO plugins.
	if ($key eq 'globus-libtool' or $key eq 'globus-openssl' or
	    $key eq 'globus-libxml2' or $key eq 'globus-xmlsec1' or
	    $key =~ /^globus-xio-/) {
	    print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n");
	    $hasrequires = 1;
	}
    }
    # Need at least one Requires to own directories
    print "Requires:\tglobus-common\n" unless $hasrequires;
    while (($key, $value) = each(%{$srcdeps{'pgm_runtime'}})) {
	print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n");
    }
    while (($key, $value) = each(%{$setupdeps{'pgm'}})) {
	print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n")
	    unless $key eq 'trusted-ca-setup';
    }
    print "BuildRequires:\tgrid-packaging-tools\n";
    while (($key, $value) = each(%{$srcdeps{'compile'}})) {
	if ($key eq "globus-core") {
	    print "BuildRequires:\t$key" .
		($value > 0 ? " >= $value\n" : "\n");
	}
	else {
	    print "BuildRequires:\t$key-devel" .
		($value > 0 ? " >= $value\n" : "\n");
	}
    }
}
else {
    my $hasrequires = 0;
    while (($key, $value) = each(%{$srcdeps{'lib_link'}})) {
	# Explicit Requires for libraries should not be used according to the
	# packaging guidelines. The autogenerated Requires on sonames make them
	# redundant. Only add Requires for GPT glue packages and XIO plugins.
	if ($key eq 'globus-libtool' or $key eq 'globus-openssl' or
	    $key eq 'globus-libxml2' or $key eq 'globus-xmlsec1' or
	    $key =~ /^globus-xio-/) {
	    print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n");
	    $hasrequires = 1;
	}
    }
    # Need at least one Requires to own directories
    print "Requires:\tglobus-common\n" unless $hasrequires;
    while (($key, $value) = each(%{$srcdeps{'rtl_runtime'}})) {
	print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n");
    }
    while (($key, $value) = each(%{$setupdeps{'rtl'}})) {
	print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n")
	    unless $key eq 'trusted-ca-setup';
    }
    print "BuildRequires:\tgrid-packaging-tools\n";
    while (($key, $value) = each(%{$srcdeps{'compile'}})) {
	if ($key eq "globus-core") {
	    print "BuildRequires:\t$key" .
		($value > 0 ? " >= $value\n" : "\n");
	}
	else {
	    print "BuildRequires:\t$key-devel" .
		($value > 0 ? " >= $value\n" : "\n");
	}
    }
    while (($key, $value) = each(%{$srcdeps{'doc_runtime'}})) {
	print "BuildRequires:\t$key" .
	    ($value > 0 ? " >= $value\n" : "\n");
    }
    if ($docpkg) {
	print "BuildRequires:\tdoxygen\n";
	print "%if %{?fedora}%{!?fedora:0} >= 3\n";
	print  "BuildRequires:\tgraphviz\n";
	print  "BuildRequires:\tghostscript\n";
	print "%else\n";
	print  "%if %{?rhel}%{!?rhel:0} >= 5\n";
	print   "BuildRequires:\tgraphviz\n";
	print   "BuildRequires:\tghostscript\n";
	print   "%if \"%{?rhel}\" == \"5\"\n";
	print    "BuildRequires:\tgraphviz-gd\n";
	print   "%endif\n";
	print  "%endif\n";
	print "%endif\n";
	print "%if %{?fedora}%{!?fedora:0} >= 9\n";
	print  "BuildRequires:\ttex(latex)\n";
	print "%else\n";
	print  "%if %{?rhel}%{!?rhel:0} >= 6\n";
	print   "BuildRequires:\ttex(latex)\n";
	print  "%else\n";
	print   "BuildRequires:\ttetex-latex\n";
	print  "%endif\n";
	print "%endif\n";
    }
    if ($progspkg) {
	print "\n";
	print "%package progs\n";
	print "Summary:\tGlobus Toolkit - $description Programs\n";
	print "Group:\t\tApplications/Internet\n";
	print "Provides:\t%{name}-setup = %{setupversion}\n"
	    if defined $setupfile;
	print "Requires:\t%{name} = %{version}-%{release}\n";
	while (($key, $value) = each(%{$srcdeps{'pgm_link'}})) {
	    # Explicit Requires for libraries should not be used according
	    # to the packaging guidelines. The autogenerated Requires on
	    # sonames make them redundant.
	    # Only add Requires for GPT glue packages and XIO plugins.
	    print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n")
		if $key eq 'globus-libtool' or $key eq 'globus-openssl' or
		   $key eq 'globus-libxml2' or $key eq 'globus-xmlsec1' or
		   $key =~ /^globus-xio-/;
	}
	while (($key, $value) = each(%{$srcdeps{'pgm_runtime'}})) {
	    print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n")
		unless $key eq $name;
	}
	while (($key, $value) = each(%{$setupdeps{'pgm'}})) {
	    print "Requires:\t$key" . ($value > 0 ? " >= $value\n" : "\n")
		unless $key eq 'trusted-ca-setup' or $key eq $name;
	}
    }
}

if ($develpkg) {
    print "\n";
    print "%package devel\n";
    print "Summary:\tGlobus Toolkit - $description Development Files\n";
    print "Group:\t\tDevelopment/Libraries\n";
    print "Requires:\t%{name} = %{version}-%{release}\n";
    while (($key, $value) = each(%{$srcdeps{'compile'}})) {
	if ($key eq "globus-core") {
	    print "Requires:\t$key" .
		($value > 0 ? " >= $value\n" : "\n");
	}
	else {
	    print "Requires:\t$key-devel" .
		($value > 0 ? " >= $value\n" : "\n");
	}
    }
}

if ($docpkg) {
    print "\n";
    print "%package doc\n";
    print "Summary:\tGlobus Toolkit - $description Documentation Files\n";
    print "Group:\t\tDocumentation\n";
    print "Requires:\t%{name} = %{version}-%{release}\n";
}

print "
%description
The Globus Toolkit is an open source software toolkit used for building Grid
systems and applications. It is being developed by the Globus Alliance and
many others all over the world. A growing number of projects and companies are
using the Globus Toolkit to unlock the potential of grids for their cause.

The %{name} package contains:
$description
";

print "
%description progs
The Globus Toolkit is an open source software toolkit used for building Grid
systems and applications. It is being developed by the Globus Alliance and
many others all over the world. A growing number of projects and companies are
using the Globus Toolkit to unlock the potential of grids for their cause.

The %{name}-progs package contains:
$description Programs
" if ($progspkg);

print "$setupdescription\n" if defined $setupfile;

print "
%description devel
The Globus Toolkit is an open source software toolkit used for building Grid
systems and applications. It is being developed by the Globus Alliance and
many others all over the world. A growing number of projects and companies are
using the Globus Toolkit to unlock the potential of grids for their cause.

The %{name}-devel package contains:
$description Development Files
" if ($develpkg);

print "
%description doc
The Globus Toolkit is an open source software toolkit used for building Grid
systems and applications. It is being developed by the Globus Alliance and
many others all over the world. A growing number of projects and companies are
using the Globus Toolkit to unlock the potential of grids for their cause.

The %{name}-doc package contains:
$description Documentation Files
" if ($docpkg);

print "
%prep
%setup -q -n %{_name}-%{version}
";

print "%setup -D -T -q -n %{_name}-%{version} -a 1\n" if defined $setupfile;

$p = 0;
while ($ARGV[$p]) {
    print "%patch$p -p1\n";
    $p++;
}

print "
%if \"%{rhel}\" == \"5\"
mkdir bin
install %{SOURCE9} bin/epstopdf
%endif
" if ($docpkg);

print "
%build";

print "
%if \"%{rhel}\" == \"5\"
export PATH=\$PWD/bin:\$PATH
%endif
" if ($docpkg);

print "
# Remove files that should be replaced during bootstrap
rm -f doxygen/Doxyfile*
rm -f doxygen/Makefile.am
rm -f pkgdata/Makefile.am
rm -f globus_automake*
rm -rf autom4te.cache
";

print "
# Remove flavor tags
for f in `find . -name Makefile.am` ; do
  sed -e 's!^flavorinclude_HEADERS!include_HEADERS!' \\
      -e 's!\\(lib[a-zA-Z_]*\\)_\$(GLOBUS_FLAVOR_NAME)\\.la!\\1.la!g' \\
      -e 's!^\\(lib[a-zA-Z_]*\\)___GLOBUS_FLAVOR_NAME__la_!\\1_la_!' -i \$f
done
sed -e \"s!<With_Flavors!<With_Flavors ColocateLibraries=\\\"no\\\"!\" \\
  -i pkgdata/pkg_data_src.gpt.in
" if ($libs);

print "
%{_datadir}/globus/globus-bootstrap.sh
";

if ($docpkg) {
    print "
%configure --with-flavor=%{flavor} --enable-doxygen
";
}
else {
    print "
%configure --with-flavor=%{flavor}
";
}

print "
make %{?_smp_mflags}
";

print "
# setup package
cd %{_name}_setup-%{setupversion}

# Remove files that should be replaced during bootstrap
rm -f doxygen/Doxyfile*
rm -f doxygen/Makefile.am
rm -f pkgdata/Makefile.am
rm -f globus_automake*
rm -rf autom4te.cache

%{_datadir}/globus/globus-bootstrap.sh

%configure --without-flavor

make %{?_smp_mflags}

cd -
" if defined $setupfile;

print "
%install";

print "
%if \"%{rhel}\" == \"5\"
export PATH=\$PWD/bin:\$PATH
%endif
" if ($docpkg);

print "
rm -rf \$RPM_BUILD_ROOT
make install DESTDIR=\$RPM_BUILD_ROOT
";

print "
# setup package
cd %{_name}_setup-%{setupversion}
make install DESTDIR=\$RPM_BUILD_ROOT
cd -

# Register setup
perl -MGrid::GPT::Setup <<EOF
my \\\$metadata = new Grid::GPT::Setup(package_name => \"%{_name}_setup\",
				     globusdir => \"\$RPM_BUILD_ROOT%{_prefix}\");
\\\$metadata->finish();
EOF

# Create setup files

### INSERT RELEVANT PARTS OF $postinstall HERE ###
" if defined $setupfile;

if (not defined $pkglibs) {
    print "
# This library is opened using lt_dlopenext, so the libtool archives
# (.la files) can not be removed - fix the libdir...
for lib in `find \$RPM_BUILD_ROOT%{_libdir} -name 'lib*.la'` ; do
  sed \"s!^libdir=.*!libdir=\\'%{_libdir}\\'!\" -i \$lib
done
" if ($libs);
}
else {
    print "
# Remove libtool archives (.la files)
find \$RPM_BUILD_ROOT%{_libdir} -name 'lib*.la' -exec rm -v '{}' \\;
sed '/lib.*\\.la\$/d' \\
  -i \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_rtl.filelist
" if ($libs);
}

print "
# Remove static libraries (.a files)
find \$RPM_BUILD_ROOT%{_libdir} -name 'lib*.a' -exec rm -v '{}' \\;
sed '/lib.*\\.a\$/d' \\
  -i \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_dev.filelist
" if ($libs);

print "
# Generate pkg-config file from GPT metadata
mkdir -p \$RPM_BUILD_ROOT%{_libdir}/pkgconfig
%{_datadir}/globus/globus-gpt2pkg-config pkgdata/pkg_data_%{flavor}_dev.gpt > \\
  \$RPM_BUILD_ROOT%{_libdir}/pkgconfig/%{name}.pc
" if ($develpkg);

print "
# Move documentation to default RPM location
mv \$RPM_BUILD_ROOT%{_docdir}/%{_name} \\
  \$RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
sed s!doc/%{_name}!doc/%{name}-%{version}! \\
  -i \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/noflavor_doc.filelist

# Remove unwanted documentation
rm -f \$RPM_BUILD_ROOT%{_mandir}/man3/deprecated.3
rm -f \$RPM_BUILD_ROOT%{_mandir}/man3/*_%{_name}-%{version}_*.3
sed -e '/deprecated\\.3/d' \\
    -e '/_%{_name}-%{version}_.*\\.3/d' \\
  -i \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/noflavor_doc.filelist
" if ($docpkg);

print"
# Install license file
mkdir -p \$RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
install -m 644 -p GLOBUS_LICENSE \$RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}

# Generate package filelists
";

if (!$libs) {
    print "cat \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_pgm.filelist \\\n";
    print "    \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}_setup/noflavor_pgm.filelist \\\n" if defined $setupfile;
    print "  | sed s!^!%{_prefix}! > package.filelist\n";
}
else {
    print "cat \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_rtl.filelist \\\n";
    print "  | sed s!^!%{_prefix}! > package.filelist\n";
}

if ($progspkg) {
    print "cat \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_pgm.filelist \\\n";
    print "    \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}_setup/noflavor_pgm.filelist \\\n" if defined $setupfile;
    print "  | sed s!^!%{_prefix}! > package-progs.filelist\n";
}

if ($develpkg) {
    print "cat \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/%{flavor}_dev.filelist \\\n";
    print "  | sed s!^!%{_prefix}! > package-devel.filelist\n";
}

if ($docpkg) {
    print "cat \$RPM_BUILD_ROOT%{_datadir}/globus/packages/%{_name}/noflavor_doc.filelist \\\n";
    print "  | sed -e 's!/man/.*!&\*!' -e 's!^!%doc %{_prefix}!' > package-doc.filelist\n";
}

print "
%clean
rm -rf \$RPM_BUILD_ROOT
";

print "
%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig
" if ($libs);

print "
%files -f package.filelist
%defattr(-,root,root,-)
%dir %{_datadir}/globus/packages/%{_name}
%dir %{_docdir}/%{name}-%{version}
%doc %{_docdir}/%{name}-%{version}/GLOBUS_LICENSE
";

print "
%files -f package-progs.filelist progs
%defattr(-,root,root,-)
" if ($progspkg);

print "%dir %{_datadir}/globus/packages/%{_name}_setup
%{_datadir}/globus/packages/setup
%dir %{_datadir}/globus/setup
" if defined $setupfile;

print "
%files -f package-devel.filelist devel
%defattr(-,root,root,-)
%{_libdir}/pkgconfig/%{name}.pc
" if ($develpkg);

print "
%files -f package-doc.filelist doc
%defattr(-,root,root,-)
%dir %{_docdir}/%{name}-%{version}/html
" if ($docpkg);

print "
%changelog
* " . strftime('%a %b %e %Y', localtime) . " $fullname <$email> - $version-$release
- Autogenerated
"

__END__

=head1 NAME

B<globus-spec-creator> - Generate an RPM spec file from a GPT source
package description

=head1 SYNOPSIS

B<globus-spec-creator> [options] [patches ...]

Options:

=over

=item B<-gptfile> filename

The package's GPT source package description file (mandatory)

=item B<-setupfile> filename

The corresponding setup package's GPT source package description file
(default: none)

=item B<-release> releasenumber

The RPM release number (default: 1)

=item B<-directory> directory

The package's source directory in the toolkit installer

=item B<-toolkitversion> versionnumber

Globus toolkit version (default: 4.2.1)

=item B<-email> emailaddress

The packagers e-mail address (default: username at hostname)

=item B<-nodoc>

Disable the generation of the doc RPM

=item B<-help>

Show help

=back

Arguments:

Each additional argument will be added as a patch in the generated
specfile.

=head1 EXAMPLE

globus-spec-creator -g globus_common-10.2/pkgdata/pkg_data_src.gpt.in
-s globus_common_setup-2.6/pkgdata/pkg_data_src.gpt.in -r 3 -d
common/source

=head1 SEE ALSO

See http://fedoraproject.org/wiki/PackagingDrafts/Globus for
additional information and examples.

=head1 AUTHOR

Mattias Ellert E<lt>mattias.ellert at fysast.uu.seE<gt>

=cut


Index: globus-core.spec
===================================================================
RCS file: /cvs/pkgs/rpms/globus-core/EL-4/globus-core.spec,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- globus-core.spec	21 Apr 2009 15:02:14 -0000	1.3
+++ globus-core.spec	27 Apr 2009 16:53:07 -0000	1.4
@@ -13,7 +13,7 @@
 Name:		globus-core
 %global _name %(tr - _ <<< %{name})
 Version:	5.15
-Release:	3%{?dist}
+Release:	4%{?dist}
 Summary:	Globus Toolkit - Globus Core
 
 Group:		Development/Tools
@@ -26,6 +26,7 @@
 #		tar -zcf globus_core-5.15.tar.gz globus_core-5.15
 Source:		%{_name}-%{version}.tar.gz
 Source1:	globus-gpt2pkg-config
+Source2:	globus-spec-creator
 #		Make file locations configurable:
 #		http://bugzilla.globus.org/bugzilla/show_bug.cgi?id=6451
 Patch0:		%{name}-conf.patch
@@ -124,9 +125,25 @@
 # These scripts are intended to be sourced, not executed
 chmod 644 $RPM_BUILD_ROOT%{_datadir}/globus/globus-build-env-*.sh
 
+# Add -Wl,--as-needed to the libtool script if supported
+%if %{?fedora}%{!?fedora:0} >= 2
+sed 's! -shared ! \\\${wl}--as-needed&!g' \
+  -i $RPM_BUILD_ROOT%{_sbindir}/libtool-%{flavor}
+%endif
+%if %{?rhel}%{!?rhel:0} >= 4
+sed 's! -shared ! \\\${wl}--as-needed&!g' \
+  -i $RPM_BUILD_ROOT%{_sbindir}/libtool-%{flavor}
+%endif
+
 # Install the GPT metadata to pkg-config file converter
 install %SOURCE1 $RPM_BUILD_ROOT%{_datadir}/globus/globus-gpt2pkg-config
 
+# Install the Globus RPM specfile creator script
+mkdir -p $RPM_BUILD_ROOT%{_bindir}
+install %SOURCE2 $RPM_BUILD_ROOT%{_bindir}/globus-spec-creator
+mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
+pod2man %SOURCE2 > $RPM_BUILD_ROOT%{_mandir}/man1/globus-spec-creator.1
+
 # Generate pkg-config file from GPT metadata
 mkdir -p $RPM_BUILD_ROOT%{_libdir}/pkgconfig
 $RPM_BUILD_ROOT%{_datadir}/globus/globus-gpt2pkg-config \
@@ -164,10 +181,16 @@
 %dir %{_libdir}/globus/include
 %{_libdir}/pkgconfig/%{name}.pc
 %{_datadir}/globus/globus-gpt2pkg-config
+%{_bindir}/globus-spec-creator
+%doc %{_mandir}/man1/globus-spec-creator.1*
 %dir %{_docdir}/%{name}-%{version}
 %doc %{_docdir}/%{name}-%{version}/GLOBUS_LICENSE
 
 %changelog
+* Mon Apr 27 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 5.15-4
+- Install the globus-spec-creator script
+- Add -Wl,--as-needed to the libtool script
+
 * Tue Apr 21 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 5.15-3
 - Update after clarification of packaging guidelines
 


Index: import.log
===================================================================
RCS file: /cvs/pkgs/rpms/globus-core/EL-4/import.log,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- import.log	21 Apr 2009 15:02:15 -0000	1.3
+++ import.log	27 Apr 2009 16:53:07 -0000	1.4
@@ -1,3 +1,4 @@
 globus-core-5_15-1_fc9:EL-4:globus-core-5.15-1.fc9.src.rpm:1237534237
 globus-core-5_15-2_fc9:EL-4:globus-core-5.15-2.fc9.src.rpm:1240003699
 globus-core-5_15-3_fc9:EL-4:globus-core-5.15-3.fc9.src.rpm:1240325969
+globus-core-5_15-4_fc9:EL-4:globus-core-5.15-4.fc9.src.rpm:1240851135




More information about the fedora-extras-commits mailing list