183 lines
5.1 KiB
Bash
183 lines
5.1 KiB
Bash
|
#!/bin/bash
|
||
|
set -e
|
||
|
|
||
|
DIST_DIR="$PWD/windows-installer/win64-dist"
|
||
|
JOBS=$NUMBER_OF_PROCESSORS
|
||
|
|
||
|
msg()
|
||
|
{
|
||
|
echo -e "\e[32m$1\e[0m"
|
||
|
}
|
||
|
|
||
|
fatal()
|
||
|
{
|
||
|
echo -e "\e[31m$1\e[0m"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
download_yolort()
|
||
|
{
|
||
|
file_name=cppwinrt-2.0.210122.3+windows-10.0.19041+yolort-835cd4e.zip
|
||
|
yolort_dir="$PWD/plugins/windows-notification/yolort"
|
||
|
|
||
|
rm -rf "$yolort_dir"
|
||
|
mkdir "$yolort_dir"
|
||
|
curl -L -o "$file_name" "https://github.com/LAGonauta/YoloRT/releases/download/v1.0.0/$file_name"
|
||
|
echo "675a6d943c97b4acdbfaa473f68d3241d1798b31a67b5529c8d29fc0176a1707 $file_name" | sha256sum --check --status
|
||
|
unzip -o "$file_name" -d "$yolort_dir"
|
||
|
rm -f "$file_name"
|
||
|
}
|
||
|
|
||
|
prepare()
|
||
|
{
|
||
|
msg "Installing MINGW64 build dependencies"
|
||
|
|
||
|
pacman -S --needed --noconfirm \
|
||
|
mingw64/mingw-w64-x86_64-gcc \
|
||
|
mingw64/mingw-w64-x86_64-cmake \
|
||
|
mingw64/mingw-w64-x86_64-ninja \
|
||
|
mingw64/mingw-w64-x86_64-gtk4 \
|
||
|
mingw64/mingw-w64-x86_64-libadwaita \
|
||
|
mingw64/mingw-w64-x86_64-sqlite3 \
|
||
|
mingw64/mingw-w64-x86_64-openssl \
|
||
|
mingw64/mingw-w64-x86_64-libgcrypt \
|
||
|
mingw64/mingw-w64-x86_64-libgee \
|
||
|
mingw64/mingw-w64-x86_64-vala \
|
||
|
mingw64/mingw-w64-x86_64-gsettings-desktop-schemas \
|
||
|
mingw64/mingw-w64-x86_64-qrencode \
|
||
|
mingw64/mingw-w64-x86_64-ntldd-git \
|
||
|
mingw64/mingw-w64-x86_64-gpgme \
|
||
|
mingw64/mingw-w64-x86_64-fontconfig \
|
||
|
mingw64/mingw-w64-x86_64-iso-codes \
|
||
|
mingw64/mingw-w64-x86_64-gstreamer \
|
||
|
mingw64/mingw-w64-x86_64-gst-plugins-bad \
|
||
|
mingw64/mingw-w64-x86_64-gst-plugins-good \
|
||
|
mingw64/mingw-w64-x86_64-gst-plugins-base \
|
||
|
mingw64/mingw-w64-x86_64-gst-plugins-ugly \
|
||
|
mingw64/mingw-w64-x86_64-nsis \
|
||
|
mingw64/mingw-w64-x86_64-libsignal-protocol-c \
|
||
|
mingw64/mingw-w64-x86_64-icu \
|
||
|
mingw64/mingw-w64-x86_64-webrtc-audio-processing \
|
||
|
git \
|
||
|
make \
|
||
|
unzip \
|
||
|
curl
|
||
|
|
||
|
msg "Successfully installed!"
|
||
|
|
||
|
msg "Download YoloRT headers"
|
||
|
download_yolort
|
||
|
msg "Successfully downloaded!"
|
||
|
|
||
|
}
|
||
|
|
||
|
configure()
|
||
|
{
|
||
|
msg "Running configuration for Windows"
|
||
|
./configure --program-prefix="$DIST_DIR" --no-debug --release --disable-fast-vapi --with-libsoup3
|
||
|
msg "Configured!"
|
||
|
}
|
||
|
|
||
|
build()
|
||
|
{
|
||
|
msg "Started building on $JOBS threads"
|
||
|
make -j"$JOBS"
|
||
|
msg "Successfully builded!"
|
||
|
}
|
||
|
|
||
|
dist_install()
|
||
|
{
|
||
|
msg "Installing Dino in '$DIST_DIR'!"
|
||
|
make install
|
||
|
|
||
|
msg "Copying MINGW64 dependencies"
|
||
|
cp /mingw64/bin/gdbus.exe "$DIST_DIR/bin"
|
||
|
cp /mingw64/bin/gspawn-win64-helper.exe "$DIST_DIR/bin"
|
||
|
|
||
|
cp /mingw64/bin/libcrypto-*-x64.dll "$DIST_DIR/bin/"
|
||
|
cp -r /mingw64/lib/gstreamer-1.0 "$DIST_DIR/lib"
|
||
|
mkdir -p "$DIST_DIR/lib/gdk-pixbuf-2.0/" && cp -r /mingw64/lib/gdk-pixbuf-2.0 "$DIST_DIR/lib/"
|
||
|
mkdir -p "$DIST_DIR/lib/gio/" && cp -r /mingw64/lib/gio "$DIST_DIR/lib/"
|
||
|
|
||
|
list=`find "$DIST_DIR" -type f \( -name "*.exe" -o -name "*.dll" \) -exec \
|
||
|
ntldd -R {} + | \
|
||
|
grep "mingw64" | \
|
||
|
cut -f1 -d "=" | sort | uniq`
|
||
|
for a in $list; do
|
||
|
cp -fv "/mingw64/bin/$a" "$DIST_DIR/bin/"
|
||
|
done
|
||
|
|
||
|
msg "Removing debug information from all EXE and DLL files"
|
||
|
find "$DIST_DIR" -iname "*.exe" -exec strip -s {} +
|
||
|
find "$DIST_DIR" -iname "*.dll" -exec strip -s {} +
|
||
|
|
||
|
find "$DIST_DIR" -iname "*.a" -exec rm {} +
|
||
|
|
||
|
msg "Removing redudant header files"
|
||
|
rm -rf "$DIST_DIR/include"
|
||
|
|
||
|
msg "Copy LICENSE"
|
||
|
cp -f "$PWD/LICENSE" "$DIST_DIR/LICENSE"
|
||
|
|
||
|
msg "Copy icons, themes, locales and fonts"
|
||
|
cp -f "$PWD/main/dino.ico" "$DIST_DIR/dino.ico"
|
||
|
cp -rf "/mingw64/share/xml" "$DIST_DIR/share"
|
||
|
mkdir -p "$DIST_DIR/etc/fonts" && cp -r /mingw64/etc/fonts "$DIST_DIR/etc/"
|
||
|
mkdir -p "$DIST_DIR/share/icons" && cp -r /mingw64/share/icons "$DIST_DIR/share/"
|
||
|
mkdir -p "$DIST_DIR/share/glib-2.0/schemas" && cp -rf /mingw64/share/glib-2.0/schemas "$DIST_DIR/share/glib-2.0/"
|
||
|
|
||
|
msg "Successfully installed!"
|
||
|
}
|
||
|
|
||
|
build_installer()
|
||
|
{
|
||
|
msg "Building an installer for Windows using NSIS"
|
||
|
cd windows-installer
|
||
|
makensis dino.nsi
|
||
|
msg "Installer successfully builded!"
|
||
|
cd ..
|
||
|
}
|
||
|
|
||
|
clean()
|
||
|
{
|
||
|
rm -rf build "$DIST_DIR"
|
||
|
msg "Build artifacts removed successfull!"
|
||
|
}
|
||
|
|
||
|
help()
|
||
|
{
|
||
|
cat << EOF
|
||
|
usage: $0 [OPTION]
|
||
|
--prepare install build dependencies
|
||
|
--configure configure the project
|
||
|
--build build the project
|
||
|
--dist-install install the builded project
|
||
|
--build-installer build installer (using NSIS)
|
||
|
--clean remove build artifacts
|
||
|
--help show this help
|
||
|
|
||
|
Running without parameters is equivalent to running:
|
||
|
'--configure', '--build' and '--dist-install'
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
if [[ "$(uname)" != "MINGW64_NT"* ]]; then
|
||
|
fatal "This is not a MINGW64 environment!"
|
||
|
fi
|
||
|
|
||
|
case $1 in
|
||
|
"--prepare" ) prepare ;;
|
||
|
"--configure" ) configure ;;
|
||
|
"--build" ) build ;;
|
||
|
"--dist-install" ) dist_install ;;
|
||
|
"--build-installer") build_installer ;;
|
||
|
"--clean" ) clean ;;
|
||
|
"--help" ) help ;;
|
||
|
"" )
|
||
|
configure
|
||
|
build
|
||
|
dist_install
|
||
|
;;
|
||
|
*) fatal "Unknown argument!"
|
||
|
esac
|