Files
alien/alien
1999-09-05 05:50:40 +00:00

221 lines
4.7 KiB
Bash
Executable File

#!/bin/sh
# Script to handle alien packages under Debian
#
# Options:
# -p<Patch> Manually specify a patch
# -n Install an alien package using heuristics
# -g Prepare directories for development
#
# Christoph Lameter, <clameter@debian.org> October 30, 1996
set -e
LIB=/usr/lib/alien
while expr "$1" : '-.*' >/dev/null; do
case $1 in
-n) NOPATCH=1
;;
-g) GENERATE=1
;;
-p*) PATCHFILE=`expr "$1" : '-p\(.*\)'`
if [ ! -f "$PATCHFILE" ]; then
echo "$PATCHFILE not found"
exit 1
fi
;;
*) echo "Bad option $1"
exit 1
;;
esac
shift
done
if [ "$NOPATCH" -a "$PATCHFILE" ]; then
echo "Cannot handle -n and -p options simultaneously"
exit 1
fi
FILE=$1
if [ "$FILE" = "" ]; then
echo "Usage: alien [-n] [-g] [-p<patchfile>] <filename>"
exit 1
fi
if [ ! -f $FILE ]; then
echo "File $FILE not found"
exit 1
fi
DATE="`822-date`"
# Cut off the directory name
if echo $FILE|grep -q "/"; then
X=`expr $FILE : '.*/\(.*\)'`
else
X="$FILE"
fi
if expr $X : '.*\.rpm' >/dev/null; then
RPM=1
if [ ! -f /etc/rpmrc ]; then
echo "RPM Package Manager not installed"
exit 1
fi
X=`expr $X : '\(.*\)\.rpm'`
else
case $X in
*.tgz) X=`expr $X : '\(.*\).tgz'` ;;
*.tar.gz) X=`expr $X : '\(.*\).tar.gz'` ;;
*) echo "Format of filename bad $FILE" ;;
esac
fi
if [ "$NOPATCH" = "" ]; then
if [ "$PATCHFILE" = "" ]; then
PATCHFILE=/var/lib/alien/$X.diff.gz
fi
if [ ! -f $PATCHFILE -a "$GENERATE" = "" ]; then
echo "Patchfile $PATCHFILE not found."
exit 1
fi
if [ ! -f $PATCHFILE ]; then
PATCHFILE=
fi
fi
if [ "$RPM" ]; then
# Analyze the FILE name
PACKAGE=`expr $X : '\(.*\)-.*-.*\..*'`
VERSION=`expr $X : '.*-\(.*\)-.*\..*'`
DELTA=`expr $X : '.*-.*-\(.*\)\..*'`
ARCHIT=`expr $X : '.*-.*-.*\..\(.*\)'`
if [ "$DELTA" = "" -o "$VERSION" = "" -o "$PACKAGE" = "" ]; then
echo "Filename must have the form Package-Version-Release.Architecture.rpm"
exit 1
fi
if [ "$ARCHIT" = "386" ]; then
ARCHIT=i386
fi
CDIR=rpm
else
# Generic handling for slackware and tar.gz packages
if echo $X | grep -q "-"; then
PACKAGE=`expr $X : '\(.*\)-.*'`
VERSION=`expr $X : '.*-\(.*\)'`
else
PACKAGE=$X
VERSION=1
fi
if [ "$VERSION" = "" -o "$PACKAGE" = "" ]; then
echo "Filename must have the form Package-Version.tgz"
exit 1
fi
ARCHIT=i386
DELTA=1
CDIR=tgz
fi
mkdir $PACKAGE-$VERSION
cd $PACKAGE-$VERSION
mkdir debian
echo "-- Unpacking $FILE"
if [ "$RPM" ]; then
(cd ..;rpm2cpio $FILE) | cpio --extract --make-directories --no-absolute-filenames
# install script could be located here.
else
# Must be a tar file
tar zxpf ../$FILE
# Make install script to postinst
if [ -e install/doinst.sh ]; then
mv install/doinst.sh debian/postinst
if ! rmdir install; then
echo "Other files besides doinst.sh present in install directory"
echo "Install script cannot be used as postinst script!"
mv debian/postinst install/doinst.sh
fi
fi
fi
if [ "$GENERATE" ]; then
cd ..
cp -a $PACKAGE-$VERSION $PACKAGE-$VERSION.orig
echo "Directories $PACKAGE-$VERSION.orig + $PACKAGE-$VERSION prepared."
cd $PACKAGE-$VERSION
fi
# Now lets patch it!
if [ "$PATCHFILE" ]; then
echo "-- Patching in $PATCHFILE"
zcat $PATCHFILE | patch -p1
X=`find . -name "*.rej"`
if [ "$X" ]; then
echo "Patch failed: giving up"
exit 1
fi
rm `find . -name "*.orig"`
else
echo "-- Automatic package debianization"
# Generate all the values we need
if [ "$EMAIL" = "" ]; then
EMAIL="$USER@`cat /etc/mailname`"
fi
USERNAME=`awk -F: -vUSER=$USER '$1 == USER { print $5; }' /etc/passwd`
if [ "$USERNAME" = "" -a -x /usr/bin/ypmatch ]; then
# Give NIS a try
USERNAME=`ypmatch $USER passwd.byname|awk -F: '{ print $5; }'`
fi
if echo $USERNAME | grep -q "\,"; then
X=`expr index "$USERNAME" ","`
X=`expr $X - 1`
USERNAME=`expr substr "$USERNAME" 1 $X`
fi
cd debian
X=`(cd $LIB/$CDIR;ls)`
for i in $X; do
sed <$LIB/$CDIR/$i >$i -e "s/#PACKAGE#/$PACKAGE/g" \
-e "s/#VERSION#/$VERSION/g" \
-e "s/#DELTA#/$DELTA/g" \
-e "s/#ARCHIT#/$ARCHIT/g" \
-e "s/#EMAIL#/$EMAIL/g" \
-e "s/#USERNAME#/$USERNAME/g" \
-e "s/#DATE#/$DATE/g"
done
if [ "$RPM" ]; then
(cd ../..;rpm -qpi $FILE) >>copyright
fi
cd ..
# Assume all files in etc are conffiles
if [ -d etc ]; then
find etc -type f -printf "/%p\n" >debian/conffiles
fi
fi
chmod a+x debian/rules
if [ "$GENERATE" = "" ]; then
echo "-- Building the package $PACKAGE-$VERSION-$DELTA.deb"
debian/rules binary
cd ..
rm -rf $PACKAGE-$VERSION
echo "-- Installing generated .deb package"
dpkg -i $PACKAGE*.deb
rm $PACKAGE\_$VERSION-$DELTA*.deb
fi
echo "-- Successfully finished"
exit 0