#!/usr/bin/perl -w # Create a SB.o compliant .info file # (and a .SlackBuild from a template, if one doesn't already exist, # and a slack-desc if a README exists) # Fill in your name and email address here: $name = 'B. Watson'; $email = 'yalhcru@gmail.com'; use LWP::Simple; use Digest::MD5 'md5_hex'; sub usage { die "usage: mkslackinfo url [homepage] [version]\n"; } $url = shift || &usage; # Take package name from the current dir chomp ($package = `pwd`); $package =~ s,.*/,,; # Take filename from last part of URL ($file = $url) =~ s,.*/,,; # Generate appropriate extract command if($file =~ /\.zip$/i) { $extract = "unzip \$CWD/\$PRGNAM-\$VERSION.zip"; } elsif($file =~ /\.rar$/i) { $extract = "unrar x \$CWD/\$PRGNAM-\$VERSION.rar"; } elsif($file =~ /\.7z$/i) { $extract = "7za x \$CWD/\$PRGNAM-\$VERSION.rar"; } elsif($file =~ /(\.tar(?:$|\..*)|\.t[bxg]z)/i) { $extract = "tar xvf \$CWD/\$PRGNAM-\$VERSION$1"; } $homepage = shift; if(!$homepage) { if($url =~ m{http://downloads.(?:sourceforge|sf).net/([^/]+)/}) { $homepage = "http://sourceforge.net/projects/$1/"; } elsif($url =~ m,((?:ht|f)tp://[^/]+/),) { $homepage = $1; } else { die "Can't figure out homepage\n"; } warn "Assuming homepage is $homepage\n"; } $version = shift || 0; if(!$version) { # Try to figure out the version number. The regex is fairly dumb. if($file =~ /-(\d[\d._]+(?:[a-z]+)?)\.(?:tar|t[gzb]z|zip|rar|7z)/) { $version = $1; warn "Version appears to be $version\n"; } else { die "Can't figure out version number\n"; } } if(not -e "$package.SlackBuild") { warn "$package.SlackBuild does not exist, creating from template\n"; open my $build, ">$package.SlackBuild" or die $!; while(<DATA>) { s/__NAME__/$name/g; s/__EMAIL__/$email/g; s/__PRGNAM__/$package/g; s/__VERSION__/$version/g; s/__EXTRACT__/$extract/g; print $build "$_"; } close $build; chmod 0755, "$package.SlackBuild"; } if((-e "README") && (! -e "slack-desc")) { warn "slack-desc does not exist, creating from existing README\n"; system("mkslackdesc"); } print STDERR "Downloading $url..."; $content = get($url); if($content) { $md5 = md5_hex($content); print STDERR "OK\nWriting $package.info\n"; } else { warn "Can't download $url with LWP::Simple, MD5SUM will be wrong in .info\n"; $md5 = "FIXME"; } open $f, ">$package.info" or die $!; $content = <<EOF; PRGNAM="$package" VERSION="$version" HOMEPAGE="$homepage" DOWNLOAD="$url" MD5SUM="$md5" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" MAINTAINER="$name" EMAIL="$email" EOF print $content; print $f $content; close $f; if($url =~ /sourceforge\.net/i) { $extra_wget_params = "--user-agent wget"; } else { $extra_wget_params = "--referer='$url'"; } exec("wget $extra_wget_params $url"); __DATA__ #!/bin/sh # Slackware build script for __PRGNAM__ # Written by __NAME__ (__EMAIL__) # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. PRGNAM=__PRGNAM__ VERSION=${VERSION:-__VERSION__} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION __EXTRACT__ cd $PRGNAM-$VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PRGNAM-$VERSION \ --build=$ARCH-slackware-linux make make install-strip DESTDIR=$PKG find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done rm -f $PKG/usr/info/dir gzip -9 $PKG/usr/info/*.info* find $PKG -name perllocal.pod \ -o -name ".packlist" \ -o -name "*.bs" \ | xargs rm -f mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a <documentation> \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}