#!/usr/bin/env bash # Copyright 2022, FOSS-VG Developers and Contributers # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, version 3. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # version 3 along with this program. # If not, see https://www.gnu.org/licenses/agpl-3.0.en.html source scripts/lib.sh echo -n "Wget or curl? " if command -v wget >/dev/null 2>&1; then USE_WGET=yes echo "wget" else if command -v curl >/dev/null 2>&1; then USE_WGET=no echo "curl" else echo "Found neither wget nor curl. Aborting." exit 1 fi fi function download { URL="$1" DESTINATION="$2" SHA256SUM="$3" if [ ! -d .download_cache ]; then echo "Cache directory missing." create_directory .download_cache fi if [ -f ".download_cache/$SHA256SUM" ]; then if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then echo "Using locally cached file for $DESTINATION" cp ".download_cache/$SHA256SUM" "$DESTINATION" return 0 else echo "Locally cached file for $DESTINATION is corrupted." rm ".download_cache/$SHA256SUM" download "$URL" "$DESTINATION" "$SHA256SUM" return $? fi else echo -n "Downloading $URL to $DESTINATION... " if [ $USE_WGET = yes ]; then wget -O ".download_cache/$SHA256SUM" "$URL" >/dev/null 2>&1 else curl -L "$URL" --output ".download_cache/$SHA256SUM" >/dev/null 2>&1 fi if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then cp ".download_cache/$SHA256SUM" "$DESTINATION" echo "done." return 0 else echo "error." echo "Checksum verification failed. Your download is either corrupted or the file has been altered. Removing file." rm ".download_cache/$SHA256SUM" return 1 fi fi } scripts/clean.sh scripts/clean_dependencies.sh set -e # failures are not acceptable here create_directory dependencies/tmp download https://github.com/DuffsDevice/tiny-utf8/archive/refs/tags/v4.4.3.tar.gz dependencies/tmp/tiny-utf8.tar.gz 8e3f61651909c9f3105d3501932a96aa65733127fb6e7cf94cb1b0a2dff42c8f download https://github.com/fpagliughi/sockpp/archive/refs/tags/v0.8.1.tar.gz dependencies/tmp/sockpp.tar.gz a8aedff8bd8c1da530b91be650352008fddabc9f1df0d19701d76cbc359c8651 download https://www.zlib.net/zlib-1.3.tar.gz dependencies/tmp/zlib-1.3.tar.gz ff0ba4c292013dbc27530b3a81e1f9a813cd39de01ca5e0f8bf355702efa593e #TODO: figure out how to cache shaderc #also TODO: target a specific commit git clone --branch known-good https://github.com/google/shaderc.git dependencies/tmp/shaderc #download https://github.com/google/shaderc/archive/refs/tags/v2023.7.tar.gz dependencies/tmp/shaderc.tar.gz 681e1340726a0bf46bea7e31f10cbfe78e01e4446a35d90fedc2b78d400fcdeb echo -n ">>> Extracting tiny-utf8... " gzip -d dependencies/tmp/tiny-utf8.tar.gz tar -xf dependencies/tmp/tiny-utf8.tar -C dependencies echo "done" echo -n ">>> Extracting sockpp... " gzip -d dependencies/tmp/sockpp.tar.gz tar -xf dependencies/tmp/sockpp.tar -C dependencies echo "done" echo -n ">>> Extracting zlib... " gzip -d dependencies/tmp/zlib-1.3.tar.gz tar -xf dependencies/tmp/zlib-1.3.tar -C dependencies cd include/ ln -vs ../dependencies/zlib-1.3/ zlib cd .. echo "done" echo ">>> Building sockpp..." pushd dependencies/sockpp-0.8.1/ >/dev/null 2>&1 if uname -s | tr [:upper:] [:lower:] | grep cygwin >/dev/null; then echo "Adding Cygwin workaound for building sockpp." #for FILE in "$(find ./ -type f)"; do # sed -i -e 's/_WIN32/PLEASE_DO_NOT_DEFINE_THIS_MACRO/g' $FILE #done #mv ./include/sockpp/socket.h ./include/sockpp/socket.h_original #echo '#include ##include "socket.h_original"' > ./include/sockpp/socket.h sed -i -e 's/SO_REUSEPORT/SO_REUSEADDR/g' ./src/acceptor.cpp #CFLAGS="-D_XOPEN_SOURCE=700" CXXFLAGS="-D_XOPEN_SOURCE=700" cmake -Bbuild #CFLAGS="-D_XOPEN_SOURCE=700" CXXFLAGS="-D_XOPEN_SOURCE=700" cmake --build build cmake -Bbuild . cmake --build build else cmake -Bbuild . cmake --build build fi popd >/dev/null 2>&1 echo ">>> done" echo ">>> Dealing with shaderc shenanigans..." pushd dependencies/tmp/shaderc echo "Getting sources using the provided script..." ./update_shaderc_sources.py SHADERC_BUILD="build-$(dd if=/dev/urandom bs=1 count=5 2>/dev/null | base32)" echo "Creating and entering directory $SHADERC_BUILD." mkdir "$SHADERC_BUILD" cd "$SHADERC_BUILD" echo "Running CMake..." CXXFLAGS="-Wno-error" cmake -GNinja -DCMAKE_BUILD_TYPE=Release ../src/ echo "Running Ninja..." ninja popd >/dev/null 2>&1 #if needed copy more relevant files to dependencies/shaderc echo "Copying binary to dependencies/shaderc/bin..." mkdir -vp dependencies/shaderc/bin cp -v "dependencies/tmp/shaderc/$SHADERC_BUILD/glslc/glslc" dependencies/shaderc/bin echo ">>> done" echo ">>> Building zlib..." cd dependencies/zlib-1.3/ ./configure make echo "done" echo ">>> Cleaning up..." remove -f dependencies/tmp