aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rwxr-xr-xutil/buildbot/buildwin32.sh182
-rwxr-xr-xutil/buildbot/buildwin64.sh184
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32-posix.cmake (renamed from util/buildbot/toolchain_i586-mingw32msvc.cmake)10
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32.cmake (renamed from util/buildbot/toolchain_i646-w64-mingw32.cmake)0
-rw-r--r--util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake19
-rw-r--r--util/ci/clang-format-whitelist.txt2
-rwxr-xr-xutil/ci/clang-format.sh (renamed from util/ci/lint.sh)25
-rw-r--r--util/ci/common.sh16
-rwxr-xr-xutil/fix_format.sh5
-rwxr-xr-xutil/test_multiplayer.sh105
-rwxr-xr-xutil/updatepo.sh5
-rw-r--r--util/wireshark/minetest.lua4
12 files changed, 343 insertions, 214 deletions
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index e62d32969..9eb9a4050 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -16,114 +16,132 @@ fi
builddir=$1
mkdir -p $builddir
builddir="$( cd "$builddir" && pwd )"
-packagedir=$builddir/packages
libdir=$builddir/libs
# Test which win32 compiler is present
-which i586-mingw32msvc-windres &>/dev/null && toolchain_file=$dir/toolchain_i586-mingw32msvc.cmake
-which i686-w64-mingw32-windres &>/dev/null && toolchain_file=$dir/toolchain_i646-w64-mingw32.cmake
+command -v i686-w64-mingw32-gcc >/dev/null &&
+ compiler=i686-w64-mingw32-gcc
+command -v i686-w64-mingw32-gcc-posix >/dev/null &&
+ compiler=i686-w64-mingw32-gcc-posix
-if [ -z "$toolchain_file" ]; then
- echo "Unable to determine which mingw32 compiler to use"
+if [ -z "$compiler" ]; then
+ echo "Unable to determine which MinGW compiler to use"
exit 1
fi
+toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
echo "Using $toolchain_file"
-irrlicht_version=1.8.4
-ogg_version=1.3.2
-vorbis_version=1.3.5
-curl_version=7.65.3
+# Try to find runtime DLLs in various paths (varies by distribution, sigh)
+tmp=$(dirname "$(command -v $compiler)")/..
+runtime_dlls=
+for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do
+ for dir in $tmp/i686-w64-mingw32/{bin,lib} $tmp/lib/gcc/i686-w64-mingw32/*; do
+ [ -d "$dir" ] || continue
+ file=$(echo $dir/$name)
+ [ -f "$file" ] && { runtime_dlls+="$file;"; break; }
+ done
+done
+[ -z "$runtime_dlls" ] &&
+ echo "The compiler runtime DLLs could not be found, they might be missing in the final package."
+
+# Get stuff
+irrlicht_version=1.9.0mt4
+ogg_version=1.3.4
+vorbis_version=1.3.7
+curl_version=7.76.1
gettext_version=0.20.1
-freetype_version=2.10.1
-sqlite3_version=3.27.2
+freetype_version=2.10.4
+sqlite3_version=3.35.5
luajit_version=2.1.0-beta3
-leveldb_version=1.22
+leveldb_version=1.23
zlib_version=1.2.11
+zstd_version=1.4.9
-mkdir -p $packagedir
mkdir -p $libdir
-cd $builddir
+download () {
+ local url=$1
+ local filename=$2
+ [ -z "$filename" ] && filename=${url##*/}
+ local foldername=${filename%%[.-]*}
+ local extract=$3
+ [ -z "$extract" ] && extract=unzip
+
+ [ -d "./$foldername" ] && return 0
+ wget "$url" -c -O "./$filename"
+ if [ "$extract" = "unzip" ]; then
+ unzip -o "$filename" -d "$foldername"
+ elif [ "$extract" = "unzip_nofolder" ]; then
+ unzip -o "$filename"
+ else
+ return 1
+ fi
+}
-# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win32.zip \
- -c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip \
- -c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-win32.zip \
- -c -O $packagedir/libogg-$ogg_version.zip
-[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win32.zip \
- -c -O $packagedir/libvorbis-$vorbis_version.zip
-[ -e $packagedir/curl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/curl-$curl_version-win32.zip \
- -c -O $packagedir/curl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version-win32.zip \
- -c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/freetype2-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win32.zip \
- -c -O $packagedir/freetype2-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win32.zip \
- -c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-win32.zip \
- -c -O $packagedir/luajit-$luajit_version.zip
-[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win32.zip \
- -c -O $packagedir/libleveldb-$leveldb_version.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped.zip \
- -c -O $packagedir/openal_stripped.zip
-
-# Extract stuff
cd $libdir
-[ -d irrlicht ] || unzip -o $packagedir/irrlicht-$irrlicht_version.zip -d irrlicht
-[ -d zlib ] || unzip -o $packagedir/zlib-$zlib_version.zip -d zlib
-[ -d libogg ] || unzip -o $packagedir/libogg-$ogg_version.zip -d libogg
-[ -d libvorbis ] || unzip -o $packagedir/libvorbis-$vorbis_version.zip -d libvorbis
-[ -d libcurl ] || unzip -o $packagedir/curl-$curl_version.zip -d libcurl
-[ -d gettext ] || unzip -o $packagedir/gettext-$gettext_version.zip -d gettext
-[ -d freetype ] || unzip -o $packagedir/freetype2-$freetype_version.zip -d freetype
-[ -d sqlite3 ] || unzip -o $packagedir/sqlite3-$sqlite3_version.zip -d sqlite3
-[ -d openal_stripped ] || unzip -o $packagedir/openal_stripped.zip
-[ -d luajit ] || unzip -o $packagedir/luajit-$luajit_version.zip -d luajit
-[ -d leveldb ] || unzip -o $packagedir/libleveldb-$leveldb_version.zip -d leveldb
-
-# Get minetest
-cd $builddir
-if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- cd /$EXISTING_MINETEST_DIR # must be absolute path
+download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win32.zip" irrlicht-$irrlicht_version.zip
+download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/zstd-$zstd_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libogg-$ogg_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/curl-$curl_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/gettext-$gettext_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win32.zip" freetype-$freetype_version.zip
+download "http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/luajit-$luajit_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win32.zip" leveldb-$leveldb_version.zip
+download "http://minetest.kitsunemimi.pw/openal_stripped.zip" '' unzip_nofolder
+
+# Set source dir, downloading Minetest as needed
+if [ -n "$EXISTING_MINETEST_DIR" ]; then
+ sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )"
else
- [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
- cd $CORE_NAME
+ cd $builddir
+ sourcedir=$PWD/$CORE_NAME
+ [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \
+ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME
+ if [ -z "$NO_MINETEST_GAME" ]; then
+ cd $sourcedir
+ [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \
+ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME
+ fi
fi
-git_hash=$(git rev-parse --short HEAD)
-# Get minetest_game
-if [ "x$NO_MINETEST_GAME" = "x" ]; then
- cd games
- [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
- cd ..
-fi
+git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
-[ -d _build ] && rm -Rf _build/
-mkdir _build
-cd _build
-cmake .. \
+cd $builddir
+[ -d build ] && rm -rf build
+mkdir build
+cd build
+
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
+cmake -S $sourcedir -B . \
+ -DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
-DBUILD_CLIENT=1 -DBUILD_SERVER=0 \
- -DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
+ -DEXTRA_DLL="$runtime_dlls" \
\
-DENABLE_SOUND=1 \
-DENABLE_CURL=1 \
-DENABLE_GETTEXT=1 \
- -DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win32-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win32-gcc/Irrlicht.dll \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
- -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
+ -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a \
-DZLIB_DLL=$libdir/zlib/bin/zlib1.dll \
\
+ -DZSTD_INCLUDE_DIR=$libdir/zstd/include \
+ -DZSTD_LIBRARY=$libdir/zstd/lib/libzstd.dll.a \
+ -DZSTD_DLL=$libdir/zstd/bin/libzstd.dll \
+ \
-DLUA_INCLUDE_DIR=$libdir/luajit/include \
-DLUA_LIBRARY=$libdir/luajit/libluajit.a \
\
@@ -133,21 +151,19 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
-DOPENAL_DLL=$libdir/openal_stripped/bin/OpenAL32.dll \
\
- -DCURL_DLL=$libdir/libcurl/bin/libcurl-4.dll \
- -DCURL_INCLUDE_DIR=$libdir/libcurl/include \
- -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
+ -DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
+ -DCURL_INCLUDE_DIR=$libdir/curl/include \
+ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \
\
- -DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_MSGFMT=`command -v msgfmt` \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
@@ -166,7 +182,7 @@ cmake .. \
make -j$(nproc)
-[ "x$NO_PACKAGE" = "x" ] && make package
+[ -z "$NO_PACKAGE" ] && make package
exit 0
# EOF
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index 94e009c29..eb1eae4c2 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -16,106 +16,132 @@ fi
builddir=$1
mkdir -p $builddir
builddir="$( cd "$builddir" && pwd )"
-packagedir=$builddir/packages
libdir=$builddir/libs
-toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake
-irrlicht_version=1.8.4
-ogg_version=1.3.2
-vorbis_version=1.3.5
-curl_version=7.65.3
+# Test which win64 compiler is present
+command -v x86_64-w64-mingw32-gcc >/dev/null &&
+ compiler=x86_64-w64-mingw32-gcc
+command -v x86_64-w64-mingw32-gcc-posix >/dev/null &&
+ compiler=x86_64-w64-mingw32-gcc-posix
+
+if [ -z "$compiler" ]; then
+ echo "Unable to determine which MinGW compiler to use"
+ exit 1
+fi
+toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
+echo "Using $toolchain_file"
+
+# Try to find runtime DLLs in various paths (varies by distribution, sigh)
+tmp=$(dirname "$(command -v $compiler)")/..
+runtime_dlls=
+for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do
+ for dir in $tmp/x86_64-w64-mingw32/{bin,lib} $tmp/lib/gcc/x86_64-w64-mingw32/*; do
+ [ -d "$dir" ] || continue
+ file=$(echo $dir/$name)
+ [ -f "$file" ] && { runtime_dlls+="$file;"; break; }
+ done
+done
+[ -z "$runtime_dlls" ] &&
+ echo "The compiler runtime DLLs could not be found, they might be missing in the final package."
+
+# Get stuff
+irrlicht_version=1.9.0mt4
+ogg_version=1.3.4
+vorbis_version=1.3.7
+curl_version=7.76.1
gettext_version=0.20.1
-freetype_version=2.10.1
-sqlite3_version=3.27.2
+freetype_version=2.10.4
+sqlite3_version=3.35.5
luajit_version=2.1.0-beta3
-leveldb_version=1.22
+leveldb_version=1.23
zlib_version=1.2.11
+zstd_version=1.4.9
-mkdir -p $packagedir
mkdir -p $libdir
-cd $builddir
+download () {
+ local url=$1
+ local filename=$2
+ [ -z "$filename" ] && filename=${url##*/}
+ local foldername=${filename%%[.-]*}
+ local extract=$3
+ [ -z "$extract" ] && extract=unzip
+
+ [ -d "./$foldername" ] && return 0
+ wget "$url" -c -O "./$filename"
+ if [ "$extract" = "unzip" ]; then
+ unzip -o "$filename" -d "$foldername"
+ elif [ "$extract" = "unzip_nofolder" ]; then
+ unzip -o "$filename"
+ else
+ return 1
+ fi
+}
-# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win64.zip \
- -c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip \
- -c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-win64.zip \
- -c -O $packagedir/libogg-$ogg_version.zip
-[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win64.zip \
- -c -O $packagedir/libvorbis-$vorbis_version.zip
-[ -e $packagedir/curl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/curl-$curl_version-win64.zip \
- -c -O $packagedir/curl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version-win64.zip \
- -c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/freetype2-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.zip \
- -c -O $packagedir/freetype2-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip \
- -c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-win64.zip \
- -c -O $packagedir/luajit-$luajit_version.zip
-[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip \
- -c -O $packagedir/libleveldb-$leveldb_version.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped64.zip \
- -c -O $packagedir/openal_stripped.zip
-
-
-# Extract stuff
cd $libdir
-[ -d irrlicht ] || unzip -o $packagedir/irrlicht-$irrlicht_version.zip -d irrlicht
-[ -d zlib ] || unzip -o $packagedir/zlib-$zlib_version.zip -d zlib
-[ -d libogg ] || unzip -o $packagedir/libogg-$ogg_version.zip -d libogg
-[ -d libvorbis ] || unzip -o $packagedir/libvorbis-$vorbis_version.zip -d libvorbis
-[ -d libcurl ] || unzip -o $packagedir/curl-$curl_version.zip -d libcurl
-[ -d gettext ] || unzip -o $packagedir/gettext-$gettext_version.zip -d gettext
-[ -d freetype ] || unzip -o $packagedir/freetype2-$freetype_version.zip -d freetype
-[ -d sqlite3 ] || unzip -o $packagedir/sqlite3-$sqlite3_version.zip -d sqlite3
-[ -d openal_stripped ] || unzip -o $packagedir/openal_stripped.zip
-[ -d luajit ] || unzip -o $packagedir/luajit-$luajit_version.zip -d luajit
-[ -d leveldb ] || unzip -o $packagedir/libleveldb-$leveldb_version.zip -d leveldb
-
-# Get minetest
-cd $builddir
-if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- cd /$EXISTING_MINETEST_DIR # must be absolute path
+download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win64.zip" irrlicht-$irrlicht_version.zip
+download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/zstd-$zstd_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libogg-$ogg_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/curl-$curl_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/gettext-$gettext_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.zip" freetype-$freetype_version.zip
+download "http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/luajit-$luajit_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip" leveldb-$leveldb_version.zip
+download "http://minetest.kitsunemimi.pw/openal_stripped64.zip" 'openal_stripped.zip' unzip_nofolder
+
+# Set source dir, downloading Minetest as needed
+if [ -n "$EXISTING_MINETEST_DIR" ]; then
+ sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )"
else
- [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
- cd $CORE_NAME
+ cd $builddir
+ sourcedir=$PWD/$CORE_NAME
+ [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \
+ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME
+ if [ -z "$NO_MINETEST_GAME" ]; then
+ cd $sourcedir
+ [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \
+ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME
+ fi
fi
-git_hash=$(git rev-parse --short HEAD)
-# Get minetest_game
-if [ "x$NO_MINETEST_GAME" = "x" ]; then
- cd games
- [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
- cd ..
-fi
+git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
-[ -d _build ] && rm -Rf _build/
-mkdir _build
-cd _build
-cmake .. \
+cd $builddir
+[ -d build ] && rm -rf build
+mkdir build
+cd build
+
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
+cmake -S $sourcedir -B . \
-DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
-DBUILD_CLIENT=1 -DBUILD_SERVER=0 \
+ -DEXTRA_DLL="$runtime_dlls" \
\
-DENABLE_SOUND=1 \
-DENABLE_CURL=1 \
-DENABLE_GETTEXT=1 \
- -DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win64-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win64-gcc/Irrlicht.dll \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
- -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
+ -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a \
-DZLIB_DLL=$libdir/zlib/bin/zlib1.dll \
\
+ -DZSTD_INCLUDE_DIR=$libdir/zstd/include \
+ -DZSTD_LIBRARY=$libdir/zstd/lib/libzstd.dll.a \
+ -DZSTD_DLL=$libdir/zstd/bin/libzstd.dll \
+ \
-DLUA_INCLUDE_DIR=$libdir/luajit/include \
-DLUA_LIBRARY=$libdir/luajit/libluajit.a \
\
@@ -125,21 +151,19 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
-DOPENAL_DLL=$libdir/openal_stripped/bin/OpenAL32.dll \
\
- -DCURL_DLL=$libdir/libcurl/bin/libcurl-4.dll \
- -DCURL_INCLUDE_DIR=$libdir/libcurl/include \
- -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
+ -DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
+ -DCURL_INCLUDE_DIR=$libdir/curl/include \
+ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \
\
- -DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_MSGFMT=`command -v msgfmt` \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
@@ -158,7 +182,7 @@ cmake .. \
make -j$(nproc)
-[ "x$NO_PACKAGE" = "x" ] && make package
+[ -z "$NO_PACKAGE" ] && make package
exit 0
# EOF
diff --git a/util/buildbot/toolchain_i586-mingw32msvc.cmake b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
index 0eeefb84d..b5d9ba5c4 100644
--- a/util/buildbot/toolchain_i586-mingw32msvc.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
@@ -2,12 +2,14 @@
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
-SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
-SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
-SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
+# *-posix is Ubuntu's naming for the MinGW variant that comes with support
+# for pthreads / std::thread (required by MT)
+SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix)
+SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix)
+SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
# here is the target environment located
-SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc)
+SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
diff --git a/util/buildbot/toolchain_i646-w64-mingw32.cmake b/util/buildbot/toolchain_i686-w64-mingw32.cmake
index 015baa210..015baa210 100644
--- a/util/buildbot/toolchain_i646-w64-mingw32.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32.cmake
diff --git a/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake b/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake
new file mode 100644
index 000000000..b6b237657
--- /dev/null
+++ b/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake
@@ -0,0 +1,19 @@
+# name of the target operating system
+SET(CMAKE_SYSTEM_NAME Windows)
+
+# which compilers to use for C and C++
+# *-posix is Ubuntu's naming for the MinGW variant that comes with support
+# for pthreads / std::thread (required by MT)
+SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix)
+SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix)
+SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
+
+# here is the target environment located
+SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
diff --git a/util/ci/clang-format-whitelist.txt b/util/ci/clang-format-whitelist.txt
index 75d99f4cd..5cbc262ef 100644
--- a/util/ci/clang-format-whitelist.txt
+++ b/util/ci/clang-format-whitelist.txt
@@ -192,8 +192,6 @@ src/gui/guiTable.cpp
src/gui/guiTable.h
src/gui/guiVolumeChange.cpp
src/gui/guiVolumeChange.h
-src/gui/intlGUIEditBox.cpp
-src/gui/intlGUIEditBox.h
src/gui/mainmenumanager.h
src/gui/modalMenu.h
src/guiscalingfilter.cpp
diff --git a/util/ci/lint.sh b/util/ci/clang-format.sh
index 395445ca7..89576c656 100755
--- a/util/ci/lint.sh
+++ b/util/ci/clang-format.sh
@@ -1,6 +1,6 @@
#! /bin/bash
-function perform_lint() {
- echo "Performing LINT..."
+
+function setup_for_format() {
if [ -z "${CLANG_FORMAT}" ]; then
CLANG_FORMAT=clang-format
fi
@@ -8,6 +8,12 @@ function perform_lint() {
CLANG_FORMAT_WHITELIST="util/ci/clang-format-whitelist.txt"
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
+}
+
+function check_format() {
+ echo "Checking format..."
+
+ setup_for_format
local errorcount=0
local fail=0
@@ -41,3 +47,18 @@ function perform_lint() {
echo "LINT OK"
}
+
+
+function fix_format() {
+ echo "Fixing format..."
+
+ setup_for_format
+
+ for f in ${files_to_lint}; do
+ whitelisted=$(awk '$1 == "'$f'" { print 1 }' "$CLANG_FORMAT_WHITELIST")
+ if [ -z "${whitelisted}" ]; then
+ echo "$f"
+ $CLANG_FORMAT -i "$f"
+ fi
+ done
+}
diff --git a/util/ci/common.sh b/util/ci/common.sh
index 7523fa7ff..f9df54c4a 100644
--- a/util/ci/common.sh
+++ b/util/ci/common.sh
@@ -2,14 +2,24 @@
# Linux build only
install_linux_deps() {
- local pkgs=(libirrlicht-dev cmake libbz2-dev libpng-dev \
+ local pkgs=(cmake libpng-dev \
libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
- gettext libpq-dev postgresql-server-dev-all libleveldb-dev \
- libcurl4-openssl-dev)
+ gettext libpq-dev libleveldb-dev libcurl4-openssl-dev libzstd-dev)
+
+ if [[ "$1" == "--old-irr" ]]; then
+ shift
+ pkgs+=(libirrlicht-dev)
+ else
+ wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt4/ubuntu-bionic.tar.gz"
+ sudo tar -xaf ubuntu-bionic.tar.gz -C /usr/local
+ fi
sudo apt-get update
sudo apt-get install -y --no-install-recommends ${pkgs[@]} "$@"
+
+ # workaround for bug with Github Actions' ubuntu-18.04 image
+ sudo apt-get remove -y libgcc-11-dev gcc-11 || :
}
# Mac OSX build only
diff --git a/util/fix_format.sh b/util/fix_format.sh
new file mode 100755
index 000000000..3cef6f58d
--- /dev/null
+++ b/util/fix_format.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -e
+
+. ./util/ci/clang-format.sh
+
+fix_format
diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh
index 176cf11d9..5ffc044e0 100755
--- a/util/test_multiplayer.sh
+++ b/util/test_multiplayer.sh
@@ -3,41 +3,72 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
gameid=devtest
minetest=$dir/../bin/minetest
testspath=$dir/../tests
-worldpath=$testspath/testworld_$gameid
-configpath=$testspath/configs
-logpath=$testspath/log
-conf_server=$configpath/minetest.conf.multi.server
-conf_client1=$configpath/minetest.conf.multi.client1
-conf_client2=$configpath/minetest.conf.multi.client2
-log_server=$logpath/server.log
-log_client1=$logpath/client1.log
-log_client2=$logpath/client2.log
-
-mkdir -p $worldpath
-mkdir -p $configpath
-mkdir -p $logpath
-
-echo -ne 'client1::shout,interact,settime,teleport,give
-client2::shout,interact,settime,teleport,give
-' > $worldpath/auth.txt
-
-echo -ne '' > $conf_server
-
-echo -ne '# client 1 config
-screenW=500
-screenH=380
-name=client1
-viewing_range_nodes_min=10
-' > $conf_client1
-
-echo -ne '# client 2 config
-screenW=500
-screenH=380
-name=client2
-viewing_range_nodes_min=10
-' > $conf_client2
-
-echo $(sleep 1; $minetest --disable-unittests --logfile $log_client1 --config $conf_client1 --go --address localhost) &
-echo $(sleep 2; $minetest --disable-unittests --logfile $log_client2 --config $conf_client2 --go --address localhost) &
-$minetest --disable-unittests --server --logfile $log_server --config $conf_server --world $worldpath --gameid $gameid
+conf_client1=$testspath/client1.conf
+conf_server=$testspath/server.conf
+worldpath=$testspath/world
+waitfor () {
+ n=30
+ while [ $n -gt 0 ]; do
+ [ -f "$1" ] && return 0
+ sleep 0.5
+ ((n-=1))
+ done
+ echo "Waiting for ${1##*/} timed out"
+ pkill -P $$
+ exit 1
+}
+
+gdbrun () {
+ gdb -q -batch -ex 'set confirm off' -ex 'r' -ex 'bt' --args "$@"
+}
+
+[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }
+
+rm -rf $worldpath
+mkdir -p $worldpath/worldmods/test
+
+printf '%s\n' >$testspath/client1.conf \
+ video_driver=null name=client1 viewing_range=10 \
+ enable_{sound,minimap,shaders}=false
+
+printf '%s\n' >$testspath/server.conf \
+ max_block_send_distance=1 devtest_unittests_autostart=true
+
+cat >$worldpath/worldmods/test/init.lua <<"LUA"
+core.after(0, function()
+ io.close(io.open(core.get_worldpath() .. "/startup", "w"))
+end)
+local function callback(test_ok)
+ if not test_ok then
+ io.close(io.open(core.get_worldpath() .. "/test_failure", "w"))
+ end
+ io.close(io.open(core.get_worldpath() .. "/done", "w"))
+ core.request_shutdown("", false, 2)
+end
+if core.settings:get_bool("devtest_unittests_autostart") then
+ unittests.on_finished = callback
+else
+ core.register_on_joinplayer(function() callback(true) end)
+end
+LUA
+printf '%s\n' >$worldpath/worldmods/test/mod.conf \
+ name=test optional_depends=unittests
+
+echo "Starting server"
+gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
+waitfor $worldpath/startup
+
+echo "Starting client"
+gdbrun $minetest --config $conf_client1 --go --address 127.0.0.1 2>&1 | sed -u 's/^/(client) /' &
+waitfor $worldpath/done
+
+echo "Waiting for client and server to exit"
+wait
+
+if [ -f $worldpath/test_failure ]; then
+ echo "There were test failures."
+ exit 1
+fi
+echo "Success"
+exit 0
diff --git a/util/updatepo.sh b/util/updatepo.sh
index 168483bd4..23e2c61e9 100755
--- a/util/updatepo.sh
+++ b/util/updatepo.sh
@@ -13,7 +13,7 @@ abort() {
# this script is. Relative paths are fine for us so we can just
# use the following trick (works both for manual invocations and for
# script found from PATH)
-scriptisin="$(dirname "$(which "$0")")"
+scriptisin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# The script is executed from the parent of po/, which is also the
# parent of the script directory and of the src/ directory.
@@ -54,11 +54,14 @@ xgettext --package-name=minetest \
--add-location=file \
--keyword=N_ \
--keyword=wgettext \
+ --keyword=fwgettext \
--keyword=fgettext \
--keyword=fgettext_ne \
--keyword=strgettext \
--keyword=wstrgettext \
+ --keyword=core.gettext \
--keyword=showTranslatedStatusText \
+ --keyword=fmtgettext \
--output $potfile \
--from-code=utf-8 \
`find src/ -name '*.cpp' -o -name '*.h'` \
diff --git a/util/wireshark/minetest.lua b/util/wireshark/minetest.lua
index d954c7597..40e1956f3 100644
--- a/util/wireshark/minetest.lua
+++ b/util/wireshark/minetest.lua
@@ -422,8 +422,8 @@ do
t:add(f_pointed_under_y, buffer(13,2))
t:add(f_pointed_under_z, buffer(15,2))
t:add(f_pointed_above_x, buffer(17,2))
- t:add(f_pointed_above_x, buffer(19,2))
- t:add(f_pointed_above_x, buffer(21,2))
+ t:add(f_pointed_above_y, buffer(19,2))
+ t:add(f_pointed_above_z, buffer(21,2))
elseif ptype == 2 then -- Object
t:add(f_pointed_object_id, buffer(11,2))
end