build-image.sh 7.44 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
65
66

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

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
129
130
131
132
133
134
135
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
cp $GST_PLUGIN_SRC_DIR/gstreamer-1.0/* $GST_LIB_DEST_DIR

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