Fixes for automated build script:
[synfig.git] / autobuild / synfigstudio-linux-build.sh
1 #!/bin/bash
2 #
3 # SynfigStudio build script
4 # Copyright (c) 2008-2010 Konstantin Dmitriev
5 #
6 # This package is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation; either version 2 of
9 # the License, or (at your option) any later version.
10 #
11 # This package is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
15
16 # = Usage: =
17 #    ./synfigstudio-linux-build.sh [mode] [revision]
18 #
19 # where:
20 #   - [mode] is full|quick|package
21 #   - [revision] - commit id, branch or tag (package mode only)
22 #
23 # To build packages it's required to run this script as root.
24 #
25 # = Examples: =
26 #
27 # == Standart mode ==
28 # Configure and (re)build synfigstudio into your homedir:
29 #    ./synfigstudio-linux-build.sh
30 # Configure and make clean build synfigstudio into your homedir:
31 #    ./synfigstudio-linux-build.sh full
32 # Quick rebuild of synfig (without configure) into your homedir:
33 #    ./synfigstudio-linux-build.sh quick
34 #
35 # == Package mode ==
36 # Build package from "master" branch:
37 #    ./synfigstudio-linux-build.sh package
38 # Build package from "genete_setup_dialog" branch
39 #    ./synfigstudio-linux-build.sh package origin/genete_setup_dialog
40 # Build package from commit with "synfigstudio-0.62.00" tag
41 #    ./synfigstudio-linux-build.sh package synfigstudio-0.62.00
42 #
43 # Note: Make sure to run "git clean -f -x -d" after you switch branches.
44 #
45 # = TODO =
46 # - debuginfo packages
47
48 RELEASE=1
49 PREFIX=$HOME/synfig/
50
51 PACKAGES_PATH=$HOME/synfig-packages             # path where to write packages files
52 PACKAGES_BUILDROOT=/tmp/synfig-buildroot        # path of for build infrastructure
53
54 # full = clean, configure, make
55 # standart = configure, make
56 # quick = make
57 # package = chroot, clean, configure, make
58 MODE='standart'
59 OPENGL=0
60 DEBUG=0
61 BREED=
62
63 LIBSIGCPP=2.0.17
64 GLEW=1.5.1
65 CAIROMM=1.2.4
66 IMAGEMAGICK=6.4.0
67 #GTKMM=2.10.9
68 GTKMM=2.8.12
69 FTGL=2.1.2
70 FREEGLUT=2.4.0
71 GTKGLEXT=1.2.0
72 GTKGLEXTMM=1.2.0
73 #LIBXMLPP=2.14.0
74 LIBXMLPP=2.20.0
75 #LIBXMLPP=2.23.2
76 GLIBMM=2.12.8
77 #GLIBMM=2.18.1
78 GITVERSION=1.7.0   # git version for chroot environment
79
80 SYNFIG_REPO_DIR=''
81 WORKDIR_IS_REPO=0
82
83 # Allow overriding PREFIX and/or BREED
84 if [ -f "./synfigstudio-build.conf" ] ; then
85         . "./synfigstudio-build.conf"
86 fi
87
88 set -e
89
90 if (test "$2"); then
91         SELECTEDREVISION=$2
92 else
93         SELECTEDREVISION=origin/master
94 fi
95
96 mklibsigcpp()
97 {
98 if [ ! -d ${PREFIX}/include/sigc++-2.0 ]; then
99         pushd /source
100         [ ! -d libsigc++-${LIBSIGCPP} ] && tar -xjf libsigc++-${LIBSIGCPP}.tar.bz2
101         cd libsigc++-${LIBSIGCPP}
102         #make clean || true
103         ./configure --prefix=${PREFIX}/ --includedir=${PREFIX}/include --disable-static --enable-shared 
104         make -j2 
105         make install
106         cd ..
107         popd
108 fi
109 }
110
111 mkglibmm()
112 {
113 if [ ! -d ${PREFIX}/include/glibmm-2.4 ]; then
114         pushd /source
115         [ ! -d glibmm-${GLIBMM} ] && tar -xjf glibmm-${GLIBMM}.tar.bz2
116         cd glibmm-${GLIBMM}
117         #[[ $DOCLEAN == 1 ]] && make clean || true
118         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --disable-fulldocs 
119         make -j2 
120         make install
121         cd ..
122         popd
123 fi
124 }
125
126 mklibxmlpp()
127 {
128 if [ ! -d ${PREFIX}/include/libxml++-2.6 ]; then
129         pushd /source
130         [ ! -d libxml++-${LIBXMLPP} ] && tar -xjf libxml++-${LIBXMLPP}.tar.bz2
131         cd libxml++-${LIBXMLPP}
132         #[[ $DOCLEAN == 1 ]] && make clean || true
133         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared 
134         make -j2 
135         make install
136         cd ..
137         popd
138 fi
139 }
140
141 mkimagemagick()
142 {
143 if [ ! -d ${PREFIX}/include/ImageMagick ]; then
144         pushd /source
145         [ ! -d ImageMagick-${IMAGEMAGICK} ] && tar -xjf ImageMagick-${IMAGEMAGICK}-10.tar.bz2 && cd ImageMagick-${IMAGEMAGICK} && patch -p1 < ../ImageMagick-6.4.0-multilib.patch && cd ..
146         cd ImageMagick-${IMAGEMAGICK}
147         #[[ $DOCLEAN == 1 ]] && make clean || true
148         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared \
149                 --with-modules \
150                 --without-perl \
151                 --without-x \
152                 --with-threads \
153                 --with-magick_plus_plus \
154                 --without-gslib \
155                 --without-wmf \
156                 --without-lcms \
157                 --without-rsvg \
158                 --without-xml \
159                 --without-windows-font-dir \
160                 --without-dps \
161                 --without-djvu \
162                 --without-fpx \
163                 --without-jbig \
164                 --without-jp2 \
165                 --without-tiff \
166                 --without-fontconfig \
167                 --without-freetype \
168                 --without-png \
169                 --without-gvc \
170                 --without-openexr
171         sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
172         sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
173         make -j2 
174         make install
175         cd ..
176         popd
177 fi
178 }
179
180 mkglew()
181 {
182 [ ! -d glew-${GLEW} ] && tar -xzf glew-${GLEW}.tar.gz && cd glew && patch -p1 < glew-${GLEW}-makefile.patch && cd ..
183         pushd /source
184         cd glew
185         #[[ $DOCLEAN == 1 ]] && make clean || true
186         sed -i -e 's/\r//g' config/config.guess
187         make -j2
188         make install GLEW_DEST=${PREFIX} libdir=/lib bindir=/bin  includedir=/include
189         cd ..
190         popd
191 }
192
193 mkcairomm()
194 {
195 if [ ! -d ${PREFIX}/include/cairomm-1.0 ]; then
196         pushd /source
197         [ ! -d cairomm-${CAIROMM} ] && tar -xzf cairomm-${CAIROMM}.tar.gz
198         cd cairomm-${CAIROMM}
199         #[[ $DOCLEAN == 1 ]] && make clean || true
200         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --enable-docs=no
201         make -j2 
202         make install
203         cd ..
204 fi
205 }
206
207 mkgtkmm()
208 {
209 if [ ! -d ${PREFIX}/include/gtkmm-2.4 ]; then
210         pushd /source
211         [ ! -d gtkmm-${GTKMM} ] && tar -xjf gtkmm-${GTKMM}.tar.bz2
212         cd gtkmm-${GTKMM}
213         #[[ $DOCLEAN == 1 ]] && make clean || true
214         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --disable-examples --disable-demos --disable-docs
215         make -j2
216         make install
217         cd ..
218         popd
219 fi
220 }
221
222 mkfreeglut()
223 {
224         pushd /source
225         [ ! -d freeglut-${FREEGLUT} ] && tar -xzf freeglut-${FREEGLUT}.tar.gz
226         cd freeglut-${FREEGLUT}
227         #[[ $DOCLEAN == 1 ]] && make clean || true
228         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static  --disable-warnings --enable-shared 
229         make -j2
230         make install
231         cd ..
232         popd
233 }
234
235 mkftgl()
236 {
237         pushd /source
238         if [ ! -d ftgl-${FTGL} ]; then
239                 tar -xjf ftgl-${FTGL}.tar.bz2
240                 cd FTGL
241                 patch -p1 -b < ftgl-2.1.2-destdir.patch
242                 patch -p1 -b < ftgl-2.1.2-Glyph-g++_41.patch
243                 patch -p1 -b < ftgl-2.1.2-pc_req.patch
244                 patch -p1 -b < ftgl-2.1.2-rpath_FTGLDemo.patch
245                 patch -p1 -b < ftgl-2.1.2-ttf_font.patch
246                 sed -i.fixed_version -e 's|2.0.5|%{version}|g' unix/configure.ac unix/configure
247                 cd ..
248         fi
249         cd FTGL
250         cd unix
251         #[[ $DOCLEAN == 1 ]] && make clean || true
252         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --with-gl-inc=${PREFIX}/include  --with-gl-lib=${PREFIX}/lib  --with-glut-inc=${PREFIX}/include  --with-glut-lib=${PREFIX}/lib  --with-x 
253         make all -j2
254         make install
255         cd ..
256         popd
257 }
258
259 mkgtkglext()
260 {
261         pushd /source
262         [ ! -d gtkglext-${GTKGLEXT} ] && tar -xjf gtkglext-${GTKGLEXT}.tar.bz2
263         cd gtkglext-${GTKGLEXT}
264         #[[ $DOCLEAN == 1 ]] && make clean || true
265         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include  --disable-gtk-doc --disable-static  --enable-shared 
266         make -j2 
267         make install
268         cd ..
269         popd
270 }
271
272 mkgtkglextmm()
273 {
274         pushd /source
275         [ ! -d gtkglextmm-${GTKGLEXTMM} ] && tar -xjf gtkglextmm-${GTKGLEXTMM}.tar.bz2 && cd gtkglextmm-${GTKGLEXTMM} && patch -p1 < gtkglextmm-1.2.0-aclocal.diff && cd ..
276         cd gtkglextmm-${GTKGLEXTMM}
277         #[[ $DOCLEAN == 1 ]] && make clean || true
278         ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include  --disable-dependency-tracking --disable-static  --enable-shared 
279         make -j2 
280         make install
281         popd
282 cd ..
283 }
284
285 mkgit()
286 {
287         pushd /source
288         [ ! -d git-${GITVERSION} ] && tar -xjf git-${GITVERSION}.tar.bz2
289         cd git-${GITVERSION}
290         ./configure
291         make -j2
292         make install
293         cd ..
294         popd
295 }
296
297 mkETL()
298 {
299 if [ -f ${SYNFIG_REPO_DIR}/ETL/trunk/configure.ac ]; then
300         pushd ${SYNFIG_REPO_DIR}/ETL/trunk
301 else
302         pushd ${SYNFIG_REPO_DIR}/ETL
303 fi
304
305
306 if ( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ); then
307         echo "Cleaning source tree..."
308         make clean || true
309 fi
310
311
312 if [[ $MODE != 'quick' ]]; then
313         echo "Going to configure..."
314         rm -f aclocal.m4
315         autoreconf --install --force
316         /bin/sh ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include $DEBUG 
317 fi
318
319 make -j2
320 make install
321
322 popd
323 }
324
325 mksynfig()
326 {
327 if [ -d ${SYNFIG_REPO_DIR}/synfig-core/trunk/configure.ac ]; then
328         pushd ${SYNFIG_REPO_DIR}/synfig-core/trunk
329 else
330         pushd ${SYNFIG_REPO_DIR}/synfig-core
331 fi
332
333 export CXXFLAGS=-I${PREFIX}/include/ImageMagick
334
335 ( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ) && make clean || true
336
337 if [[ $MODE != 'quick' ]]; then
338         libtoolize --ltdl --copy --force
339         sed -i 's/^AC_CONFIG_SUBDIRS(libltdl)$/m4_ifdef([_AC_SEEN_TAG(libltdl)], [], [AC_CONFIG_SUBDIRS(libltdl)])/' configure.ac || true
340         sed -i 's/^# AC_CONFIG_SUBDIRS(libltdl)$/m4_ifdef([_AC_SEEN_TAG(libltdl)], [], [AC_CONFIG_SUBDIRS(libltdl)])/' configure.ac || true
341         autoreconf --install --force
342         /bin/sh ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --with-magickpp --without-libavcodec $DEBUG  
343 fi
344
345 #It looks like mod_libavcodec causes segfault on synfig-core when rendering to png.
346 #Tested on: ffmpeg-0.4.9-0.52.20080908.fc10.x86_64.
347
348 #if [[ $GIT == 1 ]]; then
349 #       export CFLAGS=-I/opt/synfig/include/GL/
350 #       export LDFLAGS=-L/opt/synfig/lib/
351 #else
352 #       export CFLAGS=''
353 #       export LDFLAGS=''
354 #fi
355
356 make -j2
357 make install
358
359 popd
360 }
361
362 mksynfigstudio()
363 {
364 if [ -d ${SYNFIG_REPO_DIR}/synfig-studio/trunk/configure.ac ]; then
365         pushd ${SYNFIG_REPO_DIR}/synfig-studio/trunk
366 else
367         pushd ${SYNFIG_REPO_DIR}/synfig-studio
368 fi
369
370 ( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ) && make clean || true
371
372 if [[ $MODE != 'quick' ]]; then
373         autoreconf --install --force
374         /bin/sh ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared $DEBUG
375 fi
376
377 make -j2
378 make install
379
380 for n in AUTHORS COPYING NEWS README
381 do
382         cp -f $n ${PREFIX}
383 done
384
385 if [ -e synfigstudio-cph-monitor ]; then
386         cp -f synfigstudio-cph-monitor ${PREFIX}/bin/
387         chmod a+x ${PREFIX}/bin/synfigstudio-cph-monitor
388 fi
389
390 popd
391 }
392
393 mkpack()
394 {
395         [ -d /packages ] || mkdir /packages
396         
397         #== tar.bz2 ==
398         TBZPREFIX=/tmp/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}
399         rm -rf $TBZPREFIX
400         mkdir -p $TBZPREFIX
401         cp -r  ${PREFIX}/* $TBZPREFIX
402         
403         if [[ $DEBUG == '--enable-debug' ]]; then
404                 GDB="which gdb && xterm -e  gdb -ex run -ex quit \$PREFIX/bin/synfig \$@ || "
405         else
406                 GDB=''
407         fi
408         
409         #binaries
410         cat > $TBZPREFIX/synfig <<EOF
411 #!/bin/sh
412
413 PREFIX=\`dirname \$0\`
414 PREFIX=\`cd \$PREFIX; pwd\`
415 export LD_LIBRARY_PATH=\${PREFIX}/lib:\$LD_LIBRARY_PATH
416 export SYNFIG_ROOT=\${PREFIX}/
417 export SYNFIG_MODULE_LIST=\${PREFIX}/etc/synfig_modules.cfg
418
419 $GDB\$PREFIX/bin/synfig \$@
420 EOF
421         if [[ $DEBUG == '--enable-debug' ]]; then
422                 GDB="which gdb && xterm -e  gdb -ex run -ex quit \$PREFIX/bin/synfigstudio \$@ || "
423         else
424                 GDB=''
425         fi
426         cat > $TBZPREFIX/synfigstudio <<EOF
427 #!/bin/sh
428
429 PREFIX=\`dirname \$0\`
430 PREFIX=\`cd \$PREFIX; pwd\`
431 export LD_LIBRARY_PATH=\${PREFIX}/lib:\$LD_LIBRARY_PATH
432 export SYNFIG_ROOT=\${PREFIX}/
433 export SYNFIG_MODULE_LIST=\${PREFIX}/etc/synfig_modules.cfg
434
435 $GDB\$PREFIX/bin/synfigstudio \$@
436 EOF
437         chmod a+x $TBZPREFIX/synfig
438         chmod a+x $TBZPREFIX/synfigstudio
439         
440         #cleaning devel stuff
441         mkdir $TBZPREFIX/bin.tmp
442         mv $TBZPREFIX/bin/synfig $TBZPREFIX/bin.tmp/synfig
443         mv $TBZPREFIX/bin/synfigstudio $TBZPREFIX/bin.tmp/synfigstudio
444         rm -rf $TBZPREFIX/bin
445         mv $TBZPREFIX/bin.tmp $TBZPREFIX/bin
446         
447         rm -f $TBZPREFIX/lib/*.la
448         rm -f $TBZPREFIX/lib/*.a
449         rm -rf $TBZPREFIX/include
450         rm -rf $TBZPREFIX/lib/gdkmm-2.4
451         rm -rf $TBZPREFIX/lib/libxml++-2.6
452         rm -rf $TBZPREFIX/lib/glibmm-2.4
453         rm -rf $TBZPREFIX/lib/gtkmm-2.4
454         rm -rf $TBZPREFIX/lib/pkgconfig
455         rm -rf $TBZPREFIX/lib/sigc++-2.0
456         rm -rf $TBZPREFIX/share/doc
457         rm -rf $TBZPREFIX/share/aclocal
458         rm -rf $TBZPREFIX/share/ImageMagick-6.4.0
459         rm -rf $TBZPREFIX/share/man
460         
461         rm -f /packages/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}.tar.bz2
462         pushd $TBZPREFIX/../
463         tar cjf /packages/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}.tar.bz2 synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}
464         popd
465         rm -rf $TBZPREFIX
466         
467         #== rpm ==
468         RPMREVISION=`echo $REVISION.$BREED | sed s/-/_/`
469     cat > synfigstudio.spec << EOF
470 %define __spec_install_post /bin/true
471
472 Name:           synfigstudio
473 Version:        ${VERSION}
474 Release:        ${RPMREVISION}.${RELEASE}
475 Summary:        Film-Quality 2D Vector Animation package
476 Group:          Applications/Graphics
477 License:        GPL
478 URL:            http://www.synfig.org/
479 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
480 Obsoletes:       synfig ETL
481 AutoReqProv: no
482
483
484 %description
485 Synfig Animation Studio is a powerful, industrial-strength vector-based
486 2D animation software, designed from the ground-up for producing
487 feature-film quality animation with fewer people and resources.
488 It is designed to be capable of producing feature-film quality
489 animation. It eliminates the need for tweening, preventing the
490 need to hand-draw each frame. Synfig features spatial and temporal
491 resolution independence (sharp and smoothat any resolution or framerate),
492 high dynamic range images, and a flexible plugin system.
493
494
495 %prep
496
497
498 %build
499
500 %install
501 rm -rf \$RPM_BUILD_ROOT
502 mkdir -p \$RPM_BUILD_ROOT/${PREFIX}
503 cp -r  ${PREFIX}/* \$RPM_BUILD_ROOT/${PREFIX}
504 mkdir -p \$RPM_BUILD_ROOT/usr/share
505 mv \$RPM_BUILD_ROOT/${PREFIX}/share/applications \$RPM_BUILD_ROOT/usr/share
506 mv \$RPM_BUILD_ROOT/${PREFIX}/share/icons \$RPM_BUILD_ROOT/usr/share
507 mkdir -p \$RPM_BUILD_ROOT/usr/share/mime-info
508 ln -sf ${PREFIX}/share/mime-info/synfigstudio.keys \$RPM_BUILD_ROOT/usr/share/mime-info/synfigstudio.keys
509 ln -sf ${PREFIX}/share/mime-info/synfigstudio.mime \$RPM_BUILD_ROOT/usr/share/mime-info/synfigstudio.mime
510 mkdir -p \$RPM_BUILD_ROOT/usr/share/pixmaps
511 ln -sf ${PREFIX}/share/pixmaps/sif_icon.png \$RPM_BUILD_ROOT/usr/share/pixmaps/sif_icon.png
512 ln -sf ${PREFIX}/share/pixmaps/synfig_icon.png \$RPM_BUILD_ROOT/usr/share/pixmaps/synfig_icon.png
513 mkdir -p \$RPM_BUILD_ROOT/usr/bin
514 mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfig \$RPM_BUILD_ROOT/usr/bin/
515 mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio \$RPM_BUILD_ROOT/usr/bin/
516
517 if [ -e \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio-cph-monitor ]; then
518 mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio-cph-monitor \$RPM_BUILD_ROOT/usr/bin/
519 cat > \$RPM_BUILD_ROOT/usr/share/applications/synfigstudio-cph-monitor.desktop << EOD
520 [Desktop Entry]
521 Encoding=UTF-8
522 Name=Synfig Studio CPH monitor
523 Comment=This application collecting statistics about synfig crashes
524 Exec=synfigstudio-cph-monitor
525 Icon=terminal.png
526 Terminal=true
527 Type=Application
528 Categories=Graphics;Application;
529 X-Desktop-File-Install-Version=0.15
530 EOD
531 fi
532
533 #cleaning devel stuff
534 rm -f \$RPM_BUILD_ROOT/${PREFIX}/lib/*.la
535 rm -f \$RPM_BUILD_ROOT/${PREFIX}/lib/*.a
536 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/bin
537 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/include
538 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/gdkmm-2.4
539 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/libxml++-2.6
540 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/glibmm-2.4
541 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/gtkmm-2.4
542 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/pkgconfig
543 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/sigc++-2.0
544 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/doc
545 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/aclocal
546 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/ImageMagick-6.4.0
547 rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/man
548
549
550 %clean
551 rm -rf \$RPM_BUILD_ROOT
552
553 %post
554
555 %postun
556
557 %files
558 %defattr(-,root,root,-)
559 $PREFIX
560 /usr/share/*
561 /usr/bin/*
562
563 %changelog
564 * Sat Mar 21 2009 Konstantin Dmitriev <ksee.zelgadis@gmail.com> - 0.61.09-2354.morevnapackage.1
565 - Update to SVN2354
566 - Include ImageMagick-c++
567
568 * Wed Jan 14 2009 Konstantin Dmitriev <ksee.zelgadis@gmail.com> - 0.61.09-2316.morevnapackage.1
569 - First release
570
571 EOF
572     rpmbuild -bb synfigstudio.spec
573     
574     #cp /usr/src/redhat/RPMS/$ARCH/synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm ../
575     cp /usr/src/rpm/RPMS/$ARCH/synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm /packages/
576     pushd /packages/
577     alien -k synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm
578     rm -rf synfigstudio-${VERSION}
579     popd
580 }
581
582 initialize()
583 {
584         # Make sure we have all dependencies installed
585         echo "Checking dependencies..."
586         DEB_LIST_MINIMAL="build-essential autoconf automake libltdl3-dev libtool gettext cvs libpng12-dev libjpeg62-dev libfreetype6-dev libfontconfig1-dev libgtk2.0-dev libxml2-dev bzip2"
587         if which yum >/dev/null; then
588                 PKG_LIST="git"
589                 if [[ $MODE == 'package' ]]; then
590                         PKG_LIST="${PKG_LIST} debootstrap rsync"
591                 else
592                         PKG_LIST="${PKG_LIST} libpng-devel libjpeg-devel freetype-devel fontconfig-devel atk-devel pango-devel cairo-devel gtk2-devel gettext-devel libxml2-devel libxml++-devel gcc-c++ autoconf automake libtool libtool-ltdl-devel cvs"
593                         PKG_LIST="${PKG_LIST} OpenEXR-devel libmng-devel ImageMagick-c++-devel gtkmm24-devel glibmm24-devel"
594                 fi
595                 if ! ( rpm -qv $PKG_LIST ); then
596                         echo "Running yum (you need root privelegies to do that)..."
597                         su -c "yum install $PKG_LIST"
598                 fi
599         elif which apt-get >/dev/null; then
600                 PKG_LIST="git-core"
601                 if [[ $MODE == 'package' ]]; then
602                         if [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
603                                 #we are inside of chroot
604                                 PKG_LIST="$DEB_LIST_MINIMAL rpm alien xsltproc wget python"
605                         else
606                                 #we have to prepare chroot
607                                 PKG_LIST="${PKG_LIST} debootstrap rsync"
608                         fi
609                 else
610                         PKG_LIST="${PKG_LIST} ${DEB_LIST_MINIMAL} libmng-dev libgtkmm-2.4-dev libglibmm-2.4-dev libsigc++-2.0-dev"
611                 fi
612                 if ! ( dpkg -s $PKG_LIST >/dev/null ); then
613                         echo "Running apt-get (you need root privelegies to do that)..."
614                         echo 
615                         #echo "http_proxy =====" $http_proxy
616                         #env
617                         sudo apt-get update || true
618                         sudo apt-get install -y $PKG_LIST
619                 fi
620         else
621                 if [[ $MODE == 'package' ]]; then
622                         if ! ( which git && which debootstrap ) ; then
623                                 echo "ERROR: Please install 'git' and 'debootstrap'."
624                                 exit;
625                         fi
626                 else
627                         echo "WARNING: This build script does not works with package mangement systems other than rpm/yum or apt/dpkg! You should install dependent packages manually."
628                         read
629                 fi
630         fi
631         echo "Done."
632         
633         if [[ $DEBUG == 1 ]]; then
634                 DEBUG='--enable-debug'
635         else
636                 DEBUG=''
637         fi
638         
639         
640         
641         if [[ $MODE == 'package' ]] && [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
642                 SYNFIG_REPO_DIR="/source/synfig.git"
643                 PREFIX="/opt/synfig"
644                 
645                 which git || mkgit
646                 
647                 pushd $SYNFIG_REPO_DIR
648                 git fetch
649                 git reset --hard HEAD
650                 #we can't switch directly to specified commit wit old git, so let's create temporary branch:
651                 #git checkout master || ( git branch -f master && git checkout master )
652                 #git branch -f __build $SELECTEDREVISION
653                 #git checkout __build
654                 git checkout $SELECTEDREVISION
655                 VERSION=`cat synfig-core/configure.ac |egrep "AC_INIT\(\[Synfig Core\],"| sed "s|.*Core\],\[||" | sed "s|\],\[.*||"`
656                 if [ -z $BREED ]; then
657                         BREED="`git branch -a --no-color --contains HEAD | sed -e s/\*\ // | sed -e s/\(no\ branch\)// | tr '\n' ' ' | tr -s ' ' | sed s/^' '//`"
658                         if ( echo $BREED | egrep origin/master > /dev/null ); then
659                                 #give a priority to master branch
660                                 BREED='master'
661                         else
662                                 BREED=`echo $BREED | cut -d ' ' -f 1`
663                                 BREED=${BREED##*/}
664                         fi
665                         BREED=${BREED%_master}
666                 fi
667                 [[ $DEBUG == 1 ]] && BREED=${BREED}_debug
668                 REVISION=`git show --pretty=medium $SELECTEDREVISION | head -n 3 |tail -n 1 | sed 's/Date: *//' | sed 's/ +.*//'`
669                 REVISION=`date --date="${REVISION}" +%Y%m%d`
670                 echo
671                 echo
672                 echo "BUILDING synfigstudio-$VERSION-$REVISION.$BREED.$RELEASE"
673                 echo
674                 echo
675                 sleep 5
676                 popd
677                 
678                 #Trick to detect arch under chroot
679                 #ARCH=`rpm -q --queryformat='%{arch}\n' e2fsprogs`
680                 MACHINE_TYPE=`uname -m`
681                 case ${MACHINE_TYPE} in
682                         i586)
683                         ARCH=i386;;
684                         i686)
685                         ARCH=i386;;
686                         *)
687                         ARCH=${MACHINE_TYPE};;
688                 esac
689         else
690                 #detecting repo
691                 if git rev-parse --git-dir >/dev/null; then
692                         SYNFIG_REPO_DIR=$(dirname `git rev-parse --git-dir`)
693                         WORKDIR_IS_REPO=1
694                 fi
695         fi
696         
697         export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
698         export PATH=${PREFIX}/bin:$PATH
699         export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
700         export LDFLAGS="-Wl,-rpath -Wl,\\\$\$ORIGIN/lib"
701 }
702
703 mk()
704 {
705         if [[ WORKDIR_IS_REPO == 0 ]]; then
706                 SYNFIG_REPO_DIR=`pwd`/synfig.git/
707                 git clone git://synfig.git.sourceforge.net/gitroot/synfig/synfig ${SYNFIG_REPO_DIR}
708         fi
709         
710         mkETL
711         mksynfig
712         mksynfigstudio
713 }
714
715 mkpackage()
716 {
717         #check if we already in chroot
718         if [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
719                 echo "We are in chroot now."
720                 
721                 echo "[user]"  > $HOME/.gitconfig
722                 echo "email = packages@synfig.org"  >> $HOME/.gitconfig
723                 echo "name = Synfig Packager" >> $HOME/.gitconfig
724                 
725                 
726                 
727                 #synfig-core deps
728                 mklibsigcpp
729                 mkglibmm
730                 mklibxmlpp
731                 if [[ $OPENGL == 1 ]]; then
732                         mkglew
733                 fi
734                 mkimagemagick
735                 #synfig-studio deps
736                 mkcairomm
737                 mkgtkmm
738                 if [[ $OPENGL == 1 ]]; then
739                         mkfreeglut
740                         mkftgl
741                         mkgtkglext
742                         mkgtkglextmm
743                 fi
744                 
745                 mkETL
746                 mksynfig
747                 mksynfigstudio
748                 
749                 mkpack
750         else
751                 [ -d $HOME/synfig-packages ] || mkdir -p $HOME/synfig-packages
752                 #DEB_LIST="build-essential,autoconf,automake,libltdl3-dev,libtool,gettext,cvs,libpng12-dev,libjpeg62-dev,libfreetype6-dev,libfontconfig1-dev,libgtk2.0-dev,libxml2-dev,bzip2,rpm,alien,xsltproc"
753                 for ARCH in i386 amd64; do
754                 if [[ $ARCH == 'i386' ]];then
755                         SETARCH='linux32'
756                 else
757                         SETARCH='linux64'
758                 fi
759                 if ! [ -e $PACKAGES_BUILDROOT.$ARCH/etc/chroot.id ]; then
760                         debootstrap --arch=$ARCH --variant=buildd  --include=sudo etch $PACKAGES_BUILDROOT.$ARCH http://ftp.us.debian.org/debian
761                 fi
762                 #set chroot ID
763                 echo "Synfig Packages Buildroot" > $PACKAGES_BUILDROOT.$ARCH/etc/chroot.id
764                 cp -f $0 $PACKAGES_BUILDROOT.$ARCH/build.sh
765                 #keep proxy settings
766                 if ! [ -z $http_proxy ]; then 
767                         #echo "export http_proxy=\"$http_proxy\";" >> $PACKAGES_BUILDROOT.$ARCH/root/.bashrc
768                         #echo "echo 'proxy export done';" >> $PACKAGES_BUILDROOT.$ARCH/root/.bashrc
769                         echo "Acquire::http::Proxy \"$http_proxy\";" > $PACKAGES_BUILDROOT.$ARCH/etc/apt/apt.conf
770                 fi
771                 #fetch sources to cache
772                 [ -d $PACKAGES_BUILDROOT.$ARCH/source ] && rm -rf $PACKAGES_BUILDROOT.$ARCH/source || true
773                 if ! [ -d $PACKAGES_BUILDROOT/synfig.git ]; then
774                         if [[ $WORKDIR_IS_REPO == 1 ]]; then
775                                 git clone $SYNFIG_REPO_DIR $PACKAGES_BUILDROOT/synfig.git
776                                 sed -i 's|url = .*|url = git://synfig.git.sourceforge.net/gitroot/synfig/synfig|' $PACKAGES_BUILDROOT/synfig.git/.git/config
777                         else
778                                 git clone git://synfig.git.sourceforge.net/gitroot/synfig/synfig $PACKAGES_BUILDROOT/synfig.git
779                         fi
780                 fi
781                 pushd $PACKAGES_BUILDROOT
782                 cd synfig.git && git fetch && cd ..
783                 [ ! -e git-$GITVERSION.tar.bz2 ] && wget -c http://kernel.org/pub/software/scm/git/git-$GITVERSION.tar.bz2
784                 for FILE in \
785                         cairomm-${CAIROMM}.tar.gz \
786                         glibmm-${GLIBMM}.tar.bz2 \
787                         gtkmm-${GTKMM}.tar.bz2 \
788                         libsigc++-${LIBSIGCPP}.tar.bz2 \
789                         libxml++-${LIBXMLPP}.tar.bz2 \
790                         ImageMagick-6.3.8-invalid-gerror-use.patch \
791                         ImageMagick-${IMAGEMAGICK}-10.tar.bz2 \
792                         ImageMagick-${IMAGEMAGICK}-multilib.patch \
793                         ImageMagick-${IMAGEMAGICK}-xdg-open.patch
794                 do
795                         #[ ! -e $FILE ] && wget -c http://download.tuxfamily.org/morevna/morevnapackage/sources/$FILE
796                         rsync -av rsync://download.tuxfamily.org/pub/synfig/packages/sources/$FILE ./
797                 done
798                 if [[ $OPENGL == 1 ]]; then
799                 for FILE in \
800                         glew-${GLEW}.tar.gz\
801                         glew-${GLEW}-makefile.patch \
802                         freeglut-${FREEGLUT}.tar.gz \
803                         ftgl-${FTGL}.tar.gz \
804                         ftgl-${FTGL}-destdir.patch \
805                         ftgl-${FTGL}-Glyph-g++_41.patch \
806                         ftgl-${FTGL}-pc_req.patch \
807                         ftgl-${FTGL}-rpath_FTGLDemo.patch \
808                         ftgl-${FTGL}-ttf_font.patch \
809                         gtkglext-${GTKGLEXT}.tar.bz2 \
810                         gtkglextmm-${GTKGLEXTMM}.tar.bz2 \
811                         gtkglextmm-${GTKGLEXTMM}-aclocal.diff
812                 do
813                         #[ ! -e $FILE ] && wget -c http://download.tuxfamily.org/morevna/morevnapackage/sources/$FILE
814                         rsync -av rsync://download.tuxfamily.org/pub/synfig/packages/sources/$FILE ./
815                 done
816                 fi
817                 popd
818                 #copy sources
819                 [ -d $PACKAGES_BUILDROOT.$ARCH/source ] || mkdir -p $PACKAGES_BUILDROOT.$ARCH/source
820                 cp -rf $PACKAGES_BUILDROOT/* $PACKAGES_BUILDROOT.$ARCH/source/
821                 #go to chroot
822                 $SETARCH chroot $PACKAGES_BUILDROOT.$ARCH env http_proxy=$http_proxy bash /build.sh package $SELECTEDREVISION
823                 mv -f $PACKAGES_BUILDROOT.$ARCH/packages/* $PACKAGES_PATH
824                 done
825                 echo
826                 echo
827                 find $PACKAGES_PATH/synfigstudio* -maxdepth 1
828                 echo "     DONE BUILDING PACKAGES INTO $HOME/synfig-packages"
829                 echo
830         fi
831 }
832
833 ###=================================== MAIN ======================================
834
835 if [ -z $1 ]; then
836         ARG='standart'
837 else
838         ARG=$1
839 fi
840
841 case $ARG in
842         full)
843                 MODE='full'
844                 initialize
845                 mk
846                 exit;;
847         standart)
848                 MODE='standart'
849                 initialize
850                 mk
851                 exit;;
852         quick)
853                 MODE='quick'
854                 initialize
855                 mk
856                 exit;;
857         package)
858                 MODE='package'
859                 initialize
860                 mk$ARG
861                 exit;;
862         *)
863                 MODE='package'
864                 initialize
865                 mk$ARG
866                 exit;;
867 esac