diff --git a/.clang-format b/.clang-format index 63f12b6c42..b63abc533d 100644 --- a/.clang-format +++ b/.clang-format @@ -1,3 +1,5 @@ +ReflowComments: false + BasedOnStyle: LLVM IndentWidth: 4 UseTab: Always diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f60f584f93..c9e8e89aa7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -138,7 +138,7 @@ These notes are for those who have push access Minetest (core developers / maint If a Pull Request is not a bug fix: * If it matches a goal in [the roadmap](../doc/direction.md), then the PR should - be labelled as "Roadmap" and the goal stated by number in the description. + be labeled as "Roadmap" and the goal stated by number in the description. * If it doesn't match a goal, then it needs to receive a concept approval within a week of being opened to remain open. This 1 week deadline does not apply to PRs opened before the roadmap was adopted; instead, they may remain open or be diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index fb56bef004..0ef7b9693c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -26,6 +26,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | sudo apt-get update diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bebc06ec5f..889e1a117c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,15 +29,20 @@ on: - 'Dockerfile' - '.dockerignore' +env: + MINETEST_POSTGRESQL_CONNECT_STRING: 'host=localhost user=minetest password=minetest dbname=minetest' + jobs: # Older gcc version (should be close to our minimum supported version) gcc_5: if: ${{ false }} runs-on: ubuntu-18.04 + if: "false" # FIXME steps: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -61,6 +66,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -81,10 +87,12 @@ jobs: clang_3_9: if: ${{ false }} runs-on: ubuntu-18.04 + if: "false" # FIXME steps: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -112,6 +120,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -140,6 +149,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -168,6 +178,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Build docker image run: | docker build . -t minetest:latest @@ -181,6 +192,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install compiler run: | sudo apt-get update && sudo apt-get install -y gettext @@ -202,6 +214,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install compiler run: | sudo apt-get update && sudo apt-get install -y gettext @@ -246,7 +259,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive - + fetch-depth: 10 # - name: Checkout IrrlichtMt # run: | # $ref = @(Get-Content misc\irrlichtmt_tag.txt) diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml index 5c5fcc47a0..374be54455 100644 --- a/.github/workflows/cpp_lint.yml +++ b/.github/workflows/cpp_lint.yml @@ -47,6 +47,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh diff --git a/.github/workflows/lua.yml b/.github/workflows/lua.yml index 5580a50fd8..39a0a7d36c 100644 --- a/.github/workflows/lua.yml +++ b/.github/workflows/lua.yml @@ -22,6 +22,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -48,6 +49,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - uses: leafo/gh-actions-lua@v9 with: luaVersion: "5.1.5" diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index a7888f9024..8f9ed4039b 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -33,6 +33,7 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive + fetch-depth: 10 - name: Install deps run: | source ./util/ci/common.sh @@ -48,7 +49,8 @@ jobs: -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \ -DCMAKE_FIND_FRAMEWORK=LAST \ -DCMAKE_INSTALL_PREFIX=../build/macos/ \ - -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE \ + -DINSTALL_DEVTEST=TRUE make -j2 make install diff --git a/.gitignore b/.gitignore index b6904c7218..78aea83151 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,8 @@ gtags.files build/.cmake/ # Gradle .gradle +# Clang +.cache ## Files related to Minetest development cycle /*.patch @@ -41,17 +43,17 @@ build/.cmake/ /bin/ /games/* !/games/devtest/ +/games/devtest/mods/soundstuff/sounds/gitignored_sounds/* +!/games/devtest/mods/soundstuff/sounds/gitignored_sounds/custom_sounds_here.txt /cache /textures/* !/textures/base/ /screenshots /sounds /mods/* -!/mods/minetest/ -/mods/minetest/* -!/mods/minetest/mods_here.txt -/worlds -/world/ +!/mods/mods_here.txt +/worlds/* +!/worlds/worlds_here.txt /clientmods/* !/clientmods/preview/ /client/mod_storage/ @@ -128,6 +130,7 @@ auto_* util/autotest/logs.* util/autotest/auto.json util/autotest/world +util/autotest/screenshot* client/favoriteservers.json client/servers_public.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 28e35a9714..9f7917f594 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,11 +16,11 @@ variables: stage: build before_script: - apt-get update - - DEBIAN_FRONTEND=noninteractive apt-get -y install build-essential git cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev + - DEBIAN_FRONTEND=noninteractive apt-get -y install build-essential gettext git cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev script: - git clone https://github.com/minetest/irrlicht lib/irrlichtmt --depth 1 -b $(cat misc/irrlichtmt_tag.txt) - mkdir build && cd build - - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE .. + - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE .. - make -j $(($(nproc) + 1)) - make install artifacts: @@ -29,164 +29,14 @@ variables: paths: - artifact/* -.debpkg_template: - stage: package - before_script: - - apt-get update - - apt-get install -y git - - mkdir -p build/deb/minetest/DEBIAN/ - - cp misc/debpkg-control build/deb/minetest/DEBIAN/control - - cp -a artifact/minetest/usr build/deb/minetest/ - script: - - git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game - - rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git - - sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control - - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control - - sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control - - sed -i 's/JSONCPP_PLACEHOLDER/'$JSONCPP_PKG'/g' build/deb/minetest/DEBIAN/control - - cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../ - artifacts: - expire_in: 90 day - paths: - - ./*.deb - -.debpkg_install: - stage: deploy - before_script: - - apt-get update -qy - script: - - apt-get install -y ./*.deb - - minetest --version - -## -## Debian -## - -# Stretch - -build:debian-9: - extends: .build_template - image: debian:9 - -package:debian-9: - extends: .debpkg_template - image: debian:9 - needs: - - build:debian-9 - variables: - JSONCPP_PKG: libjsoncpp1 - LEVELDB_PKG: libleveldb1v5 - JPEG_PKG: libjpeg62-turbo - -deploy:debian-9: - extends: .debpkg_install - image: debian:9 - needs: - - package:debian-9 - -# Buster - -build:debian-10: - extends: .build_template - image: debian:10 - -package:debian-10: - extends: .debpkg_template - image: debian:10 - needs: - - build:debian-10 - variables: - JSONCPP_PKG: libjsoncpp1 - LEVELDB_PKG: libleveldb1d - JPEG_PKG: libjpeg62-turbo - -deploy:debian-10: - extends: .debpkg_install - image: debian:10 - needs: - - package:debian-10 - -# Bullseye - -build:debian-11: - extends: .build_template - image: debian:11 - -package:debian-11: - extends: .debpkg_template - image: debian:11 - needs: - - build:debian-11 - variables: - JSONCPP_PKG: libjsoncpp24 - LEVELDB_PKG: libleveldb1d - JPEG_PKG: libjpeg62-turbo - -deploy:debian-11: - extends: .debpkg_install - image: debian:11 - needs: - - package:debian-11 - ## -## Ubuntu +## Ubuntu (prerequisite for AppImage build) ## -# Bionic - -build:ubuntu-18.04: - extends: .build_template - image: ubuntu:bionic - -package:ubuntu-18.04: - extends: .debpkg_template - image: ubuntu:bionic - needs: - - build:ubuntu-18.04 - variables: - JSONCPP_PKG: libjsoncpp1 - LEVELDB_PKG: libleveldb1v5 - JPEG_PKG: libjpeg-turbo8 - -deploy:ubuntu-18.04: - extends: .debpkg_install - image: ubuntu:bionic - needs: - - package:ubuntu-18.04 - -# Focal - build:ubuntu-20.04: extends: .build_template image: ubuntu:focal -package:ubuntu-20.04: - extends: .debpkg_template - image: ubuntu:focal - needs: - - build:ubuntu-20.04 - variables: - JSONCPP_PKG: libjsoncpp1 - LEVELDB_PKG: libleveldb1d - JPEG_PKG: libjpeg-turbo8 - -deploy:ubuntu-20.04: - extends: .debpkg_install - image: ubuntu:focal - needs: - - package:ubuntu-20.04 - -## -## Fedora -## - -# Fedora 28 <-> RHEL 8 -build:fedora-28: - extends: .build_template - image: fedora:28 - before_script: - - dnf -y install make git gcc gcc-c++ kernel-devel cmake libjpeg-devel libpng-devel libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel - ## ## MinGW for Windows ## @@ -235,10 +85,7 @@ package:docker: before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com script: - - docker build . -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME -t ${CONTAINER_IMAGE}/server:latest - - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA - - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME - - docker push ${CONTAINER_IMAGE}/server:latest + - ./util/ci/docker.sh ## ## Gitlab Pages (Lua API documentation) @@ -248,9 +95,7 @@ pages: stage: deploy image: python:3.8 before_script: - - pip install git+https://github.com/Python-Markdown/markdown.git - - pip install git+https://github.com/mkdocs/mkdocs.git - - pip install pygments + - pip install -U -r doc/mkdocs/requirements.txt script: - cd doc/mkdocs && ./build.sh artifacts: @@ -267,22 +112,21 @@ package:appimage-client: stage: package image: appimagecrafters/appimage-builder needs: - - build:ubuntu-18.04 + - build:ubuntu-20.04 before_script: - - apt-get update -y + - apt-get update - apt-get install -y git # Collect files - mkdir AppDir - cp -a artifact/minetest/usr/ AppDir/usr/ - - rm AppDir/usr/bin/minetestserver - cp -a clientmods AppDir/usr/share/minetest - script: - git clone $MINETEST_GAME_REPO AppDir/usr/share/minetest/games/minetest_game - - rm -rf AppDir/usr/share/minetest/games/minetest/.git - - export VERSION=$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA + - rm -rf AppDir/usr/share/minetest/games/minetest_game/.git # Remove PrefersNonDefaultGPU property due to validation errors - sed -i '/PrefersNonDefaultGPU/d' AppDir/usr/share/applications/net.minetest.minetest.desktop - - appimage-builder --skip-test + script: + - export VERSION=$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA + - appimage-builder --skip-test --recipe misc/AppImageBuilder.yml artifacts: expire_in: 90 day paths: diff --git a/.gitmodules b/.gitmodules index cb979f8c84..cf803ee9c3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "lib/irrlichtmt"] path = lib/irrlichtmt url = https://github.com/minetest/irrlicht +[submodule "src/external/websocketpp"] + path = src/external/websocketpp + url = https://github.com/zaphoyd/websocketpp.git diff --git a/.mailmap b/.mailmap index 76190d078e..164c285c05 100644 --- a/.mailmap +++ b/.mailmap @@ -37,7 +37,7 @@ numzero Jean-Patrick Guerrero Jean-Patrick Guerrero HybridDog <3192173+HybridDog@users.noreply.github.com> -srfqi +srifqi Dániel Juhász rubenwardy rubenwardy @@ -48,7 +48,8 @@ ClobberXD ClobberXD <36130650+ClobberXD@users.noreply.github.com> Auke Kok Auke Kok -Desour +DS +DS Nathanaëlle Courant Ezhh paramat @@ -67,3 +68,7 @@ gregorycu Rogier Rogier x2048 +Lars Müller +Lars Müller <34514239+appgurueu@users.noreply.github.com> +ROllerozxa +ROllerozxa diff --git a/CMakeLists.txt b/CMakeLists.txt index 988d0d4780..1273d41b0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,20 +10,20 @@ endif() # This can be read from ${PROJECT_NAME} after project() is called project(freeminer) set(PROJECT_NAME_CAPITALIZED "freeminer") +set(VERSION_TWEAK 0) # freeminer + set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(GCC_MINIMUM_VERSION "5.1") set(CLANG_MINIMUM_VERSION "3.5") -# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing +# You should not need to edit these manually, use util/bump_version.sh set(VERSION_MAJOR 5) -set(VERSION_MINOR 6) -set(VERSION_PATCH 1) +set(VERSION_MINOR 7) +set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") -set(VERSION_TWEAK 0) # freeminer - # Change to false for releases set(DEVELOPMENT_BUILD TRUE) @@ -117,7 +117,7 @@ endif() MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") -if (NOT NO_LTO AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) +if (NOT NO_LTO AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) # AND NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten" # include(CheckIPOSupported) # check_ipo_supported(RESULT supported OUTPUT error) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) @@ -192,7 +192,7 @@ if(BUILD_CLIENT AND TARGET IrrlichtMt::IrrlichtMt) endif() message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}") - set(TARGET_VER_S 1.9.0mt8) + set(TARGET_VER_S 1.9.0mt10) string(REPLACE "mt" "." TARGET_VER ${TARGET_VER_S}) if(IrrlichtMt_VERSION VERSION_LESS ${TARGET_VER}) message(FATAL_ERROR "At least IrrlichtMt ${TARGET_VER_S} is required to build") @@ -202,6 +202,17 @@ if(BUILD_CLIENT AND TARGET IrrlichtMt::IrrlichtMt) endif() endif() +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${GCC_MINIMUM_VERSION}") + message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. " + "Version ${GCC_MINIMUM_VERSION} or higher is required.") + endif() +elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}") + message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. " + "Version ${CLANG_MINIMUM_VERSION} or higher is required.") + endif() +endif() # Installation @@ -304,8 +315,13 @@ endif() install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game" DESTINATION "${SHAREDIR}/games/" COMPONENT "SUBGAME_MINETEST_GAME" OPTIONAL PATTERN ".git*" EXCLUDE ) -install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHAREDIR}/games/" - COMPONENT "SUBGAME_MINIMAL" OPTIONAL PATTERN ".git*" EXCLUDE ) + +set(INSTALL_DEVTEST FALSE CACHE BOOL "Install Development Test") + +if(INSTALL_DEVTEST) + install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHAREDIR}/games/" + PATTERN ".git*" EXCLUDE ) +endif() install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/default" DESTINATION "${SHAREDIR}/games/" COMPONENT "SUBGAME_DEFAULT" OPTIONAL PATTERN ".git*" EXCLUDE ) @@ -316,7 +332,7 @@ if(BUILD_CLIENT) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base") if(RUN_IN_PLACE) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}") - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client") + #install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client") endif() endif() @@ -348,23 +364,9 @@ find_package(GMP REQUIRED) find_package(Json REQUIRED) find_package(Lua REQUIRED) if(NOT USE_LUAJIT) - set(LUA_BIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/bitop) - set(LUA_BIT_LIBRARY bitop) add_subdirectory(lib/bitop) endif() -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${GCC_MINIMUM_VERSION}") - message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. " - "Version ${GCC_MINIMUM_VERSION} or higher is required.") - endif() -elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}") - message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. " - "Version ${CLANG_MINIMUM_VERSION} or higher is required.") - endif() -endif() - if(BUILD_BENCHMARKS) add_subdirectory(lib/catch2) endif() @@ -373,7 +375,6 @@ endif() # Be sure to add all relevant definitions above this add_subdirectory(src) - # CPack set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A free open-source voxel game engine with easy modding and game creation.") @@ -397,13 +398,6 @@ cpack_add_component(SUBGAME_MINETEST_GAME GROUP "Games" ) -cpack_add_component(SUBGAME_MINIMAL - DISPLAY_NAME "Development Test" - DESCRIPTION "A basic testing environment used for engine development and sometimes for testing mods." - DISABLED #DISABLED does not mean it is disabled, and is just not selected by default. - GROUP "Games" -) - cpack_add_component_group(Subgames DESCRIPTION "Games for the Minetest engine." ) @@ -429,7 +423,7 @@ if(WIN32) set(PROJECT_VERSION ${VERSION_STRING}) endif() - # Include all dynamically linked runtime libaries such as MSVCRxxx.dll + # Include all dynamically linked runtime libraries such as MSVCRxxx.dll include(InstallRequiredSystemLibraries) if(RUN_IN_PLACE) diff --git a/COPYING.LESSER b/COPYING.LESSER new file mode 100644 index 0000000000..4362b49151 --- /dev/null +++ b/COPYING.LESSER @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/Dockerfile b/Dockerfile index 7466829fec..18c1a5d10d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,39 @@ -ARG DOCKER_IMAGE=alpine:3.14 +ARG DOCKER_IMAGE=alpine:3.16 FROM $DOCKER_IMAGE AS builder ENV MINETEST_GAME_VERSION master ENV IRRLICHT_VERSION master +ENV SPATIALINDEX_VERSION 1.9.3 +ENV LUAJIT_VERSION v2.1 + +RUN apk add --no-cache git build-base cmake curl-dev zlib-dev zstd-dev \ + sqlite-dev postgresql-dev hiredis-dev leveldb-dev \ + gmp-dev jsoncpp-dev ninja ca-certificates + +WORKDIR /usr/src/ +RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \ + cd prometheus-cpp && \ + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_TESTING=0 \ + -GNinja && \ + cmake --build build && \ + cmake --install build && \ + cd /usr/src/ && \ + git clone --recursive https://github.com/libspatialindex/libspatialindex -b ${SPATIALINDEX_VERSION} && \ + cd libspatialindex && \ + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + cmake --build build && \ + cmake --install build && \ + cd /usr/src/ && \ + git clone --recursive https://luajit.org/git/luajit.git -b ${LUAJIT_VERSION} && \ + cd luajit && \ + make && make install && \ + cd /usr/src/ && \ + git clone --depth=1 https://github.com/minetest/irrlicht/ -b ${IRRLICHT_VERSION} && \ + cp -r irrlicht/include /usr/include/irrlichtmt COPY mods /usr/src/minetest/mods COPY .git /usr/src/minetest/.git @@ -20,45 +51,24 @@ COPY src /usr/src/minetest/src COPY textures /usr/src/minetest/textures WORKDIR /usr/src/minetest +RUN git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git ./games/minetest_game && \ + rm -fr ./games/minetest_game/.git && \ + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SERVER=TRUE \ + -DENABLE_PROMETHEUS=TRUE \ + -DBUILD_UNITTESTS=FALSE \ + -DBUILD_CLIENT=FALSE \ + -GNinja && \ + cmake --build build && \ + cmake --install build -RUN apk add --no-cache git build-base cmake sqlite-dev curl-dev zlib-dev zstd-dev \ - msgpack-c boost-dev libexecinfo-dev \ - gmp-dev jsoncpp-dev postgresql-dev ninja luajit-dev ca-certificates && \ -true -# git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git ./games/minetest_game && \ -# rm -fr ./games/minetest_game/.git - -WORKDIR /usr/src/ -RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \ - cd prometheus-cpp && \ - cmake -B build \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DCMAKE_BUILD_TYPE=Release \ - -DENABLE_TESTING=0 \ - -GNinja && \ - cmake --build build && \ - cmake --install build - -RUN git clone --depth=1 https://github.com/minetest/irrlicht/ -b ${IRRLICHT_VERSION} && \ - cp -r irrlicht/include /usr/include/irrlichtmt - -WORKDIR /usr/src/minetest -RUN cmake -B build \ - -DRUN_IN_PLACE=0 \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SERVER=TRUE \ - -DENABLE_PROMETHEUS=TRUE \ - -DBUILD_UNITTESTS=FALSE \ - -DBUILD_CLIENT=FALSE \ - -GNinja && \ - cmake --build build && \ - cmake --install build - -ARG DOCKER_IMAGE=alpine:3.14 +ARG DOCKER_IMAGE=alpine:3.16 FROM $DOCKER_IMAGE AS runtime -RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit jsoncpp zstd-libs && \ +RUN apk add --no-cache curl gmp libstdc++ libgcc libpq jsoncpp zstd-libs \ + sqlite-libs postgresql hiredis leveldb && \ adduser -D minetest --uid 30000 -h /var/lib/minetest && \ chown -R minetest:minetest /var/lib/minetest @@ -67,9 +77,12 @@ WORKDIR /var/lib/minetest COPY --from=builder /usr/local/share/freeminer /usr/local/share/freeminer COPY --from=builder /usr/local/bin/freeminerserver /usr/local/bin/freeminerserver COPY --from=builder /usr/local/share/doc/freeminer/freeminer.conf.example /etc/freeminer/freeminer.conf - +COPY --from=builder /usr/local/lib/libspatialindex* /usr/local/lib/ +COPY --from=builder /usr/local/lib/libluajit* /usr/local/lib/ USER minetest:minetest EXPOSE 30000/udp 30000/tcp +VOLUME /var/lib/minetest/ /etc/minetest/ -CMD ["/usr/local/bin/freeminerserver", "--config", "/etc/freeminer/freeminer.conf"] +ENTRYPOINT ["/usr/local/bin/freeminerserver"] +CMD ["--config", "/etc/freeminer/freeminer.conf"] diff --git a/LICENSE.txt b/LICENSE.txt index d33cfa0299..e79748ef3a 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -13,6 +13,9 @@ https://www.apache.org/licenses/LICENSE-2.0.html Textures by Zughy are under CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/ +Media files by DS are under CC BY-SA 4.0 +https://creativecommons.org/licenses/by-sa/4.0/ + textures/base/pack/server_public.png is under CC-BY 4.0, taken from Twitter's Twemoji set https://creativecommons.org/licenses/by/4.0/ @@ -54,7 +57,6 @@ srifqi: Zughy: textures/base/pack/cdb_add.png - textures/base/pack/cdb_clear.png textures/base/pack/cdb_downloading.png textures/base/pack/cdb_queued.png textures/base/pack/cdb_update.png @@ -62,16 +64,21 @@ Zughy: appgurueu: textures/base/pack/server_incompatible.png - + erlehmann, Warr1024, rollerozxa: textures/base/pack/no_screenshot.png kilbith: textures/base/pack/server_favorite.png -SmallJoker +SmallJoker: + textures/base/pack/cdb_clear.png textures/base/pack/server_favorite_delete.png (based on server_favorite.png) +DS: + games/devtest/mods/soundstuff/textures/soundstuff_jukebox.png + games/devtest/mods/testtools/textures/testtools_branding_iron.png + License of Minetest source code ------------------------------- diff --git a/README.md b/README.md index 48190be418..4fc33f314c 100644 --- a/README.md +++ b/README.md @@ -211,11 +211,9 @@ Some can be changed in the key config dialog in the settings tab. | T | Chat | | / | Command | | Esc | Pause menu/abort/exit (pauses only singleplayer game) | -| R | Enable/disable full range view | | + | Increase view range | | - | Decrease view range | | K | Enable/disable fly mode (needs fly privilege) | -| P | Enable/disable pitch move mode | | J | Enable/disable fast mode (needs fast privilege) | | H | Enable/disable noclip mode (needs noclip privilege) | | E | Aux1 (Move fast in fast mode. Games may add special features) | @@ -248,15 +246,15 @@ Where each location is on each platform: * Windows installed: * `bin` = `C:\Program Files\Minetest\bin (Depends on the install location)` * `share` = `C:\Program Files\Minetest (Depends on the install location)` - * `user` = `%APPDATA%\Minetest` + * `user` = `%APPDATA%\Minetest` or `%MINETEST_USER_PATH%` * Linux installed: * `bin` = `/usr/bin` * `share` = `/usr/share/minetest` - * `user` = `~/.minetest` + * `user` = `~/.minetest` or `$MINETEST_USER_PATH` * macOS: * `bin` = `Contents/MacOS` * `share` = `Contents/Resources` - * `user` = `Contents/User OR ~/Library/Application Support/minetest` + * `user` = `Contents/User` or `~/Library/Application Support/minetest` or `$MINETEST_USER_PATH` Worlds can be found as separate folders in: `user/worlds/` @@ -298,7 +296,7 @@ For Debian/Ubuntu users: For Fedora users: - sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel + sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel For Arch users: @@ -320,12 +318,20 @@ For Fedora users: sudo dnf install git +For Arch users: + + sudo pacman -S git + +For Alpine users: + + sudo apk add git + Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: git clone --depth 1 https://github.com/minetest/minetest.git cd minetest -Download minetest_game (otherwise only the "Development Test" game is available) using Git: +Download Minetest Game (otherwise only the "Development Test" game is available) using Git: git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game @@ -339,7 +345,7 @@ Download source, without using Git: tar xf master.tar.gz cd minetest-master -Download minetest_game, without using Git: +Download Minetest Game, without using Git: cd games/ wget https://github.com/minetest/minetest_game/archive/master.tar.gz @@ -412,6 +418,7 @@ General options and their default values: ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default + INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Minetest USE_GPROF=FALSE - Enable profiling using GProf VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) ENABLE_TOUCH=FALSE - Enable Touchscreen support (requires support by IrrlichtMt) @@ -429,9 +436,10 @@ Library specific options: FREETYPE_LIBRARY - Path to libfreetype.a/libfreetype.so/freetype.lib FREETYPE_DLL - Only on Windows; path to libfreetype-6.dll GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs - GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains iconv.h - GETTEXT_LIBRARY - Only when building with gettext on Windows; path to libintl.dll.a + GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains libintl.h + GETTEXT_LIBRARY - Optional/platform-dependent with gettext; path to libintl.so/libintl.dll.a GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe + ICONV_LIBRARY - Optional/platform-dependent; path to libiconv.so/libiconv.dylib IRRLICHT_DLL - Only on Windows; path to IrrlichtMt.dll IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h (usable for server build only) LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h @@ -442,7 +450,7 @@ Library specific options: REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h - SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib + SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex.so/spatialindex-32.lib LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so OGG_DLL - Only if building with sound on Windows; path to libogg.dll @@ -554,7 +562,7 @@ git clone --depth 1 https://github.com/minetest/minetest.git cd minetest ``` -Download minetest_game (otherwise only the "Development Test" game is available) using Git: +Download Minetest Game (otherwise only the "Development Test" game is available) using Git: ``` git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game diff --git a/android/app/build.gradle b/android/app/build.gradle index ce895edd17..b268dd3cb1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,12 +1,13 @@ apply plugin: 'com.android.application' + android { - compileSdkVersion 30 - buildToolsVersion '30.0.3' + compileSdkVersion 33 + buildToolsVersion '33.0.2' ndkVersion "$ndk_version" defaultConfig { applicationId 'net.minetest.minetest' - minSdkVersion 16 - targetSdkVersion 30 + minSdkVersion 21 + targetSdkVersion 33 versionName "${versionMajor}.${versionMinor}.${versionPatch}" versionCode project.versionCode } @@ -52,51 +53,59 @@ android { task prepareAssets() { def assetsFolder = "build/assets" - def projRoot = "../.." + def projRoot = rootDir.parent def gameToCopy = "minetest_game" - copy { - from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into assetsFolder - } - copy { - from "${projRoot}/doc/lgpl-2.1.txt" into "${assetsFolder}" - } - copy { - from "${projRoot}/builtin" into "${assetsFolder}/builtin" - } - copy { - from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders" - } - copy { - from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht" + doFirst { + logger.lifecycle('Preparing assets at {}', assetsFolder) } - copy { - from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts" - } - copy { - from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}" - } - fileTree("${projRoot}/po").include("**/*.po").forEach { poFile -> - def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/" - file(moPath).mkdirs() - exec { - commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile + doLast { + copy { + from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into assetsFolder + } + copy { + from "${projRoot}/doc/lgpl-2.1.txt" into assetsFolder + } + copy { + from "${projRoot}/builtin" into "${assetsFolder}/builtin" + } + copy { + from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders" + } + copy { + from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht" + } + copy { + from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts" + } + copy { + from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}" + } + copy { + from "${projRoot}/textures" into "${assetsFolder}/textures" } - } - copy { - from "${projRoot}/textures" into "${assetsFolder}/textures" - } - file("${assetsFolder}/.nomedia").text = ""; + // compile translations + fileTree("${projRoot}/po").include("**/*.po").forEach { poFile -> + def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/" + file(moPath).mkdirs() + exec { + commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile + } + } + + file("${assetsFolder}/.nomedia").text = "" + } - task zipAssets(type: Zip) { - archiveName "Minetest.zip" - from "${assetsFolder}" - destinationDir file("src/main/assets") + task zipAssets(dependsOn: prepareAssets, type: Zip) { + archiveFileName = "Minetest.zip" + from assetsFolder + destinationDirectory = file("src/main/assets") } } preBuild.dependsOn zipAssets +prepareAssets.dependsOn ':native:getDeps' // Map for the version code that gives each ABI a value. import com.android.build.OutputFile @@ -112,5 +121,5 @@ android.applicationVariants.all { variant -> dependencies { implementation project(':native') - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.6.1' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 11c868622b..f31810a175 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + a group-rating table (e.g. {fleshy=100}) - object.set_armor_groups({fleshy=30, cracky=80}) + object:get_armor_groups() --> a group-rating table (e.g. {fleshy=100}) + object:set_armor_groups({fleshy=30, cracky=80}) Groups of tool capabilities --------------------------- @@ -1796,7 +1840,24 @@ are effective towards. Groups in crafting recipes -------------------------- -An example: Make meat soup from any meat, any water and any bowl: +In crafting recipes, you can specify a group as an input item. +This means that any item in that group will be accepted as input. + +The basic syntax is: + + "group:" + +For example, `"group:meat"` will accept any item in the `meat` group. + +It is also possible to require an input item to be in +multiple groups at once. The syntax for that is: + + "group:,,(...)," + +For example, `"group:leaves,birch,trimmed"` accepts any item which is member +of *all* the groups `leaves` *and* `birch` *and* `trimmed`. + +An example recipe: Craft a raw meat soup from any meat, any water and any bowl: { output = "food:meat_soup_raw", @@ -1807,7 +1868,9 @@ An example: Make meat soup from any meat, any water and any bowl: }, } -Another example: Make red wool from white wool and red dye: +Another example: Craft red wool from white wool and red dye +(here, "red dye" is defined as any item which is member of +*both* the groups `dye` and `basecolor_red`). { type = "shapeless", @@ -1830,10 +1893,19 @@ to games. ### Node-only groups -* `attached_node`: if the node under it is not a walkable block the node will be - dropped as an item. If the node is wallmounted the wallmounted direction is - checked. -* `bouncy`: value is bounce speed in percent +* `attached_node`: the node is 'attached' to a neighboring node. It checks + whether the node it is attached to is walkable. If it + isn't, the node will drop as an item. + * `1`: if the node is wallmounted, the node is attached in the wallmounted + direction. Otherwise, the node is attached to the node below. + * `2`: if the node is facedir or 4dir, the facedir or 4dir direction is checked. + No effect for other nodes. + Note: The "attaching face" of this node is tile no. 5 (back face). + * `3`: the node is always attached to the node below. + * `4`: the node is always attached to the node above. +* `bouncy`: value is bounce speed in percent. + If positive, jump/sneak on floor impact will increase/decrease bounce height. + Negative value is the same bounciness, but non-controllable. * `connect_to_raillike`: makes nodes of raillike drawtype with same group value connect to each other * `dig_immediate`: Player can always pick up node without reducing tool wear @@ -2038,7 +2110,7 @@ Example definition of the capabilities of an item }, } -This makes the item capable of digging nodes that fulfil both of these: +This makes the item capable of digging nodes that fulfill both of these: * Have the `crumbly` group * Have a `level` group less or equal to `2` @@ -2152,16 +2224,25 @@ Some of the values in the key-value store are handled specially: Example: local meta = minetest.get_meta(pos) + + -- Set node formspec and infotext meta:set_string("formspec", "size[8,9]".. "list[context;main;0,0;8,4;]".. "list[current_player;main;0,5;8,4;]") meta:set_string("infotext", "Chest"); + + -- Set inventory list size of `"main"` list to 32 local inv = meta:get_inventory() - inv:set_size("main", 8*4) + inv:set_size("main", 32) + + -- Dump node metadata print(dump(meta:to_table())) + + -- Set node metadata from a metadata table meta:from_table({ inventory = { + -- Set items of inventory in all 32 slots of the `"main"` list main = {[1] = "default:dirt", [2] = "", [3] = "", [4] = "", [5] = "", [6] = "", [7] = "", [8] = "", [9] = "", [10] = "", [11] = "", [12] = "", [13] = "", @@ -2171,6 +2252,7 @@ Example: [27] = "", [28] = "", [29] = "", [30] = "", [31] = "", [32] = ""} }, + -- metadata fields fields = { formspec = "size[8,9]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", infotext = "Chest" @@ -2261,7 +2343,7 @@ For colored text you can use `minetest.colorize`. Since formspec version 3, elements drawn in the order they are defined. All background elements are drawn before all other elements. -**WARNING**: do _not_ use a element name starting with `key_`; those names are +**WARNING**: do _not_ use an element name starting with `key_`; those names are reserved to pass key press events to formspec! **WARNING**: Minetest allows you to add elements to every single formspec instance @@ -2563,7 +2645,7 @@ Elements * When enter is pressed in field, fields.key_enter_field will be sent with the name of this field. * With the old coordinate system, fields are a set height, but will be vertically - centred on `H`. With the new coordinate system, `H` will modify the height. + centered on `H`. With the new coordinate system, `H` will modify the height. * `name` is the name of the field as returned in fields to `on_receive_fields` * `label`, if not blank, will be text printed on the top left above the field * See `field_close_on_enter` to stop enter closing the formspec @@ -2574,7 +2656,7 @@ Elements * When enter is pressed in field, `fields.key_enter_field` will be sent with the name of this field. * With the old coordinate system, fields are a set height, but will be vertically - centred on `H`. With the new coordinate system, `H` will modify the height. + centered on `H`. With the new coordinate system, `H` will modify the height. * `name` is the name of the field as returned in fields to `on_receive_fields` * `label`, if not blank, will be text printed on the top left above the field * `default` is the default value of the field @@ -2637,7 +2719,7 @@ Elements * Clickable button. When clicked, fields will be sent. * With the old coordinate system, buttons are a set height, but will be vertically - centred on `H`. With the new coordinate system, `H` will modify the height. + centered on `H`. With the new coordinate system, `H` will modify the height. * `label` is the text on the button ### `image_button[,;,;;;