--- /dev/null
+#!/usr/bin/perl
+
+# need this for hostname()
+use File::Basename;
+use Sys::Hostname;
+use Getopt::Long;
+use strict;
+
+my $MainDir = '/tmp/cpan';
+
+# set default options, then get options
+my %options=();
+$options{'email'}=(getpwuid($<))[0] . "\@" . hostname();
+GetOptions(\%options, "email=s", "n=s", "create") || exit 1;
+
+my $InputFile = $ARGV[0];
+my $create = '';
+
+if ($options{'create'}) {
+ $create = '-c';
+}
+
+my $tarball = basename($InputFile);
+$tarball =~ /(\S+)\-(\S+)\.tar\.gz/;
+my $clm_name=$1;
+my $clm_version=$2;
+
+my $class = dirname($InputFile);
+$class =~ s/^\.\/[0-9][0-9]_//;
+if ($class ne '.') {
+ $class = "($class)";
+} else {
+ $class = "";
+}
+
+# Change ::'s to -'s
+$clm_name =~ s/::/-/g;
+
+my $clm_changelog = get_changelog();
+
+# complain if either parameter is missing
+($clm_name eq "") && die "Module name not specified\n";
+($clm_version eq "") && die "Module version not specified\n";
+
+# Create and Open file to create SPEC files.
+mkdir($MainDir, 0755);
+system("cp $InputFile $MainDir");
+my $filename = $clm_name . '.spec';
+open (FILE, "> $MainDir/$filename");
+
+# Print the spec file. Lots of substitutions here.
+print FILE "Summary: $clm_name module for perl $class
+Name: perl-$clm_name
+Version: $clm_version
+Release: 2
+Copyright: distributable
+Group: Applications/CPAN
+Source0: $clm_name-$clm_version.tar.gz
+Url: http://www.cpan.org
+BuildRoot: /var/tmp/perl-$clm_name-buildroot/
+BuildRequires: perl >= 5.00503
+Requires: perl >= 5.00503
+
+%description
+$clm_name module for perl
+
+# Provide perl-specific find-{provides,requires}.
+%define __find_provides /usr/lib/rpm/find-provides.perl
+%define __find_requires /usr/lib/rpm/find-requires.perl
+
+%prep
+%setup -q -n $clm_name-%{version} $create
+
+%build
+CFLAGS=\"\$RPM_OPT_FLAGS\" perl Makefile.PL
+make
+
+%clean
+rm -rf \$RPM_BUILD_ROOT
+
+%install
+rm -rf \$RPM_BUILD_ROOT
+eval `perl '-V:installarchlib'`
+mkdir -p \$RPM_BUILD_ROOT/\$installarchlib
+make PREFIX=\$RPM_BUILD_ROOT/usr install
+find \$RPM_BUILD_ROOT/usr -type f -print | \
+ sed \"s\@^\$RPM_BUILD_ROOT\@\@g\" | \
+ grep -v perllocal.pod | \
+ grep -v \"\\.packlist\" > $clm_name-$clm_version-filelist
+if [ \"\$(cat $clm_name-$clm_version-filelist)X\" = \"X\" ] ; then
+ echo \"ERROR: EMPTY FILE LIST\"
+ exit -1
+fi
+
+%files -f $clm_name-$clm_version-filelist
+%defattr(-,root,root)
+
+%changelog
+* $clm_changelog
+- Spec file was autogenerated.
+";
+close(FILE);
+
+# Now build the rpm
+create_rcfiles();
+
+open (LOG, "> $MainDir/LogFile");
+build_rpm();
+close LOG;
+
+sub cleanup {
+ unlink "$MainDir/$filename";
+ unlink "$MainDir/$tarball";
+}
+
+sub build_rpm {
+ my $retval;
+
+ # First, make sure it unpacks cleanely
+ system("rpm --rcfile $MainDir/rpmrc -bp $MainDir/$filename");
+ $retval = $? >> 8;
+ if ($retval != 0) {
+ print "RPM test unpacking failed!\n";
+ print LOG "PREP failed: $filename\n";
+ return;
+ }
+
+ system("rpm --rcfile $MainDir/rpmrc -bs --rmsource --rmspec --clean $MainDir/$filename");
+ $retval = $? >> 8;
+ if ($retval != 0) {
+ print "RPM building failed!\n";
+ print LOG "SOURCE failed: $filename\n";
+ return;
+ }
+ cleanup();
+}
+
+sub create_rcfiles {
+ open(MACROS, "> $MainDir/macros");
+ print MACROS qq{
+%_topdir $MainDir
+%_builddir %{_topdir}/junk
+%_rpmdir %{_topdir}
+%_sourcedir %{_topdir}
+%_specdir %{_topdir}
+%_srcrpmdir %{_topdir}/temp
+};
+ close(MACROS);
+
+ open(RPMRC, "> $MainDir/rpmrc");
+ print RPMRC qq{
+include: /usr/lib/rpm/rpmrc
+macrofiles: /usr/lib/rpm/macros:$MainDir/macros
+};
+ close(RPMRC);
+}
+
+sub get_changelog {
+ # generate the changelog entry from available system info
+
+ return ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[(localtime)[6]] . " " .
+ ("Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")[(localtime)[4]] . " " .
+ (localtime)[3] . " " . (1900+(localtime)[5]) . " " .
+ (getpwuid($<))[6] . " <" . $options{'email'} . ">";
+}
+
--- /dev/null
+#!/bin/sh
+
+# note this works for both a.out and ELF executables
+# it also auto-generates requirment lines for shell scripts
+
+ulimit -c 0
+
+filelist=`sed "s/['\"]/\\\&/g"`
+exelist=`echo $filelist | xargs -r file | fgrep executable | cut -d: -f1 `
+scriptlist=`echo $filelist | xargs -r file | egrep ":.* (commands|script) " | cut -d: -f1 `
+liblist=`echo $filelist | xargs -r file | grep "shared object" | cut -d : -f1 `
+
+for f in $exelist; do
+ if [ -x $f ]; then
+ ldd $f | awk '/=>/ { print $1 }'
+ fi
+done | sort -u | sed "s/['\"]/\\\&/g" | xargs -r -n 1 basename | grep -v 'libNoVersion.so' | grep -v '4[um]lib.so' | sort -u
+
+for f in $liblist; do
+ ldd $f | awk '/=>/ { print $1 }'
+done | sort -u | sed "s/['\"]/\\\&/g" | xargs -r -n 1 basename | grep -v 'libNoVersion.so' | grep -v '4[um]lib.so' | sort -u
+
+perllist=
+for f in $scriptlist; do
+ [ -x $f ] || continue
+ interp=`head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 `
+ case $interp in
+ */perl) perllist="$perllist $f" ;;
+ esac
+ echo $interp
+done | sort -u
+
+for f in $liblist $exelist ; do
+ objdump -p $f | awk '
+ BEGIN { START=0; LIBNAME=""; }
+ /Version References:/ { START=1; }
+ /required from/ && (START==1) {
+ sub(/:/, "", $3);
+ LIBNAME=$3;
+ }
+ (START==1) && (LIBNAME!="") && ($4!="") { print LIBNAME "(" $4 ")"; }
+ /^$/ { START=0; }
+ '
+done | sort -u
+
+#
+# Generate perl module dependencies, if any.
+set -x
+[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \
+ echo $perllist | tr [:blank:] \\n | /usr/lib/rpm/perl.req | sort -u