LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Slackware (http://www.linuxquestions.org/questions/slackware-14/)
-   -   Trouble with my first SlackBuild script (http://www.linuxquestions.org/questions/slackware-14/trouble-with-my-first-slackbuild-script-453431/)

Yalla-One 06-10-2006 10:21 AM

Trouble with my first SlackBuild script
 
Hi,

It's finally time to venture out to start creating my own slackbuilds. I've created a few successful ones based on Eric's SlackBuild repository on slackware.com/~alien, and have run into problems with my script for Scribus.

The program gets built and installed in the right(?) places, but for some reason I cannot get my final Slackware(tgz)-package to install Scribus in the KDE start menu. When doing checkinstall this works fine, but with my script, it doesn't. Can anyone please help me out where I've gone wrong?

Code:

#!/bin/sh
# -----------------------------------------------------------------------------
#
# Slackware SlackBuild script
# ===========================
# Based on:  Eric Hameleers <alien@slackware.com>
# For:      scribus
# URL:      http://www.scribus.org/
# Changelog:
#            * Initial build.
#
# Run 'sh SlackBuild --cleanup' to build a Slackware package.
# The package (.tgz) plus descriptive .txt file are created in /tmp .
# Install using 'installpkg'.
#
# -----------------------------------------------------------------------------

# --- INIT ---
# Set initial variables:
CWD=`pwd`
if [ "$TMP" = "" ]; then
  TMP=/tmp
fi

PRGNAM=scribus
VERSION=1.3.3.2
ARCH=${ARCH:-i486}
BUILD=1

DOCS="AUTHORS BUGS ChangeLog* COPYING CREDITS FAQ GPL* LICENSE MAINTAINERS \
      NEWS README* TODO"

# If you have more source files, list them here as SOURCE[1], SOURCE[2], etc.
# If you know the URL for a source file, you can put that into the SRCURL[]
# variable, and the SlackBuild script will try to download it for you.

SOURCE[0]="${PRGNAM}-${VERSION}.tar.bz2"
SRCURL[0]="http://puzzle.dl.sourceforge.net/sourceforge/${PRGNAM}/${PRGNAM}-${VERSION}.tar.bz2"

##
## --- with a little luck, you won't have to edit below this point --- ##
##

if [ "$ARCH" = "i386" ]; then
  SLKCFLAGS="-O2 -march=i386 -mtune=i686"
elif [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2"
elif [ "$ARCH" = "athlon-xp" ]; then
  SLKCFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
fi

PKG=$TMP/package-$PRGNAM

if [ ! -d $TMP/tmp-$PRGNAM ]; then
  mkdir -p $TMP/tmp-$PRGNAM # location to build the source
elif [ "$1" != "--oldbuild" ]; then
  # If the "--oldbuild" parameter is present, we keep
  #  the old build files and continue;
  # By default we remove the remnants of previous build and continue:
  rm -rf $TMP/tmp-$PRGNAM/*
fi

if [ ! -d $PKG ]; then
  mkdir -p $PKG # place for the package to be built
fi


# --- SOURCE FILE AVAILABILITY ---

for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do
  if ! [ -f ${CWD}/${SOURCE[$i]} ]; then
    if ! [ "${SRCURL[$i]}" = "" ]; then
      echo "Source '${SOURCE[$i]}' not available yet... will download now:"
      wget -nv -O "${CWD}/${SOURCE[$i]}" "${SRCURL[$i]}"
      if [ $? -ne 0 ]; then
        echo "Downloading '${SOURCE[$i]}' failed... aborting the build."
        exit 1
      fi
    else
      echo "File '${SOURCE[$i]}' not available... aborting the build."
      exit 1
    fi
  fi
done

if [ "$1" == "--download" ]; then
  echo "Download complete."
  exit 0
fi

# --- PACKAGE BUILDING ---

echo "++"
echo "|| $PRGNAM-$VERSION"
echo "++"

# Safety net 8-)
if [ "$PKG" = "" -o "$PKG" = "/" ] ; then
  cat <<-EOT
        Your script sucks!!!
        You were about to delete the contents of your computer's hard disk!
        Please provide a value for the variable 'PKG'.
        EOT
  exit 1
fi
# We always erase old package's contents:
rm -rf $PKG/*

cd $PKG

# Explode the package framework:
if [ -f $CWD/_$PRGNAM.tar.gz ]; then
  explodepkg $CWD/_$PRGNAM.tar.gz
fi

cd $TMP/tmp-$PRGNAM


# --- TARBALL EXTRACTION,PATCH,MODIFY ---

echo "Extracting the program tarball(s) for $PRGNAM..."
for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do
  if `file $CWD/${SOURCE[$i]} | grep -q ": bzip2"`; then
    tar -xjvf $CWD/${SOURCE[$i]}
  elif `file $CWD/${SOURCE[$i]} | grep -qi ": zip"`; then
    unzip $CWD/${SOURCE[$i]}
  else
    tar -xzvf $CWD/${SOURCE[$i]}
  fi
done
cd ${PRGNAM}-${VERSION}

chown -R root.root *
find . -perm 777 -exec chmod 755 {} \;


# --- BUILDING ---

echo Building ...

CFLAGS="$SLKCFLAGS" \
./configure --prefix=$(kde-config --prefix) \
            2>&1 | tee $CWD/configure-${PRGNAM}.log
make 2>&1 | tee $CWD/make-${PRGNAM}.log

#
# Install all the needed stuff to the package dir
#
# Use installwatch if available:
which installwatch > /dev/null 2>&1
if [ $? == 0 ]; then
  installwatch -o $CWD/install-${PRGNAM}.log make DESTDIR=$PKG install
else
  make DESTDIR=$PKG install 2>&1 |tee $CWD/install-${PRGNAM}.log
fi


# --- DOCUMENTATION ---

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS \
      $PKG/usr/doc/$PRGNAM-$VERSION
chmod -R a-w $PKG/usr/doc/$PRGNAM-$VERSION/*

# Move incorrectly installed man pages
mv $PKG/usr/share/man $PKG/usr/ && rmdir $PKG/usr/share
# Compress the man page(s)
gzip -9f $PKG/usr/man/*/*
gzip -9f $PKG/usr/man/*/*/*

# Strip binaries
( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
)


# --- OWNERSHIP, RIGHTS ---

chmod -R o-w $PKG
chown root:bin $PKG/usr/bin/* $PKG/usr/sbin/* $PKG/bin/* $PKG/sbin/* \
              $PKG/usr/X11R6/bin/* $PKG/opt/kde/bin/* 2>/dev/null


# --- PACKAGE DESCRIPTION ---

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
if [ -f $CWD/doinst.sh ]; then
  cat $CWD/doinst.sh > $PKG/install/doinst.sh
fi
# I give in :-/
if [ -f $CWD/slack-requires ]; then
  cat $CWD/slack-requires > $PKG/install/slack-requires
fi


# --- BUILDING ---

# Build the package:
cd $PKG
makepkg --linkadd y --chown n $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz \
  2>&1 | tee $CWD/makepkg-${PRGNAM}.log
(cd $TMP && md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz.md5)
cat $CWD/slack-desc | grep "^${PRGNAM}" > $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txt
if [ -f $CWD/slack-requires ]; then
  cat $CWD/slack-requires > $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.dep
fi


# --- CLEANUP ---

# Clean up the extra stuff:
if [ "$1" = "--cleanup" ]; then
  rm -rf $TMP/tmp-$PRGNAM
  rm -rf $PKG
fi

Input and explaination to where I've gone wrong greatly appreciated!

-Y1

gbonvehi 06-10-2006 10:59 AM

Where that file needs to be copied to be listed on KDE menu? And where is the file when the source is decompressed?
Maybe you need to add some checking for KDE shortcuts.

Yalla-One 06-10-2006 11:10 AM

Hi, and thanks for answering!

The script unpacks the original archive to /tmp/tmp-scribus, where you find scribus.desktop, so I assume this is the file that needs to be copied to /opt/kde/share/applnk/Office for instance, but adding such a statement manually would be an ugly fix, as the Makefile seems to do it correctly when I use ./configure&&make&&checkinstall...

Hope that answers what you asked ;)

-Y1

gbonvehi 06-10-2006 11:13 AM

Yeap, that answers my questions, but I've another one, when the script issues make install with DESTDIR set, does it creates the directory structure and copies the file inside $PKG?

Yalla-One 06-10-2006 11:18 AM

Yep - Everything is done/taken care of in the /tmp/tmp-scribus (and later in the /tmp/package-scribus) directory

-Y1

theoffset 06-10-2006 02:16 PM

Have you checked if after issuing "make install DESTDIR=/tmp/tmp-scribus" it copies the .desktop file to /tmp/tmp-scribus/opt/kde/share/applnk/Office??

It might be that the makefile checks to see if the directory exists before copying the file...

dunric 06-10-2006 03:03 PM

I've created SlackBuild script for Scribus some time ago. By looking into it I've discovered I have had to manually copy .desktop file because install target from Makefile didn't do it.
In the install section I've following:
Code:

[ -d $PKG/opt/kde/share/applications/kde ] || mkdir -p $PKG/opt/kde/share/applications/kde
cp scribus.desktop $PKG/opt/kde/share/applications/kde/



All times are GMT -5. The time now is 08:47 AM.