LinuxQuestions.org
View the Most Wanted LQ Wiki articles.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware
User Name
Password
Slackware This Forum is for the discussion of Slackware Linux.

Notices



Reply
 
Search this Thread
Old 06-10-2006, 10:21 AM   #1
Yalla-One
Member
 
Registered: Oct 2004
Location: Norway
Distribution: Slackware, CentOS
Posts: 635

Rep: Reputation: 35
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
 
Old 06-10-2006, 10:59 AM   #2
gbonvehi
Senior Member
 
Registered: Jun 2004
Location: Argentina (SR, LP)
Distribution: Slackware
Posts: 3,145

Rep: Reputation: 51
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.
 
Old 06-10-2006, 11:10 AM   #3
Yalla-One
Member
 
Registered: Oct 2004
Location: Norway
Distribution: Slackware, CentOS
Posts: 635

Original Poster
Rep: Reputation: 35
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
 
Old 06-10-2006, 11:13 AM   #4
gbonvehi
Senior Member
 
Registered: Jun 2004
Location: Argentina (SR, LP)
Distribution: Slackware
Posts: 3,145

Rep: Reputation: 51
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?
 
Old 06-10-2006, 11:18 AM   #5
Yalla-One
Member
 
Registered: Oct 2004
Location: Norway
Distribution: Slackware, CentOS
Posts: 635

Original Poster
Rep: Reputation: 35
Yep - Everything is done/taken care of in the /tmp/tmp-scribus (and later in the /tmp/package-scribus) directory

-Y1
 
Old 06-10-2006, 02:16 PM   #6
theoffset
Member
 
Registered: Aug 2005
Location: Guadalajara, Jal, Mexico
Distribution: Slackware Linux
Posts: 211

Rep: Reputation: 30
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...
 
Old 06-10-2006, 03:03 PM   #7
dunric
Member
 
Registered: Jul 2004
Distribution: Slackware, FreeBSD
Posts: 483

Rep: Reputation: 92
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/
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
a generic SlackBuild shilo Slackware 46 06-20-2008 12:45 AM
xmame slackbuild Harp00 Slackware 17 04-27-2006 06:51 PM
Slackbuild and Patches stormtracknole Slackware 4 03-30-2006 09:12 PM
SlackBuild CrEsPo Slackware 2 03-19-2006 02:58 PM
KDE.SlackBuild spaceballs Slackware 8 04-01-2005 09:42 AM


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

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration