aboutsummaryrefslogtreecommitdiff
path: root/graphics/GraphicsMagick/GraphicsMagick.SlackBuild
blob: 648788a1a78a07d1d10ca386c43d2ef7fd56ce8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/bin/sh

# Slackware build script for GraphicsMagick

# Originally written by Giovanne Castro <email removed>.

# Updated by B. Watson <yalhcru@gmail.com>, as the original author is
# MIA. Original version had no license; I'm licensing the update under the
# terms of the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20191130 bkw: update for v1.3.33.
# 20181201 bkw: update for v1.3.31 (BUILD=1 again).

# 20181126 bkw:
# - fix the perl module. at one point it really did work, but lately
#   people (including me) were getting 'undefined symbol' errors when
#   trying to load the perl module (e.g. by running findimagedupes).
#   Thanks to Kevin Smallman for a very helpful bug report.
# - update find/chmod stuff to my personal template.
# - BUILD=2

# 20180627 bkw:
# - updated for v1.3.30.
# - get rid of the need to build/install/build again for the Tcl bindings.
# - actually install the damn perl module (when did *that* break?)
# - get rid of static tcl/tk libs
# - get rid of --disable-openmp (but add OPENMP=no just in case)

# 20180123 bkw: updated for v1.3.28
# 20171219 bkw: updated for v1.3.27, added last few missing delegates
# 20170708 bkw: updated for v1.3.26
# 20161016 bkw: updated for v1.3.25
# 20151127 bkw: fix build on -current, in anticipation of 14.2

# 20150803 bkw:
# - updated for v1.3.21
# - install docs to /usr/doc/$PRGNAM-$VERSION, not /usr/share/doc
# - build perl bindings (PerlMagick)
# - build Tcl bindings (TclMagick)
# - document optional deps in README

PRGNAM=GraphicsMagick
VERSION=${VERSION:-1.3.33}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -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

OLDVER="$(pkg-config --silence-errors --modversion $PRGNAM || true)"
if [ "$OLDVER" != "" ]; then
  cat <<EOF 1>&2
************************************************************************
*
* $PRGNAM is already installed (version $OLDVER).
*
* If the build fails, 'removepkg $PRGNAM' and try again.
*
* Don't say I didn't warn you.
*
************************************************************************
EOF
  sleep 3
fi


rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.bz2
cd $PRGNAM-$VERSION
chown -R root:root .
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+

# libfpx isn't autodetected, so let's help it a bit:
if [ -e /usr/include/fpxlib.h ]; then
  FPXOPT=yes
else
  FPXOPT=no
fi

# 20180628 bkw: OpenMP seems to work OK now, so enable it by default. In
# fact it may have worked in GraphicsMagick all along: I copied the
# config arguments from Pat's SlackBuild for ImageMagick... But since
# I haven't done exhaustive testing, make it possible to disable:
if [ "${OPENMP:-yes}" = "yes" ]; then
  OMPOPT=--enable-openmp
  WITHOMP=WITH
else
  OMPOPT=--disable-openmp
  WITHOMP=WITHOUT
fi

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  $OMPOPT \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --mandir=/usr/man \
  --docdir=/usr/doc/$PRGNAM-$VERSION \
  --program-prefix= \
  --with-x \
  --with-frozenpaths=no \
  --without-modules \
  --enable-static=no \
  --enable-shared \
  --with-perl \
  --with-quantum-depth=16 \
  --with-fpx=$FPXOPT \
  --build=$ARCH-slackware-linux

make INSTALLDIRS=vendor
make install INSTALLDIRS=vendor DESTDIR=$PKG

### Build the perl module, if not disabled.

# In the olden days, PerlMagick was a separate module, not part of
# GraphicsMagick, and it had its own SlackBuild. These days, PerlMagick
# is integrated into the GraphicsMagick source. Supposedly, PerlMagick
# has to be built after GraphicsMagick is installed system-wide, but
# I've come up with functional (if unattractive) way around that.
# 20181126 bkw: ...which stopped working with 1.3.30. Updated this
# so it works again, and as a side effect, it's slightly less repulsive
# to look at.

WITHPERL=WITHOUT
if [ "${PERL:-yes}" = "yes" ]; then
  cd PerlMagick

  perl Makefile.PL \
    PREFIX=/usr \
    INSTALLDIRS=vendor \
    INSTALLVENDORMAN1DIR=/usr/man/man1 \
    INSTALLVENDORMAN3DIR=/usr/man/man3

  sed -i "/^LDDLFLAGS/s,\$, -L$PKG/usr/lib$LIBDIRSUFFIX -l$PRGNAM," Makefile

  make

  # 'make test' will attempt to display an image, if it thinks it's running
  # in X. Let's not do this. Also, use the shared libs in $PKG.
  # The rungm.sh script sets up the environment so GraphicsMagick will look
  # for its support files in the source tree instead of /usr.
  DISPLAY="" \
  LD_PRELOAD="$PKG/usr/lib$LIBDIRSUFFIX/lib$PRGNAM.so" \
    ../rungm.sh make test

  make install DESTDIR=$PKG

  cd -
  WITHPERL=WITH
fi
### Done with perl module

### Build the tcl module, if not disabled.

WITHTCL=WITHOUT
if [ "${TCL:-yes}" = "yes" ]; then
  # 20180627 bkw: the TclMagick build chokes on the .la file.
  # In 15.0, we will be removing all .la files. For 14.2, I'll
  # temporarily rename it out of the way.
  # You can thank libtool and its .la files (with hard-coded
  # paths) for this stupidity.

  rename .la .la_renamed $PKG/usr/lib$LIBDIRSUFFIX/*.la

  INC=$(pwd)

  cd TclMagick

  # LIBS needed to avoid libTclMagick.so: undefined symbol: tclStubsPtr
  source /usr/lib$LIBDIRSUFFIX/tclConfig.sh

  LIBS="$TCL_STUB_LIB_FLAG -L$PKG/usr/lib$LIBDIRSUFFIX" \
  CFLAGS="$SLKCFLAGS -I$INC" \
  CXXFLAGS="$SLKCFLAGS -I$INC" \
  ../rungm.sh ./configure \
    --with-magick=$(pwd)/../wand/GraphicsMagickWand-config \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --mandir=/usr/man \
    --enable-shared \
    --disable-static \
    --with-tcl=/usr/lib$LIBDIRSUFFIX \
    --with-tk=/usr/lib$LIBDIRSUFFIX

  ../rungm.sh make
  ../rungm.sh make install INSTALL=$( which install ) DESTDIR=$PKG

  WITHTCL=WITH
  cd -
  rename .la_renamed .la $PKG/usr/lib$LIBDIRSUFFIX/*.la_renamed
fi
### Done with tcl module

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

find $PKG -name perllocal.pod \
  -o -name ".packlist" \
  -o -name "*.bs" \
  | xargs rm -f

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a ChangeLog *.txt $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
sed \
  -e "s,@WITHOMP@,$WITHOMP," \
  -e "s,@WITHTCL@,$WITHTCL," \
  -e "s,@WITHPERL@,$WITHPERL," \
  $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}