build-image.sh 7.45 KB
Newer Older
1 2 3 4 5 6 7
#!/bin/bash

# Halt on errors and be verbose about what we are doing
set -e
set -x

# Read in our parameters
8 9
export BUILD_PREFIX=$1
export KDENLIVE_SOURCES=$2
10 11 12

# Save some frequently referenced locations in variables for ease of use / updating
export APPDIR=$BUILD_PREFIX/kdenlive.appdir
13
export PLUGINS=$APPDIR/usr/plugins/
14 15 16 17 18
export APPIMAGEPLUGINS=$APPDIR/usr/plugins/

mkdir -p $APPDIR
mkdir -p $APPDIR/usr/share/kdenlive
mkdir -p $APPDIR/usr/lib
19 20
mkdir -p $PLUGINS
mkdir -p $APPDIR/usr/plugins
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

# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment.
# That's not always the case, so make sure it is
export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8

# We want to use $prefix/deps/usr/ for all our dependencies
export DEPS_INSTALL_PREFIX=$BUILD_PREFIX/deps/usr/
export DOWNLOADS_DIR=$BUILD_PREFIX/downloads/

# Setup variables needed to help everything find what we built
export LD_LIBRARY_PATH=$DEPS_INSTALL_PREFIX/lib/:$DEPS_INSTALL_PREFIX/lib/x86_64-linux-gnu/:$APPDIR/usr/lib/:$LD_LIBRARY_PATH
export PATH=$DEPS_INSTALL_PREFIX/bin/:$PATH
export PKG_CONFIG_PATH=$DEPS_INSTALL_PREFIX/share/pkgconfig/:$DEPS_INSTALL_PREFIX/lib/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
export CMAKE_PREFIX_PATH=$DEPS_INSTALL_PREFIX:$CMAKE_PREFIX_PATH

# Switch over to our build prefix
cd $BUILD_PREFIX

#
# Now we can get the process started!
#

# Step 1: Copy over all the resources provided by dependencies that we need
cp -r $DEPS_INSTALL_PREFIX/share/kf5 $APPDIR/usr/share
46 47 48 49 50
cp -r $DEPS_INSTALL_PREFIX/share/kstyle $APPDIR/usr/share
cp -r $DEPS_INSTALL_PREFIX/share/plasma $APPDIR/usr/share
cp -r $DEPS_INSTALL_PREFIX/share/alsa $APPDIR/usr/share
cp -r $DEPS_INSTALL_PREFIX/share/kservices5 $APPDIR/usr/share
cp -r $DEPS_INSTALL_PREFIX/share/qt5 $APPDIR/usr/share
51
cp -r $DEPS_INSTALL_PREFIX/share/mime $APPDIR/usr/share
52 53 54 55 56 57 58 59 60 61

if [ -d $DEPS_INSTALL_PREFIX/share/color-schemes ] ; then
    cp -r $DEPS_INSTALL_PREFIX/share/color-schemes $APPDIR/usr/share
fi

if [ -d $DEPS_INSTALL_PREFIX/share/icons/breeze ] ; then
    cp -r $DEPS_INSTALL_PREFIX/share/icons/breeze $APPDIR/usr/share/icons
    cp -r $DEPS_INSTALL_PREFIX/share/icons/breeze-dark $APPDIR/usr/share/icons
fi

62
cp -r $DEPS_INSTALL_PREFIX/translations $APPDIR/usr/
63 64

# TO remove once we switch to the newer Qt5.12 Appimage dependency
65
# cp -r $DEPS_INSTALL_PREFIX/openssl/lib/*  $APPDIR/usr/lib
66

67 68
cp -r $DEPS_INSTALL_PREFIX/share/mlt  $APPDIR/usr/share
cp -r $DEPS_INSTALL_PREFIX/lib/mlt  $APPDIR/usr/lib
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
69
cp -r $DEPS_INSTALL_PREFIX/lib/libmlt*  $APPDIR/usr/lib
70
cp -r $DEPS_INSTALL_PREFIX/lib/frei0r-1  $APPDIR/usr/lib
71
cp -r $DEPS_INSTALL_PREFIX/bin/melt  $APPDIR/usr/bin
72 73
cp -r $DEPS_INSTALL_PREFIX/bin/ffmpeg  $APPDIR/usr/bin
cp -r $DEPS_INSTALL_PREFIX/bin/ffplay  $APPDIR/usr/bin
74
cp -r $DEPS_INSTALL_PREFIX/bin/ffprobe  $APPDIR/usr/bin
75 76 77 78 79
cp -r $DEPS_INSTALL_PREFIX/plugins/kf5  $APPIMAGEPLUGINS
cp -r $DEPS_INSTALL_PREFIX/plugins/styles  $APPIMAGEPLUGINS
cp -r $DEPS_INSTALL_PREFIX/plugins/audio  $APPIMAGEPLUGINS
cp -r $DEPS_INSTALL_PREFIX/plugins/org.kde.kdecoration2 $APPIMAGEPLUGINS
cp -r $DEPS_INSTALL_PREFIX/plugins/kstyle_breeze_config.so $APPIMAGEPLUGINS
80

Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
81 82 83 84
mkdir -p $APPDIR/usr/libexec

cp -r $DEPS_INSTALL_PREFIX/lib/x86_64-linux-gnu/libexec/kf5/*  $APPDIR/usr/libexec/

85
cp $(ldconfig -p | grep libGL.so.1 | cut -d ">" -f 2 | xargs) $APPDIR/usr/lib/
86
#cp $(ldconfig -p | grep libGLU.so.1 | cut -d ">" -f 2 | xargs) $APPDIR/usr/lib/
87 88

# Step 2: Relocate x64 binaries from the architecture specific directory as required for Appimages
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
89

90
if [ -d $APPDIR/usr/lib/x86_64-linux-gnu/plugins ] ; then
91
    mv $APPDIR/usr/lib/x86_64-linux-gnu/plugins/*  $APPDIR/usr/plugins
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
92 93
    rm -rf $APPDIR/usr/lib/x86_64-linux-gnu/
fi
94 95

# Step 3: Update the rpath in the various plugins we have to make sure they'll be loadable in an Appimage context
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
for lib in $APPIMAGEPLUGINS/*.so*; do
  patchelf --set-rpath '$ORIGIN/../lib' $lib;
done

for lib in $APPIMAGEPLUGINS/audio/*.so*; do
  patchelf --set-rpath '$ORIGIN/../../lib' $lib;
done

for lib in $APPIMAGEPLUGINS/styles/*.so*; do
  patchelf --set-rpath '$ORIGIN/../../lib' $lib;
done

for lib in $APPIMAGEPLUGINS/kf5/*.so*; do
  patchelf --set-rpath '$ORIGIN/../../lib' $lib;
done

for lib in $APPIMAGEPLUGINS/org.kde.kdecoration2/*.so*; do
  patchelf --set-rpath '$ORIGIN/../../lib' $lib;
done

116 117 118 119
for lib in $APPDIR/usr/lib/mlt/*.so*; do
  patchelf --set-rpath '$ORIGIN/..' $lib;
done

120
### GSTREAMER
121
# Requires gstreamer1.0-plugins-good
122 123 124 125 126 127 128
GST_PLUGIN_SRC_DIR=/usr/lib/x86_64-linux-gnu/
mkdir -p $APPDIR/usr/lib/x86_64-linux-gnu
GST_LIB_DEST_DIR=$APPDIR/usr/lib/x86_64-linux-gnu/gstreamer1.0
mkdir -p $GST_LIB_DEST_DIR
GST_PLUGIN_DEST_DIR=$APPDIR/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0
mkdir -p $GST_PLUGIN_DEST_DIR
cp $GST_PLUGIN_SRC_DIR/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner $GST_PLUGIN_DEST_DIR
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
129
cp $GST_PLUGIN_SRC_DIR/gstreamer-1.0/*.so $GST_LIB_DEST_DIR
130 131 132 133 134 135

rm $GST_LIB_DEST_DIR/libgstegl* || true

for p in $GST_LIB_DEST_DIR/libgst*.so*; do
  patchelf --set-rpath '$ORIGIN/../..' $p;
done
136

137 138 139
### end of GSTREAMER STUFF

# Step 4: Move plugins to loadable location in AppImage
140

141 142 143 144 145 146 147 148 149
# Make sure our plugin directory already exists
if [ ! -d $APPIMAGEPLUGINS ] ; then
    mkdir -p $APPIMAGEPLUGINS
fi

# mv $PLUGINS/* $APPIMAGEPLUGINS

# copy icon
cp $APPDIR/usr/share/icons/breeze/apps/48/kdenlive.svg $APPDIR
150

151
# Step 5: Build the image!!!
152 153 154 155
#linuxdeployqt $APPDIR/usr/bin/ffmpeg
#linuxdeployqt $APPDIR/usr/bin/ffplay
#linuxdeployqt $APPDIR/usr/bin/ffprobe
#linuxdeployqt $APPDIR/usr/bin/melt
156 157 158 159 160 161

linuxdeployqt $APPDIR/usr/share/applications/org.kde.kdenlive.desktop \
  -executable=$APPDIR/usr/bin/kdenlive \
  -qmldir=$DEPS_INSTALL_PREFIX/qml \
  -verbose=2 \
  -bundle-non-qt-libs \
162
  -extra-plugins=$APPDIR/usr/lib/mlt,$APPDIR/usr/plugins \
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
163
  -exclude-libs=libnss3.so,libnssutil3.so,libGL.so.1
164 165 166

#  -appimage \

167
rm $APPDIR/usr/lib/libGL.so.1 || true
168
rm $APPDIR/usr/lib/libasound.so.2 || true
169

170 171 172 173

# libxcb should be removed
rm $APPDIR/usr/lib/libxcb*

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
rm  $APPDIR/AppRun

cat > $APPDIR/AppRun << EOF
#!/bin/bash

DIR="\`dirname \"\$0\"\`" 
DIR="\`( cd \"\$DIR\" && pwd )\`"
export APPDIR=\$DIR


export LD_LIBRARY_PATH=\$DIR/usr/lib/:\$LD_LIBRARY_PATH
export XDG_DATA_DIRS=\$DIR/usr/share/:\$XDG_DATA_DIRS
export XDG_CONFIG_HOME=\$HOME/.config/
export PATH=\$DIR/usr/bin:\$PATH
export KDE_FORK_SLAVES=1

export MLT_REPOSITORY=\$DIR/usr/lib/mlt/
export MLT_DATA=\$DIR/usr/share/mlt/
export MLT_ROOT_DIR=\$DIR/usr/
export LADSPA_PATH=\$DIR/usr/lib/ladspa
export FREI0R_PATH=\$DIR/usr/lib/frei0r-1
export MLT_PROFILES_PATH=\$DIR/usr/share/mlt/profiles/
export MLT_PRESETS_PATH=\$DIR/usr/share/mlt/presets/
export SDL_AUDIODRIVER=pulseaudio
export XDG_CURRENT_DESKTOP=
199 200
export GST_PLUGIN_SCANNER=\$DIR/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner
export GST_PLUGIN_PATH=\$DIR/usr/lib/x86_64-linux-gnu/gstreamer1.0/
201 202 203 204 205 206

kdenlive --config kdenlive-appimagerc \$@
EOF
chmod +x $APPDIR/AppRun

# Step 5: Find out what version of Kdenlive we built and give the Appimage a proper name
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
207
cd $BUILD_PREFIX/kdenlive-build/
208
KDENLIVE_VERSION=$(grep "KDENLIVE_VERSION" config-kdenlive.h | cut -d '"' -f 2)
209 210 211

# Also find out the revision of Git we built
# Then use that to generate a combined name we'll distribute
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
212
cd $KDENLIVE_SOURCES
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
if [[ -d .git ]]; then
	GIT_REVISION=$(git rev-parse --short HEAD)
	VERSION=$KDENLIVE_VERSION-$GIT_REVISION
else
	VERSION=$KDENLIVE_VERSION
fi

# Return to our build root
cd $BUILD_PREFIX

appimagetool $APPDIR

# Generate a new name for the Appimage file and rename it accordingly
APPIMAGE=kdenlive-"$VERSION"-x86_64.appimage
mv Kdenlive-x86_64.AppImage $APPIMAGE