1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
#!/bin/bash
# echo "$0 <sqlitestudio build output directory> <qmake path> [tgz|dist|dist_full]"
if [ "$1" == "" ]; then
QMAKE=`which qmake`
if [ $QMAKE == "" ]; then
echo "Cannot find qmake"
else
read -p "Is this correct qmake (y/N) $QMAKE : " yn
case $yn in
[Yy]* ) ;;
* ) echo "Please pass path to correct qmake as argument to this script."; exit;;
esac
fi
else
QMAKE=$1
fi
which chrpath >/dev/null
if [ "$?" -ne 0 ]; then
echo "chrpath program missing!"
exit 1
fi
qt_paths_bin="${QMAKE/qmake/qtpaths}"
$qt_paths_bin -v >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo "qtpaths program missing!"
exit 1
fi
OUTPUT=`pwd`/../../output
cd $OUTPUT
required_modules="libQt5Core.so libQt5Concurrent.so libQt5DBus.so libQt5Gui.so libQt5Network.so libQt5PrintSupport.so libQt5Script.so libQt5Widgets.so libQt5Xml.so \
libQt5Svg.so libQt5XcbQpa.so"
required_plugins="platforms/libqxcb.so imageformats/libqgif.so imageformats/libqicns.so imageformats/libqico.so imageformats/libqjpeg.so \
imageformats/libqsvg.so imageformats/libqtga.so imageformats/libqtiff.so iconengines/libqsvgicon.so printsupport/libcupsprintersupport.so"
optional_plugins="platformthemes/libqgtk3.so"
qt_lib_dir=`ldd SQLiteStudio/sqlitestudio | grep libQt5Core | awk '{print $3;}'`
qt_lib_dir=`dirname $qt_lib_dir`
qt_plugins_dir=`$qt_paths_bin --plugin-dir`
# Create portable dir to store distribution in
rm -rf portable
mkdir portable
cd portable
portable=`pwd`
# Copy all output from compilation here
cp -R $OUTPUT/SQLiteStudio .
# Make lib directory to move all *.so files (sqlitestudio files and Qt files and dependencies)
cd SQLiteStudio
# Copy SQLite libs
cd $portable/SQLiteStudio
if [ -f /usr/local/lib/libsqlite3.so.0.8.6 ]; then
echo "SQLite3 library exists in /usr/local/lib/. Since this is usually a custom build of SQLite, it's preferred and will be used now."
sqlite3_lib=/usr/local/lib/libsqlite3.so.0.8.6
sqlite3_lib_target=`ldd $OUTPUT/SQLiteStudio/lib/libcoreSQLiteStudio.so | grep libsqlite | awk '{print $3;}'`
cp $sqlite3_lib lib/`basename $sqlite3_lib_target`
else
sqlite3_lib=`ldd $OUTPUT/SQLiteStudio/lib/libcoreSQLiteStudio.so | grep libsqlite | awk '{print $3;}'`
cp $sqlite3_lib lib
fi
echo "Using SQLite3 library: $sqlite3_lib"
sqlite2_lib=`ldd plugins/libDbSqlite2.so | grep libsqlite | awk '{print $3;}'`
echo "Using SQLite2 library: $sqlite2_lib"
cp $sqlite2_lib lib
strip lib/*libsqlite*
# Copy Qt
cd $portable/SQLiteStudio/lib
for module in $required_modules; do
if [ ! -f $qt_lib_dir/$module ]; then
echo "Required Qt module doesn't exist: $qt_lib_dir/$module"
exit 1
fi
cp -P $qt_lib_dir/$module* .
for dep_lib in `ldd $qt_lib_dir/$module | grep $qt_lib_dir | awk '{print $3;}'`; do
cp -Pu $dep_lib* .
done
done
for lib in `ls *.so`; do
chrpath -r \$ORIGIN/lib $lib 2>&1 >/dev/null
done
# Now copy Qt plugins
cd $portable/SQLiteStudio
qt_plugin_dirs=()
for plugin in $required_plugins; do
if [ ! -f $qt_plugins_dir/$plugin ]; then
echo "Required Qt plugin doesn't exist: $qt_plugins_dir/$plugin"
exit 1
fi
parts=(${plugin/\// })
mkdir ${parts[0]} 2>/dev/null
cp -P $qt_plugins_dir/$plugin ${parts[0]}
# Update rpath in Qt plugins
cd ${parts[0]}
for lib in `ls *.so`; do
chrpath -r \$ORIGIN/../lib $lib 2>&1 >/dev/null
done
cd ..
done
for plugin in $optional_plugins; do
if [ ! -f $qt_plugins_dir/$plugin ]; then
continue
fi
parts=(${plugin/\// })
mkdir ${parts[0]} 2>/dev/null
cp -P $qt_plugins_dir/$plugin ${parts[0]}
# Update rpath in Qt plugins
cd ${parts[0]}
for lib in `ls *.so`; do
chrpath -r \$ORIGIN/../lib $lib 2>&1 >/dev/null
done
cd ..
done
cd $portable/SQLiteStudio
chrpath -r \$ORIGIN/lib sqlitestudio 2>&1 >/dev/null
chrpath -r \$ORIGIN/lib sqlitestudiocli 2>&1 >/dev/null
cd $portable
VERSION=`SQLiteStudio/sqlitestudiocli -v | awk '{print $2}'`
# Complete
echo "Building complete package: sqlitestudio-$VERSION.tar.xz"
tar cf sqlitestudio-$VERSION.tar SQLiteStudio
xz -z sqlitestudio-$VERSION.tar
# App
echo "Building incremental update package: sqlitestudio-$VERSION.tar.gz"
cp -R SQLiteStudio app
cd app
#if [ "$3" == "dist" ]; then
# rm -rf plugins
# rm -f lib/libQ*
# rm -rf iconengines
# rm -rf imageformats
# rm -rf platforms
# rm -rf platformthemes
# rm -rf printsupport
# find . -type l -exec rm -f {} \;
#fi
rm -f lib/libicu*
rm -f lib/libsqlite.so.0 ;# this is for SQLite 2
tar cf sqlitestudio-$VERSION.tar *
gzip -9 sqlitestudio-$VERSION.tar
mv sqlitestudio-$VERSION.tar.gz ..
cd ..
rm -rf app
# Plugins
mkdir plugins
SQLiteStudio/sqlitestudio --list-plugins | while read line
do
PLUGIN=`echo $line | awk '{print $1}'`
PLUGIN_VER=`echo $line | awk '{print $2}'`
if [ -f SQLiteStudio/plugins/lib$PLUGIN.so ]; then
echo "Building plugin package: $PLUGIN-$PLUGIN_VER.tar.gz"
cp SQLiteStudio/plugins/lib$PLUGIN.so plugins/
tar cf $PLUGIN\-$PLUGIN_VER.tar plugins
gzip -9 $PLUGIN\-$PLUGIN_VER.tar
fi
rm -f plugins/*
done
rm -rf plugins
echo "Done."
echo "Portable distribution created at: $portable/SQLiteStudio"
|