View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0015671 | Scribus | Build System | public | 2019-05-04 08:46 | 2019-07-30 21:27 |
| Reporter | ale | Assigned To | jghali | ||
| Priority | normal | Severity | minor | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Product Version | 1.5.5.svn | ||||
| Fixed in Version | 1.5.5.svn | ||||
| Summary | 0015671: Improve AppImage build by allowing relative paths to resource directories | ||||
| Description | https://gitlab.com/impagina/scribus-patched/compare/master...appimage - add an optional "RELATIVE_PATH" to the CMakeLists.txt file - compiling in a build directory - only use the gtk2 theme in gnome (other DE can be added) - a bit of clean up in the bundle.sh file | ||||
| Tags | No tags attached. | ||||
| Attached Files | appimage.diff (10,381 bytes)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c12e24904..f80200630 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,4 +25,4 @@ appimage:linux:
artifacts:
expire_in: 14 days
paths:
- - ./Scribus*.AppImage*
\ No newline at end of file
+ - ./build-appimage/Scribus*.AppImage*
diff --git a/AppImage-package/AppRun b/AppImage-package/AppRun
index 3bfcc01e5..fd1e6aa44 100644
--- a/AppImage-package/AppRun
+++ b/AppImage-package/AppRun
@@ -56,7 +56,10 @@ export TK_LIBRARY="${HERE}"/usr/share/tcltk/tk8.6:$TK_LIBRARY:$TCL_LIBRARY
# Make it look more native on Gtk+ based systems
############################################################################################
-export QT_QPA_PLATFORMTHEME=gtk2
+case "${XDG_CURRENT_DESKTOP}" in
+ *GNOME*|*gnome*)
+ export QT_QPA_PLATFORMTHEME=gtk2
+esac
############################################################################################
# Run experimental bundle that bundles everything if a private ld-linux-x86-64.so.2 is there
diff --git a/AppImage-package/bundle.sh b/AppImage-package/bundle.sh
index da372e889..ee7b01f44 100644
--- a/AppImage-package/bundle.sh
+++ b/AppImage-package/bundle.sh
@@ -1,29 +1,16 @@
#!/bin/bash
-cat /proc/1/cgroup # Check if we run in Docker; https://github.com/AppImage/AppImageKit/issues/912
+mkdir build-appimage
+cd build-appimage
+# for docker images:
+# if qt is not in the standard path, load its environment variables
+# /opt/qt*/bin/qt*-env.sh
. /opt/qt*/bin/qt*-env.sh || true
-########################################################################
-# Build Plaform Theme for Gtk+
-########################################################################
-
-find /opt/qt*/| grep platform
-#apt-get update
-#apt-get -y install libgtk-3-dev libnotify-dev qt5113d
-#git clone https://github.com/CrimsonAS/gtkplatform
-#cd gtkplatform
-#qmake
-#make -j$(nproc)
-#sudo make install
-#cd -
########################################################################
-# https://askubuntu.com/a/910143
-# https://askubuntu.com/a/748186
-# Deploy with linuxdeployqt using
-# -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so
-# At runtime, export QT_QPA_PLATFORMTHEME=gtk2 (Xfce does this itself)
+# Build Plaform Theme for Gtk+
########################################################################
git clone http://code.qt.io/qt/qtstyleplugins.git
@@ -37,12 +24,27 @@ cd -
# Build Scribus and install to appdir/
########################################################################
-cmake . -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=/usr -DWANT_HUNSPELL=1 -DWITH_PODOFO=1 -DWANT_GRAPHICSMAGICK=1 -DWANT_DEBUG=0 -DWANT_SVNVERSION=0 -DWANT_GUI_LANG=en_US
+cmake .. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DWANT_RELATIVE_PATH="." \
+ -DWANT_HUNSPELL=1 \
+ -DWITH_PODOFO=1 \
+ -DWANT_GRAPHICSMAGICK=1 \
+ -DWANT_DEBUG=0 \
+ -DWANT_SVNVERSION=0 \
+ -DWANT_GUI_LANG="en_US;de;fr;it"
make -j$(nproc)
-make DESTDIR=appdir -j$(nproc) install ; find appdir/
-cp AppImage-package/AppRun appdir/ ; chmod +x appdir/AppRun
+
+make DESTDIR=appdir -j$(nproc) install
+
+
+# TODO: make sure that the appdir directory exits
+cp ../AppImage-package/AppRun appdir/
+chmod +x appdir/AppRun
cp ./appdir/usr/share/icons/hicolor/256x256/apps/scribus.png ./appdir/
-sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.desktop # Needed?
+# TODO: is this needed?
+sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.desktop
########################################################################
# Bundle everyhting
@@ -51,7 +53,8 @@ sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.de
cd appdir/
-# Bundle all of glibc; this should eventually be done by linuxdeployqt
+# Bundle all of glibc
+# (this should eventually be done by linuxdeployqt)
apt-get update -q
apt-get download libc6
find *.deb -exec dpkg-deb -x {} . \;
@@ -71,26 +74,15 @@ find *.deb -exec dpkg-deb -x {} . \;
rm *deb
cd -
-########################################################################
-# Patch away absolute paths
-# FIXME: It would be nice if they were relative
-########################################################################
-
-sed -i -e 's|/usr/share/scribus|././/share/scribus|g' appdir/usr/bin/scribus
-sed -i -e 's|/usr/lib/scribus|././/lib/scribus|g' appdir/usr/bin/scribus
-sed -i -e 's|/usr/share/doc/scribus/|././/share/doc/scribus/|g' appdir/usr/bin/scribus
-
-########################################################################
-# Also bundle Tcl/Tk, Tkinter (for Calendar script)
-########################################################################
-
+# Bundle Tcl/Tk, Tkinter (for hte Calendar script)
mkdir -p appdir/usr/lib appdir/usr/share
cp /usr/li*/python2.7/lib-dynload/_tkinter.so appdir/usr/ # It is indeed picked up here because we cd there at runtime
cp -r /usr/lib/tcltk appdir/usr/lib/
cp -r /usr/share/tcltk appdir/usr/share/
########################################################################
-# Create extra qt.conf in a strange location; FIXME: why is this needed?
+# Create extra qt.conf in a strange location
+# TODO: why is this needed?
########################################################################
mkdir -p appdir/lib/x86_64-linux-gnu/
@@ -112,4 +104,4 @@ wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/contin
chmod a+x linuxdeployqt-continuous-x86_64.AppImage
ARCH=x86_64 ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract-and-run appdir/usr/share/applications/scribus.desktop \
-appimage -unsupported-bundle-everything \
--executable=appdir/usr/bin/python2.7 -executable=appdir/usr/_tkinter.so -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so
\ No newline at end of file
+-executable=appdir/usr/bin/python2.7 -executable=appdir/usr/_tkinter.so -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 305e11b06..fb6647423 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -283,7 +283,9 @@ if(WANT_VERSIONING)
else()
set(SHAREDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}/")
endif()
-if(NOT IS_ABSOLUTE ${SHAREDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DSHAREDIR="${WANT_RELATIVE_PATH}/${SHAREDIR}")
+elseif(NOT IS_ABSOLUTE ${SHAREDIR})
add_definitions(-DSHAREDIR="${CMAKE_INSTALL_PREFIX}/${SHAREDIR}")
else()
add_definitions(-DSHAREDIR="${SHAREDIR}")
@@ -303,7 +305,9 @@ else()
endif()
endif()
endif()
-if(NOT IS_ABSOLUTE ${DOCDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DDOCDIR="${WANT_RELATIVE_PATH}/${DOCDIR}")
+elseif(NOT IS_ABSOLUTE ${DOCDIR})
add_definitions(-DDOCDIR="${CMAKE_INSTALL_PREFIX}/${DOCDIR}")
else()
add_definitions(-DDOCDIR="${DOCDIR}")
@@ -315,7 +319,9 @@ if(WIN32)
else()
set(ICONDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/icons/")
endif()
-if(NOT IS_ABSOLUTE ${ICONDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DICONDIR="${WANT_RELATIVE_PATH}/${ICONDIR}")
+elseif(NOT IS_ABSOLUTE ${ICONDIR})
add_definitions(-DICONDIR="${CMAKE_INSTALL_PREFIX}/${ICONDIR}")
else()
add_definitions(-DICONDIR="${ICONDIR}")
@@ -323,7 +329,9 @@ endif()
#SAMPLES
set(SAMPLESDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/samples/")
-if(NOT IS_ABSOLUTE ${SAMPLESDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DSAMPLESDIR="${WANT_RELATIVE_PATH}/${SAMPLESDIR}")
+elseif(NOT IS_ABSOLUTE ${SAMPLESDIR})
add_definitions(-DSAMPLESDIR="${CMAKE_INSTALL_PREFIX}/${SAMPLESDIR}")
else()
add_definitions(-DSAMPLESDIR="${SAMPLESDIR}")
@@ -331,7 +339,9 @@ endif()
#SCRIPTS
set(SCRIPTSDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/scripts/")
-if(NOT IS_ABSOLUTE ${SCRIPTSDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DSCRIPTSDIR="${WANT_RELATIVE_PATH}/${SCRIPTSDIR}")
+elseif(NOT IS_ABSOLUTE ${SCRIPTSDIR})
add_definitions(-DSCRIPTSDIR="${CMAKE_INSTALL_PREFIX}/${SCRIPTSDIR}")
else()
add_definitions(-DSCRIPTSDIR="${SCRIPTSDIR}")
@@ -343,7 +353,10 @@ if(WIN32)
else()
set(TEMPLATEDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/templates/")
endif()
-if(NOT IS_ABSOLUTE ${TEMPLATEDIR})
+
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DTEMPLATEDIR="${WANT_RELATIVE_PATH}/${TEMPLATEDIR}")
+elseif(NOT IS_ABSOLUTE ${TEMPLATEDIR})
add_definitions(-DTEMPLATEDIR="${CMAKE_INSTALL_PREFIX}/${TEMPLATEDIR}")
else()
add_definitions(-DTEMPLATEDIR="${TEMPLATEDIR}")
@@ -359,7 +372,9 @@ add_definitions(-DQMLDIR="${CMAKE_INSTALL_PREFIX}/${QMLDIR}")
#DESKTOP
set(DESKTOPDIR "${CMAKE_INSTALL_DATAROOTDIR}/applications/")
-if(NOT IS_ABSOLUTE ${DESKTOPDIR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DDESKTOPDIR="${WANT_RELATIVE_PATH}/${DESKTOPDIR}")
+elseif(NOT IS_ABSOLUTE ${DESKTOPDIR})
add_definitions(-DDESKTOPDIR="${CMAKE_INSTALL_PREFIX}/${DESKTOPDIR}")
else()
add_definitions(-DDESKTOPDIR="${DESKTOPDIR}")
@@ -368,7 +383,9 @@ endif()
#APPDATA
set(APPDATADIR "${CMAKE_INSTALL_DATAROOTDIR}/metainfo/")
-if(NOT IS_ABSOLUTE ${APPDATADIRR})
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DAPPDATADIR="${WANT_RELATIVE_PATH}/${APPDATADIRR}")
+elseif(NOT IS_ABSOLUTE ${APPDATADIRR})
add_definitions(-DAPPDATADIR="${CMAKE_INSTALL_PREFIX}/${APPDATADIR}")
else()
add_definitions(-DAPPDATADIR="${APPDATADIR}")
@@ -407,7 +424,11 @@ if (APPLEBUNDLE)
else()
set(LIBDIR "${LIB_DIR_NAME}/${MAIN_DIR_NAME}${TAG_VERSION}/")
endif()
-add_definitions(-DLIBDIR="${CMAKE_INSTALL_PREFIX}/${LIBDIR}")
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DLIBDIR="${WANT_RELATIVE_PATH}/${LIBDIR}")
+else()
+ add_definitions(-DLIBDIR="${CMAKE_INSTALL_PREFIX}/${LIBDIR}")
+endif()
#PLUGINS
if(WIN32)
@@ -419,7 +440,11 @@ else()
set(PLUGINDIR "${LIB_DIR_NAME}/${MAIN_DIR_NAME}${TAG_VERSION}/plugins/")
endif()
endif()
-add_definitions(-DPLUGINDIR="${CMAKE_INSTALL_PREFIX}/${PLUGINDIR}")
+if(DEFINED WANT_RELATIVE_PATH)
+ add_definitions(-DPLUGINDIR="${WANT_RELATIVE_PATH}/${PLUGINDIR}")
+else()
+ add_definitions(-DPLUGINDIR="${CMAKE_INSTALL_PREFIX}/${PLUGINDIR}")
+endif()
#INCLUDE
| ||||
| Patch | No | ||||
|
|
probono wrote that it looks ok for him... |
|
|
I had a look at this patch and I have a concern: with this patch, the plugin directory will basically depends on the working directory... which means that i may be possible to execute arbitrary code by writing a proper command line and using a specially crafted working directory. So from a security point of view, it's probably not fine. I tried to do it in a different way by somewhat mixing this approach and the approach used in 0015559. The attached patch add a WANT_RELOCATABLE option to cmake command line. When using this option, the resources and plugins directories will be defined relative to the executable path. Please test. 15671_allow_relative_paths.patch (16,693 bytes)
Index: AppImage-package/AppRun
===================================================================
--- AppImage-package/AppRun (revision 22988)
+++ AppImage-package/AppRun (working copy)
@@ -56,7 +56,10 @@
# Make it look more native on Gtk+ based systems
############################################################################################
-export QT_QPA_PLATFORMTHEME=gtk2
+case "${XDG_CURRENT_DESKTOP}" in
+ *GNOME*|*gnome*)
+ export QT_QPA_PLATFORMTHEME=gtk2
+esac
############################################################################################
# Run experimental bundle that bundles everything if a private ld-linux-x86-64.so.2 is there
Index: AppImage-package/bundle.sh
===================================================================
--- AppImage-package/bundle.sh (revision 22988)
+++ AppImage-package/bundle.sh (working copy)
@@ -2,23 +2,12 @@
cat /proc/1/cgroup # Check if we run in Docker; https://github.com/AppImage/AppImageKit/issues/912
+# for docker images:
+# if qt is not in the standard path, load its environment variables
. /opt/qt*/bin/qt*-env.sh || true
########################################################################
# Build Plaform Theme for Gtk+
-########################################################################
-
-find /opt/qt*/| grep platform
-#apt-get update
-#apt-get -y install libgtk-3-dev libnotify-dev qt5113d
-#git clone https://github.com/CrimsonAS/gtkplatform
-#cd gtkplatform
-#qmake
-#make -j$(nproc)
-#sudo make install
-#cd -
-
-########################################################################
# https://askubuntu.com/a/910143
# https://askubuntu.com/a/748186
# Deploy with linuxdeployqt using
@@ -37,13 +26,30 @@
# Build Scribus and install to appdir/
########################################################################
-cmake . -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=/usr -DWANT_HUNSPELL=1 -DWITH_PODOFO=1 -DWANT_GRAPHICSMAGICK=1 -DWANT_DEBUG=0 -DWANT_SVNVERSION=0 -DWANT_GUI_LANG=en_US
+cmake . -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DWANT_RELOCATABLE=1 \
+ -DWANT_HUNSPELL=1 \
+ -DWITH_PODOFO=1 \
+ -DWANT_GRAPHICSMAGICK=1 \
+ -DWANT_DEBUG=0 \
+ -DWANT_SVNVERSION=0 \
+ -DWANT_GUI_LANG=en_US;de;fr;it \
make -j$(nproc)
-make DESTDIR=appdir -j$(nproc) install ; find appdir/
-cp AppImage-package/AppRun appdir/ ; chmod +x appdir/AppRun
+
+make DESTDIR=appdir -j$(nproc) install
+find appdir/
+
+# TODO: make sure that the appdir directory exits
+cp AppImage-package/AppRun appdir/
+chmod +x appdir/AppRun
+
cp ./appdir/usr/share/icons/hicolor/256x256/apps/scribus.png ./appdir/
-sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.desktop # Needed?
+# TODO: is this needed?
+sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.desktop
+
########################################################################
# Bundle everyhting
# to allow the AppImage to run on older systems as well
@@ -72,13 +78,17 @@
cd -
########################################################################
-# Patch away absolute paths
-# FIXME: It would be nice if they were relative
+# Work around side effect of bundling everything
########################################################################
-sed -i -e 's|/usr/share/scribus|././/share/scribus|g' appdir/usr/bin/scribus
-sed -i -e 's|/usr/lib/scribus|././/lib/scribus|g' appdir/usr/bin/scribus
-sed -i -e 's|/usr/share/doc/scribus/|././/share/doc/scribus/|g' appdir/usr/bin/scribus
+# https://github.com/scribusproject/scribus/issues/111#issuecomment-457823282
+# applicationDirPath() is not usr/bin but lib/x86_64-linux-gnu/
+# when AppRun invokes the binary with
+# exec "${HERE}/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2" --inhibit-cache --library-path "${LIBRARY_PATH}" "${MAIN}" "$@"
+# hence we add a symlink here to mitigate this
+cd appdir/lib/
+ln -s ../usr/* .
+cd -
########################################################################
# Also bundle Tcl/Tk, Tkinter (for Calendar script)
@@ -90,7 +100,8 @@
cp -r /usr/share/tcltk appdir/usr/share/
########################################################################
-# Create extra qt.conf in a strange location; FIXME: why is this needed?
+# Create extra qt.conf in a strange location;
+# FIXME: why is this needed?
########################################################################
mkdir -p appdir/lib/x86_64-linux-gnu/
@@ -112,4 +123,4 @@
chmod a+x linuxdeployqt-continuous-x86_64.AppImage
ARCH=x86_64 ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract-and-run appdir/usr/share/applications/scribus.desktop \
-appimage -unsupported-bundle-everything \
--executable=appdir/usr/bin/python2.7 -executable=appdir/usr/_tkinter.so -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so
\ No newline at end of file
+-executable=appdir/usr/bin/python2.7 -executable=appdir/usr/_tkinter.so -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt (revision 22988)
+++ CMakeLists.txt (working copy)
@@ -216,6 +216,20 @@
message(STATUS "Building for target ${MACHINE}")
##############################################################################################################
+########## Relocatability ##########
+
+if (APPLEBUNDLE OR WIN32)
+ if (WANT_RELOCATABLE)
+ message(STATUS "Ignoring relocatable option on Win32 or OSX when building bundle")
+ set(WANT_RELOCATABLE 0)
+ endif()
+endif()
+
+if (WANT_RELOCATABLE)
+ add_definitions(-DWANT_RELOCATABLE)
+endif()
+
+##############################################################################################################
########## Versioning Setup ##########
#On Apple, we ignore the versioning tag so all items are "scribus" not "scribus-version"
@@ -259,7 +273,7 @@
########## Install/Directory Setup ##########
if (APPLEBUNDLE)
-set (APPLE_APP_DIR "${CMAKE_INSTALL_PREFIX}")
+ set (APPLE_APP_DIR "${CMAKE_INSTALL_PREFIX}")
if ("${CMAKE_INSTALL_PREFIX}" MATCHES "[.]app/Contents/?$")
# all ok
else()
@@ -283,7 +297,10 @@
else()
set(SHAREDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}/")
endif()
-if(NOT IS_ABSOLUTE ${SHAREDIR})
+
+if(IS_ABSOLUTE ${SHAREDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: SHAREDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${SHAREDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DSHAREDIR="${CMAKE_INSTALL_PREFIX}/${SHAREDIR}")
else()
add_definitions(-DSHAREDIR="${SHAREDIR}")
@@ -292,18 +309,17 @@
#SHARE - use the default on Apple as TAG_VERSION is empty
if(WIN32 OR OS2)
set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/")
+elseif(TAG_VERSION OR BUILD_OSX_BUNDLE)
+ set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}${TAG_VERSION}/")
+elseif(NOT WANT_VERSIONING)
+ set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}/")
else()
- if(TAG_VERSION OR BUILD_OSX_BUNDLE)
- set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}${TAG_VERSION}/")
- else()
- if(NOT WANT_VERSIONING)
- set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}/")
- else()
- set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}-${VERSION}/")
- endif()
- endif()
+ set(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${MAIN_DIR_NAME}-${VERSION}/")
endif()
-if(NOT IS_ABSOLUTE ${DOCDIR})
+
+if(IS_ABSOLUTE ${DOCDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: DOCDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${DOCDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DDOCDIR="${CMAKE_INSTALL_PREFIX}/${DOCDIR}")
else()
add_definitions(-DDOCDIR="${DOCDIR}")
@@ -315,7 +331,10 @@
else()
set(ICONDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/icons/")
endif()
-if(NOT IS_ABSOLUTE ${ICONDIR})
+
+if(IS_ABSOLUTE ${ICONDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: ICONDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${ICONDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DICONDIR="${CMAKE_INSTALL_PREFIX}/${ICONDIR}")
else()
add_definitions(-DICONDIR="${ICONDIR}")
@@ -322,8 +341,15 @@
endif()
#SAMPLES
-set(SAMPLESDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/samples/")
-if(NOT IS_ABSOLUTE ${SAMPLESDIR})
+if(WIN32)
+ set(SAMPLESDIR "${CMAKE_INSTALL_DATAROOTDIR}/samples/")
+else()
+ set(SAMPLESDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/samples/")
+endif()
+
+if(IS_ABSOLUTE ${SAMPLESDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: SAMPLESDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${SAMPLESDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DSAMPLESDIR="${CMAKE_INSTALL_PREFIX}/${SAMPLESDIR}")
else()
add_definitions(-DSAMPLESDIR="${SAMPLESDIR}")
@@ -330,8 +356,15 @@
endif()
#SCRIPTS
-set(SCRIPTSDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/scripts/")
-if(NOT IS_ABSOLUTE ${SCRIPTSDIR})
+if(WIN32)
+ set(SCRIPTSDIR "${CMAKE_INSTALL_DATAROOTDIR}/scripts/")
+else()
+ set(SCRIPTSDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/scripts/")
+endif()
+
+if(IS_ABSOLUTE ${SCRIPTSDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: SCRIPTSDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${SCRIPTSDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DSCRIPTSDIR="${CMAKE_INSTALL_PREFIX}/${SCRIPTSDIR}")
else()
add_definitions(-DSCRIPTSDIR="${SCRIPTSDIR}")
@@ -343,7 +376,10 @@
else()
set(TEMPLATEDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/templates/")
endif()
-if(NOT IS_ABSOLUTE ${TEMPLATEDIR})
+
+if(IS_ABSOLUTE ${TEMPLATEDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: TEMPLATEDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${TEMPLATEDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DTEMPLATEDIR="${CMAKE_INSTALL_PREFIX}/${TEMPLATEDIR}")
else()
add_definitions(-DTEMPLATEDIR="${TEMPLATEDIR}")
@@ -355,11 +391,21 @@
else()
set(QMLDIR "${CMAKE_INSTALL_DATAROOTDIR}/${MAIN_DIR_NAME}${TAG_VERSION}/qml/")
endif()
-add_definitions(-DQMLDIR="${CMAKE_INSTALL_PREFIX}/${QMLDIR}")
+if(IS_ABSOLUTE ${QMLDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: QMLDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${QMLDIR} AND NOT WANT_RELOCATABLE)
+ add_definitions(-DQMLDIR="${CMAKE_INSTALL_PREFIX}/${QMLDIR}")
+else()
+ add_definitions(-DQMLDIR="${QMLDIR}")
+endif()
+
#DESKTOP
set(DESKTOPDIR "${CMAKE_INSTALL_DATAROOTDIR}/applications/")
-if(NOT IS_ABSOLUTE ${DESKTOPDIR})
+
+if(IS_ABSOLUTE ${DESKTOPDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: DESKTOPDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${DESKTOPDIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DDESKTOPDIR="${CMAKE_INSTALL_PREFIX}/${DESKTOPDIR}")
else()
add_definitions(-DDESKTOPDIR="${DESKTOPDIR}")
@@ -366,9 +412,11 @@
endif()
#APPDATA
+set(APPDATADIR "${CMAKE_INSTALL_DATAROOTDIR}/metainfo/")
-set(APPDATADIR "${CMAKE_INSTALL_DATAROOTDIR}/metainfo/")
-if(NOT IS_ABSOLUTE ${APPDATADIRR})
+if(IS_ABSOLUTE ${APPDATADIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: APPDATADIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${APPDATADIR} AND NOT WANT_RELOCATABLE)
add_definitions(-DAPPDATADIR="${CMAKE_INSTALL_PREFIX}/${APPDATADIR}")
else()
add_definitions(-DAPPDATADIR="${APPDATADIR}")
@@ -380,17 +428,17 @@
# Example: I want to use special ~/.scribus135svn config directory for my trunk
# cmake -DAPPLICATION_DATA_DIR=.scribus135svn ...
if (APPLICATION_DATA_DIR)
- message(STATUS "Using ApplicationDataDir ${APPLICATION_DATA_DIR} instead of the platform default.")
+ message(STATUS "Using ApplicationDataDir ${APPLICATION_DATA_DIR} instead of the platform default.")
add_definitions(-DAPPLICATION_DATA_DIR="${APPLICATION_DATA_DIR}")
else()
- message(STATUS "Using standard ApplicationDataDir. You can change it with -DAPPLICATION_DATA_DIR")
+ message(STATUS "Using standard ApplicationDataDir. You can change it with -DAPPLICATION_DATA_DIR")
endif()
if (APPLICATION_CONFIG_DIR)
- message(STATUS "Using ApplicationConfigDir ${APPLICATION_CONFIG_DIR} instead of the platform default.")
+ message(STATUS "Using ApplicationConfigDir ${APPLICATION_CONFIG_DIR} instead of the platform default.")
add_definitions(-DAPPLICATION_CONFIG_DIR="${APPLICATION_CONFIG_DIR}")
else()
- message(STATUS "Using standard ApplicationConfigDir. You can change it with -DAPPLICATION_CONFIG_DIR")
+ message(STATUS "Using standard ApplicationConfigDir. You can change it with -DAPPLICATION_CONFIG_DIR")
endif()
#LIB LOCATION - lib or lib64 normally
@@ -399,8 +447,9 @@
if(NOT ARCH_X86_64)
message(STATUS "WARNING: BUILDING 64 Bit build on non 64 bit architecture")
endif()
- set(LIB_SUFFIX "64" CACHE TYPE STRING)
+ set(LIB_SUFFIX "64" CACHE TYPE STRING)
endif()
+
set(LIB_DIR_NAME "lib${LIB_SUFFIX}")
if (APPLEBUNDLE)
set(LIBDIR "lib/")
@@ -407,21 +456,33 @@
else()
set(LIBDIR "${LIB_DIR_NAME}/${MAIN_DIR_NAME}${TAG_VERSION}/")
endif()
-add_definitions(-DLIBDIR="${CMAKE_INSTALL_PREFIX}/${LIBDIR}")
+if(IS_ABSOLUTE ${LIBDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: LIBDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${LIBDIR} AND NOT WANT_RELOCATABLE)
+ add_definitions(-DLIBDIR="${CMAKE_INSTALL_PREFIX}/${LIBDIR}")
+else()
+ add_definitions(-DLIBDIR="${LIBDIR}")
+endif()
+
#PLUGINS
if(WIN32)
set(PLUGINDIR "plugins")
+elseif (APPLEBUNDLE)
+ set(PLUGINDIR "${LIBDIR}")
else()
- if (APPLEBUNDLE)
- set(PLUGINDIR "${LIBDIR}")
- else()
- set(PLUGINDIR "${LIB_DIR_NAME}/${MAIN_DIR_NAME}${TAG_VERSION}/plugins/")
- endif()
+ set(PLUGINDIR "${LIB_DIR_NAME}/${MAIN_DIR_NAME}${TAG_VERSION}/plugins/")
endif()
-add_definitions(-DPLUGINDIR="${CMAKE_INSTALL_PREFIX}/${PLUGINDIR}")
+if(IS_ABSOLUTE ${PLUGINDIR} AND WANT_RELOCATABLE)
+ message(FATAL_ERROR "ERROR: PLUGINDIR must be relative when using WANT_RELOCATABLE option")
+elseif(NOT IS_ABSOLUTE ${PLUGINDIR} AND NOT WANT_RELOCATABLE)
+ add_definitions(-DPLUGINDIR="${CMAKE_INSTALL_PREFIX}/${PLUGINDIR}")
+else()
+ add_definitions(-DPLUGINDIR="${PLUGINDIR}")
+endif()
+
#INCLUDE
set(INCLUDEDIR "include/${MAIN_DIR_NAME}${TAG_VERSION}/")
#NO ADD DEFINITIONS, WE ONLY INSTALL WITH IT
Index: scribus/scpaths.cpp
===================================================================
--- scribus/scpaths.cpp (revision 22988)
+++ scribus/scpaths.cpp (working copy)
@@ -52,20 +52,33 @@
}
// Protected "real" constructor
-// All paths are initialized to compile-time defaults passed in
+ScPaths::ScPaths()
+{
+// On *nix, all paths are initialized to compile-time defaults passed in
// as preprocessor macros and set by autoconf.
-ScPaths::ScPaths() :
- m_docDir(DOCDIR),
- m_fontDir(),
- m_iconDir(ICONDIR),
- m_libDir(LIBDIR),
- m_pluginDir(PLUGINDIR),
- m_qmlDir(QMLDIR),
- m_sampleScriptDir(SAMPLESDIR),
- m_scriptDir(SCRIPTSDIR),
- m_shareDir(SHAREDIR),
- m_templateDir(TEMPLATEDIR)
-{
+#if !defined(Q_OS_MAC) && !defined(_WIN32) && defined(WANT_RELOCATABLE)
+ QString appPath = qApp->applicationDirPath();
+ m_docDir = appPath + "/../" + QString(DOCDIR);
+ m_iconDir = appPath + "/../" + QString(ICONDIR);
+ m_libDir = appPath + "/../" + QString(LIBDIR);
+ m_pluginDir = appPath + "/../" + QString(PLUGINDIR);
+ m_qmlDir = appPath + "/../" + QString(QMLDIR);
+ m_sampleScriptDir = appPath + "/../" + QString(SAMPLESDIR);
+ m_scriptDir = appPath + "/../" + QString(SCRIPTSDIR);
+ m_shareDir = appPath + "/../" + QString(SHAREDIR);
+ m_templateDir = appPath + "/../" + QString(TEMPLATEDIR);
+#elif !defined(Q_OS_MAC) && !defined(_WIN32)
+ m_docDir = QString(DOCDIR);
+ m_iconDir = QString(ICONDIR);
+ m_libDir = QString(LIBDIR);
+ m_pluginDir = QString(PLUGINDIR);
+ m_qmlDir = QString(QMLDIR);
+ m_sampleScriptDir = QString(SAMPLESDIR);
+ m_scriptDir = QString(SCRIPTSDIR);
+ m_shareDir = QString(SHAREDIR);
+ m_templateDir = QString(TEMPLATEDIR);
+#endif
+
// On MacOS/X, override the compile-time settings with a location
// obtained from the system.
#ifdef Q_OS_MAC
|
|
|
- you removed the "build" directory... that should not be a big issue... - "-DWANT_GUI_LANG=en_US;de;fr;it \" the backslash at the end is probably wrong - you have left in a "find appdir/" that i'm not sure is doing anything (maybe giving a visual confirmation that everything is ok?) - the "if(IS_ABSOLUTE ${SHAREDIR} AND WANT_RELOCATABLE) ... elseif()" conditions seem a bit too complex to me. i would only check for the sane combinations and do a default action otherwise (basically: remove the first if...) but it should work as you did it... i will try to put your patch on gitlab and see how it behaves... |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-05-04 08:46 | ale | New Issue | |
| 2019-05-04 08:46 | ale | File Added: appimage.diff | |
| 2019-05-04 08:47 | ale | Note Added: 0046179 | |
| 2019-05-23 14:37 | jghali | File Added: 15671_allow_relative_paths.patch | |
| 2019-05-23 14:37 | jghali | Note Added: 0046254 | |
| 2019-05-23 15:46 | ale | Note Added: 0046255 | |
| 2019-06-17 13:57 | jghali | Summary | allow relative paths when making && improve the appimage build => Improve AppImage build by allowing relative paths |
| 2019-06-17 13:58 | jghali | Assigned To | => jghali |
| 2019-06-17 13:58 | jghali | Status | new => resolved |
| 2019-06-17 13:58 | jghali | Resolution | open => fixed |
| 2019-06-17 13:58 | jghali | Fixed in Version | => 1.5.5.svn |
| 2019-06-17 13:58 | jghali | Relationship added | has duplicate 0015559 |
| 2019-06-17 15:00 | jghali | Summary | Improve AppImage build by allowing relative paths => Improve AppImage build by allowing relative paths to resource directories |
| 2019-07-30 21:27 | cbradney | Status | resolved => closed |