diff --git a/inkscape-0.92.4-1.build.sh b/inkscape-0.92.4-1.build.sh new file mode 100755 index 0000000..6879867 --- /dev/null +++ b/inkscape-0.92.4-1.build.sh @@ -0,0 +1,110 @@ +#! /bin/sh +set -xe + +PKG=inkscape +VERSION=0.92.4 +GITHASH=424477f665adb9996045d92026ceecb2eeb22dbe +BUILD=1 +PREFIX=/pkg/$PKG-$VERSION-$BUILD + +mkdir -p $PREFIX +cat >$PREFIX/profile <<-EOF + PATH=$PREFIX/bin:\$PATH +EOF + +source $PREFIX/profile + +export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig + +# what is the problem here? +# https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html +# +# our installed Glib & friends are build with an old cxx( which didn't use the CXX11 ABI) +# our installed imagemagick is build with a new cxx (which defaulted to CXX11 ABI) +# +# we want to use both libraries. So neither _GLIBCXX_USE_CXX11_ABI=1 (the default now) nor +# _GLIBCXX_USE_CXX11_ABI=0 by it self is enough. +# +# with _GLIBCXX_USE_CXX11_ABI=1 (default) +# ./lib/libinkscape_base.so: undefined reference to `Magick::Blob::base64(std::string)' +# ... +# with _GLIBCXX_USE_CXX11_ABI=0 (default) +# main.cpp:(.text+0x2a01): undefined reference to `Glib::build_filename(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)' +# ... +# +# As a quick fix we include ImageMagick with _GLIBCXX_USE_CXX11_ABI=0 here, so this ImageMagick +# library is compatible to the installed Glib and friends. +# +# We can't use the newest ImageMagick: +# +# /pkg/inkscape-0.92.1-0/build/inkscape-0.92.1/src/extension/internal/bitmap/channel.cpp: In member function ‘virtual void Inkscape::Extension::Internal::Bitmap::Channel::applyEffect(Magick::Image*)’: +# /pkg/inkscape-0.92.1-0/build/inkscape-0.92.1/src/extension/internal/bitmap/channel.cpp:31:58: error: ‘MatteChannel’ is not a member of ‘Magick’ +# + +# ImageMagick + +VER=6.9.10-53 + +mkdir -p $PREFIX/build +cd $PREFIX/build +test -e ImageMagick-$VER.tar.xz || wget https://www.imagemagick.org/download/releases/ImageMagick-$VER.tar.xz +test -d ImageMagick-$VER || tar xf ImageMagick-$VER.tar.xz +cd ImageMagick-$VER +./configure --prefix=$PREFIX CXXFLAGS=-D_GLIBCXX_USE_CXX11_ABI=0 +make -j $(nproc) +make install + +# inkscape + +mkdir -p $PREFIX/build +cd $PREFIX/build + +test -e inkscape-$GITHASH.tar.bz2 || wget -O inkscape-$GITHASH.tar.bz2 https://gitlab.com/inkscape/inkscape/-/archive/$GITHASH/inkscape-$GITHASH.tar.bz2 +test -d inkscape-$GITHASH || tar xf inkscape-$GITHASH.tar.bz2 +cd inkscape-$GITHASH + +# another problem: the CMakeLists of inkscape includes +# if(APPLE) +# SET(CMAKE_MACOSX_RPATH TRUE) +# SET(CMAKE_INSTALL_RPATH "@loader_path/../lib/inkscape") +# else() +# SET(CMAKE_INSTALL_RPATH "$ORIGIN/../lib/inkscape") +# endif() +# Thereby overwriting any RPATH we might set e.g. +# cmake -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DCMAKE_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=0 -DCMAKE_INSTALL_RPATH=$PREFIX/lib . +# to find ImageMagick library. + +patch -p1 <<'EOF' +From: Unpriviledged Software Builder +Date: Fri, 24 Feb 2017 13:02:24 +0100 +Subject: [PATCH] Honor CMAKE_INSTALL_RPATH + +This enables us to configure CMAKE_INSTALL_RPATH e.g. use + + cmake -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DCMAKE_INSTALL_RPATH=$PREFIX/lib . +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e5d8919..e253961 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -27,7 +27,7 @@ if(APPLE) + SET(CMAKE_MACOSX_RPATH TRUE) + SET(CMAKE_INSTALL_RPATH "@loader_path/../lib/inkscape") + else() +- SET(CMAKE_INSTALL_RPATH "$ORIGIN/../lib/inkscape") ++ SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib/inkscape") + endif() + + cmake_policy(SET CMP0003 NEW) # don't be prolific with library paths +-- +2.4.1 + +EOF + +cmake -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DCMAKE_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=0 -DCMAKE_INSTALL_RPATH=$PREFIX/lib . +make -j $(nproc) +make install +