264 lines
7.0 KiB
Perl
264 lines
7.0 KiB
Perl
#!/bin/perl
|
|
|
|
# $Id: Makefile.PL,v 1.29 2002/05/10 08:04:55 rjray Exp $
|
|
|
|
use Config;
|
|
use ExtUtils::MakeMaker;
|
|
use Cwd 'cwd';
|
|
|
|
$cwd = cwd;
|
|
|
|
# Check for any "local" arguments to the command that creates the Makefile
|
|
@ARGV = map { /^RPM_(\w+)=(.*)/ ? do { $opts{lc $1} = $2; (); } : $_ } @ARGV
|
|
if @ARGV;
|
|
|
|
%XS = qw(
|
|
RPM.xs RPM.c
|
|
RPM/Constants.xs RPM/Constants.c
|
|
RPM/Database.xs RPM/Database.c
|
|
RPM/Error.xs RPM/Error.c
|
|
RPM/Header.xs RPM/Header.c
|
|
);
|
|
# RPM/Package.xs RPM/Package.c
|
|
|
|
@OBJECT = values %XS;
|
|
for (@OBJECT)
|
|
{
|
|
s/\.c\b/\$(OBJ_EXT)/g;
|
|
}
|
|
$OBJECT = join(' ', @OBJECT);
|
|
|
|
%PM = map { ($from = $_) =~ s/xs$/pm/;
|
|
($from, "\$(INST_LIBDIR)/$from"); } (keys %XS);
|
|
|
|
@SAMPLES = qw(utils/rpmprune);
|
|
|
|
# This shouldn't be necessary, I don't think, but for now it is
|
|
unlink 'RPM/typemap';
|
|
symlink '../typemap', 'RPM/typemap';
|
|
|
|
# Cruft that MakeMaker wouldn't inherently know about
|
|
$CLEAN = join(' ', values %XS) . " $OBJECT";
|
|
$CLEAN .= ' Perl-RPM.spec pod2html-* */pod2html-* *.html */*.html RPM/typemap';
|
|
$CLEAN .= ' rpmrc rpmmacro Perl-RPM-*';
|
|
|
|
$rpm_libs = '-lrpm -lrpmdb -lrpmio -lpopt';
|
|
# Check for needed header files
|
|
$rpm_libdir = '';
|
|
unless ($opts{build})
|
|
{
|
|
# If RPM_BUILD was set, then this module is being built as a part of the
|
|
# whole rpm kit. In that case, when the make is run the CFLAGS environment
|
|
# variable will have all the paths we need.
|
|
for (qw(/usr/include /usr/local/include /opt/include /opt/rpm/include))
|
|
{
|
|
next unless -d $_ and -d "$_/rpm";
|
|
$rpm_libdir = "$_/rpm", last if (-d "$_/rpm" && -e "$_/rpm/rpmlib.h");
|
|
}
|
|
die "Header file 'rpmlib.h' not found. This is needed for compiling the XS
|
|
code. If this is present, edit $0 and add the correct directory to the search
|
|
list near this line. Stopped"
|
|
unless $rpm_libdir;
|
|
}
|
|
|
|
WriteMakefile(
|
|
NAME => 'RPM',
|
|
DISTNAME => 'Perl-RPM',
|
|
VERSION => '0.40',
|
|
LIBS => $rpm_libs,
|
|
DEFINE => $rpm_defines,
|
|
PM => \%PM,
|
|
XS => \%XS,
|
|
EXE_FILES => [ @SAMPLES ],
|
|
OBJECT => $OBJECT,
|
|
INC => $rpm_libdir ? "-I. -I$rpm_libdir" : '-I.',
|
|
DIR => [],
|
|
# XSOPT => '-noversioncheck -nolinenumbers',
|
|
XSOPT => '-noversioncheck',
|
|
dist => { COMPRESS => 'gzip -9f' },
|
|
clean => { FILES => $CLEAN }
|
|
);
|
|
|
|
exit;
|
|
|
|
sub MY::c_o
|
|
{
|
|
package MY; # so that "SUPER" works right
|
|
|
|
my $text = shift->SUPER::c_o(@_);
|
|
|
|
$text =~ s/CCCMD.*$/$& -o \$*\$(OBJ_EXT)/gm;
|
|
|
|
$text;
|
|
}
|
|
|
|
sub MY::tools_other
|
|
{
|
|
package MY;
|
|
|
|
my $text = shift->SUPER::tools_other(@_);
|
|
|
|
"$text\nECHO=\@echo\nRPM=rpm\n";
|
|
}
|
|
|
|
sub MY::post_constants
|
|
{
|
|
my $self = shift;
|
|
|
|
"SPECFILE=$self->{DISTNAME}.spec";
|
|
}
|
|
|
|
sub MY::postamble
|
|
{
|
|
my $self = shift;
|
|
|
|
my @text;
|
|
|
|
#
|
|
# Only create the support files and extra make targets when packaging
|
|
# locally.
|
|
#
|
|
unless ($opts{build})
|
|
{
|
|
#
|
|
# Generate the spec file from <DATA> with substitutions
|
|
#
|
|
print "Local build detected. Generating $self->{DISTNAME}.spec...\n";
|
|
$self->{INSTALLDIR} = $Config{installsitearch}
|
|
unless $self->{INSTALLDIR};
|
|
$self->{RELEASE} = $opts{release} || 1 unless $self->{RELEASE};
|
|
# Copy all the RPM_* args from the command-line (parsed earlier), but
|
|
# don't overwrite any of MM's internal values
|
|
$self->{uc $_} ||= $opts{$_} for (keys %opts);
|
|
open(SPEC, "> $self->{DISTNAME}.spec");
|
|
if ($?)
|
|
{
|
|
die "Error creating spec file: $!, stopped";
|
|
}
|
|
else
|
|
{
|
|
for (<DATA>)
|
|
{
|
|
s/(SPEC_(\w+))/$self->{$2}/eg;
|
|
print SPEC $_;
|
|
}
|
|
close(SPEC);
|
|
}
|
|
print "Generating rpmrc...\n";
|
|
open(RPMRC, "> rpmrc");
|
|
if ($?)
|
|
{
|
|
die "Error creating rpmrc file: $!, stopped";
|
|
}
|
|
else
|
|
{
|
|
print RPMRC <<END_rpmrc;
|
|
include: /usr/lib/rpm/rpmrc
|
|
macrofiles: /usr/lib/rpm/macros:rpmmacro
|
|
END_rpmrc
|
|
close(RPMRC);
|
|
}
|
|
print "Generating rpmmacros...\n";
|
|
open(MACRO, "> rpmmacro");
|
|
if ($?)
|
|
{
|
|
die "Error creating macro file: $!, stopped";
|
|
}
|
|
else
|
|
{
|
|
chomp(my $rpm_ver = (reverse split(/ /, qx{rpm --version}))[0]);
|
|
print MACRO <<END_macro;
|
|
%_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
|
|
%_builddir %{_topdir}
|
|
%_sourcedir %{_topdir}
|
|
%_specdir %{_topdir}
|
|
%_srcrpmdir %{_topdir}
|
|
%_rpmdir %{_topdir}
|
|
%_topdir $cwd
|
|
%rpm_version $rpm_ver
|
|
END_macro
|
|
close(MACRO);
|
|
}
|
|
|
|
# Create the rules that create RPM and SRPM files
|
|
push(@text, qq{
|
|
rpm: \$(SPECFILE) \$(DISTVNAME).tar\$(SUFFIX)
|
|
\t\$(RPM) -bb --clean --rcfile rpmrc \$(SPECFILE)
|
|
|
|
srpm: \$(SPECFILE) \$(DISTVNAME).tar\$(SUFFIX)
|
|
\t\$(RPM) -bs --clean --rcfile rpmrc \$(SPECFILE)
|
|
});
|
|
}
|
|
|
|
# Create per-object-file dependancy on RPM.h
|
|
push(@text, ('',
|
|
(map { "$_: RPM.h\n" } @OBJECT),
|
|
''));
|
|
|
|
join("\n", @text);
|
|
}
|
|
|
|
__DATA__
|
|
Summary: Perl bindings to the rpmlib API
|
|
Name: SPEC_DISTNAME
|
|
Version: SPEC_VERSION
|
|
Release: SPEC_RELEASE
|
|
Epoch: 1
|
|
Vendor: Randy J. Ray
|
|
Copyright: Artistic
|
|
Group: Development/Languages
|
|
Source: SPEC_DISTNAME-SPEC_VERSION.tar.gz
|
|
Url: http://www.blackperl.com/SPEC_DISTNAME
|
|
BuildRequires: perl >= 0:5.00503
|
|
Requires: perl >= 0:5.00503
|
|
Requires: rpm = %{rpm_version}
|
|
Provides: SPEC_DISTNAME = SPEC_VERSION
|
|
Provides: perl(RPM::Database) = %{rpm_version}
|
|
Provides: perl(RPM::Header) = %{rpm_version}
|
|
Obsoletes: rpm-perl
|
|
BuildRoot: %{_tmppath}/%{name}-root
|
|
|
|
%description
|
|
Native Bindings to the RPM API for Perl 5.005 and later. Uses a combination
|
|
of Perl and C/XS (compiled) code to provide access to the RPM database,
|
|
headers of installed packages, and more.
|
|
|
|
%prep
|
|
%setup -q -n SPEC_DISTNAME-%{version}
|
|
|
|
%build
|
|
CFLAGS="$RPM_OPT_FLAGS" perl Makefile.PL
|
|
|
|
%clean
|
|
rm -rf $RPM_BUILD_ROOT
|
|
|
|
%install
|
|
rm -rf $RPM_BUILD_ROOT
|
|
install_dir=SPEC_INSTALLDIR
|
|
mkdir -p $RPM_BUILD_ROOT/$installdir
|
|
make PREFIX=$RPM_BUILD_ROOT/usr install
|
|
|
|
[ -x /usr/lib/rpm/brp-compress ] && /usr/lib/rpm/brp-compress
|
|
|
|
find $RPM_BUILD_ROOT/usr -type f -print |
|
|
sed "s@^$RPM_BUILD_ROOT@@g" |
|
|
grep -v perllocal.pod |
|
|
grep -v "\.packlist" > SPEC_DISTNAME-SPEC_VERSION-filelist
|
|
if [ "$(cat SPEC_DISTNAME-SPEC_VERSION-filelist)X" = "X" ] ; then
|
|
echo "ERROR: EMPTY FILE LIST"
|
|
exit -1
|
|
fi
|
|
|
|
%files -f SPEC_DISTNAME-SPEC_VERSION-filelist
|
|
%defattr(-,root,root)
|
|
|
|
%changelog
|
|
* Tue Oct 10 2000 Randy J. Ray <rjray@blackperl.com>
|
|
- Turned into a meta-file that gets filled in by MakeMaker
|
|
|
|
* Tue Oct 3 2000 Jeff Johnson <jbj@redhat.com>
|
|
- update to 0.28.
|
|
|
|
* Mon Oct 2 2000 root <root@redhat.com>
|
|
- Spec file was autogenerated.
|