Minetest
========
-[![Build Status](https://travis-ci.org/minetest/minetest.svg?branch=master)](https://travis-ci.org/minetest/minetest)
+![Build Status](https://github.com/minetest/minetest/workflows/build/badge.svg)
[![Translation status](https://hosted.weblate.org/widgets/minetest/-/svg-badge.svg)](https://hosted.weblate.org/engage/minetest/?utm_source=widget)
[![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
-An InfiniMiner/Minecraft inspired game.
+Minetest is a free open-source voxel game engine with easy modding and game creation.
-Copyright (c) 2010-2018 Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2020 Perttu Ahola <celeron55@gmail.com>
and contributors (see source file comments and the version control log)
-In case you downloaded the source code:
----------------------------------------
+In case you downloaded the source code
+--------------------------------------
If you downloaded the Minetest Engine source code in which this file is
contained, you probably want to download the [Minetest Game](https://github.com/minetest/minetest_game/)
project too. See its README.txt for more information.
+Table of Contents
+------------------
+
+1. [Further Documentation](#further-documentation)
+2. [Default Controls](#default-controls)
+3. [Paths](#paths)
+4. [Configuration File](#configuration-file)
+5. [Command-line Options](#command-line-options)
+6. [Compiling](#compiling)
+7. [Docker](#docker)
+8. [Version Scheme](#version-scheme)
+
+
Further documentation
----------------------
- Website: http://minetest.net/
- Wiki: http://wiki.minetest.net/
- Developer wiki: http://dev.minetest.net/
- Forum: http://forum.minetest.net/
-- Github: https://github.com/minetest/minetest/
-- doc/ directory of source distribution
+- GitHub: https://github.com/minetest/minetest/
+- [doc/](doc/) directory of source distribution
Default controls
----------------
All controls are re-bindable using settings.
-Some can be changes in the key config dialog in the settings tab.
+Some can be changed in the key config dialog in the settings tab.
| Button | Action |
|-------------------------------|----------------------------------------------------------------|
| + | 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 | Move fast in fast mode |
-| F1 | Hide/show HUD |
-| F2 | Hide/show chat |
-| F3 | Disable/enable fog |
-| F4 | Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds) |
-| F5 | Cycle through debug info screens |
-| F6 | Cycle through profiler info screens |
-| F7 | Cycle through camera modes |
-| F8 | Toggle cinematic mode |
-| F9 | Cycle through minimap modes |
-| Shift + F9 | Change minimap orientation |
+| C | Cycle through camera modes |
+| V | Cycle through minimap modes |
+| Shift + V | Change minimap orientation |
+| F1 | Hide/show HUD |
+| F2 | Hide/show chat |
+| F3 | Disable/enable fog |
+| F4 | Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds) |
+| F5 | Cycle through debug information screens |
+| F6 | Cycle through profiler info screens |
| F10 | Show/hide console |
| F12 | Take screenshot |
Paths
-----
-
Locations:
-* bin - Compiled binaries
-* share - Distributed read-only data
-* user - User-created modifiable data
+* `bin` - Compiled binaries
+* `share` - Distributed read-only data
+* `user` - User-created modifiable data
Where each location is on each platform:
* Windows .zip / RUN_IN_PLACE source:
- * bin = bin
- * share = .
- * user = .
+ * `bin` = `bin`
+ * `share` = `.`
+ * `user` = `.`
+* 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`
* Linux installed:
- * bin = /usr/bin
- * share = /usr/share/minetest
- * user = ~/.minetest
+ * `bin` = `/usr/bin`
+ * `share` = `/usr/share/minetest`
+ * `user` = `~/.minetest`
* macOS:
- * bin = Contents/MacOS
- * share = Contents/Resources
- * user = Contents/User OR ~/Library/Application Support/minetest
+ * `bin` = `Contents/MacOS`
+ * `share` = `Contents/Resources`
+ * `user` = `Contents/User OR ~/Library/Application Support/minetest`
-Worlds can be found as separate folders in: user/worlds/
+Worlds can be found as separate folders in: `user/worlds/`
-Configuration file:
--------------------
+Configuration file
+------------------
- Default location:
`user/minetest.conf`
-- It is created by Minetest when it is ran the first time.
+- This file is created by closing Minetest for the first time.
- A specific file can be specified on the command line:
`--config <path-to-file>`
- A run-in-place build will look for the configuration file in
`location_of_exe/../minetest.conf` and also `location_of_exe/../../minetest.conf`
-Command-line options:
----------------------
-- Use --help
+Command-line options
+--------------------
+- Use `--help`
Compiling
---------
-
### Compiling on GNU/Linux
#### Dependencies
| GMP | 5.0.0+ | Bundled mini-GMP is used if not present |
| JsonCPP | 1.0.0+ | Bundled JsonCPP is used if not present |
-For Debian/Ubuntu:
+For Debian/Ubuntu users:
- $ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
+ sudo apt install g++ make libc6-dev libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
For Fedora users:
- $ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
+ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
+
+For Arch users:
+
+ sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm irrlicht libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses
+
+For Alpine users:
+
+ sudo apk add build-base irrlicht-dev cmake bzip2-dev libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev
#### Download
-You can install git for easily keeping your copy up to date.
-If you don’t want git, read below on how to get the source without git.
-This is an example for installing git on Debian/Ubuntu:
+You can install Git for easily keeping your copy up to date.
+If you don’t want Git, read below on how to get the source without Git.
+This is an example for installing Git on Debian/Ubuntu:
- $ sudo apt-get install git
+ sudo apt install git
For Fedora users:
- $ sudo dnf install git
+ sudo dnf install git
-Download source (this is the URL to the latest of source repository, which might not work at all times) using 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
+ git clone --depth 1 https://github.com/minetest/minetest.git
+ cd minetest
-Download minetest_game (otherwise only the "Minimal 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
+ git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game
-Download source, without using git:
+Download source, without using Git:
- $ wget https://github.com/minetest/minetest/archive/master.tar.gz
- $ tar xf master.tar.gz
- $ cd minetest-master
+ wget https://github.com/minetest/minetest/archive/master.tar.gz
+ 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
- $ tar xf master.tar.gz
- $ mv minetest_game-master minetest_game
- $ cd ..
+ cd games/
+ wget https://github.com/minetest/minetest_game/archive/master.tar.gz
+ tar xf master.tar.gz
+ mv minetest_game-master minetest_game
+ cd ..
#### Build
Build a version that runs directly from the source directory:
- $ cmake . -DRUN_IN_PLACE=TRUE
- $ make -j <number of processors>
+ cmake . -DRUN_IN_PLACE=TRUE
+ make -j$(nproc)
Run it:
- $ ./bin/minetest
+ ./bin/minetest
-- Use cmake . -LH to see all CMake options and their current state
+- Use `cmake . -LH` to see all CMake options and their current state.
- If you want to install it system-wide (or are making a distribution package),
- you will want to use -DRUN_IN_PLACE=FALSE
-- You can build a bare server by specifying -DBUILD_SERVER=TRUE
-- You can disable the client build by specifying -DBUILD_CLIENT=FALSE
-- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
- - Debug build is slower, but gives much more useful output in a debugger
-- If you build a bare server, you don't need to have Irrlicht installed.
- In that case use -DIRRLICHT_SOURCE_DIR=/the/irrlicht/source
+ you will want to use `-DRUN_IN_PLACE=FALSE`.
+- You can build a bare server by specifying `-DBUILD_SERVER=TRUE`.
+- You can disable the client build by specifying `-DBUILD_CLIENT=FALSE`.
+- You can select between Release and Debug build by `-DCMAKE_BUILD_TYPE=<Debug or Release>`.
+ - Debug build is slower, but gives much more useful output in a debugger.
+- If you build a bare server you don't need to have Irrlicht installed.
+ - In that case use `-DIRRLICHT_SOURCE_DIR=/the/irrlicht/source`.
### CMake options
-General options:
-
- BUILD_CLIENT - Build Minetest client
- BUILD_SERVER - Build Minetest server
- CMAKE_BUILD_TYPE - Type of build (Release vs. Debug)
- Release - Release build
- Debug - Debug build
- SemiDebug - Partially optimized debug build
- RelWithDebInfo - Release build with Debug information
- MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible
- ENABLE_CURL - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
- ENABLE_CURSES - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
- ENABLE_FREETYPE - Build with FreeType2; Allows using TTF fonts
- ENABLE_GETTEXT - Build with Gettext; Allows using translations
- ENABLE_GLES - Search for Open GLES headers & libraries and use them
- ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend
- ENABLE_POSTGRESQL - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended)
- ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend
- ENABLE_SPATIAL - Build with LibSpatial; Speeds up AreaStores
- ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds
- ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua)
- ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp)
- ENABLE_SYSTEM_JSONCPP - Use JsonCPP from system
- RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory)
- USE_GPROF - Enable profiling using GProf
- VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)
+General options and their default values:
+
+ BUILD_CLIENT=TRUE - Build Minetest client
+ BUILD_SERVER=FALSE - Build Minetest server
+ BUILD_UNITTESTS=TRUE - Build unittest sources
+ CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug)
+ Release - Release build
+ Debug - Debug build
+ SemiDebug - Partially optimized debug build
+ RelWithDebInfo - Release build with debug information
+ MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible
+ ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
+ ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
+ ENABLE_FREETYPE=ON - Build with FreeType2; Allows using TTF fonts
+ ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations
+ ENABLE_GLES=OFF - Build for OpenGL ES instead of OpenGL (requires support by Irrlicht)
+ ENABLE_LEVELDB=ON - Build with LevelDB; Enables use of LevelDB map backend
+ ENABLE_POSTGRESQL=ON - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended)
+ ENABLE_REDIS=ON - Build with libhiredis; Enables use of Redis map backend
+ ENABLE_SPATIAL=ON - Build with LibSpatial; Speeds up AreaStores
+ ENABLE_SOUND=ON - Build with OpenAL, libogg & libvorbis; in-game sounds
+ ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua)
+ ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default)
+ ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp)
+ ENABLE_SYSTEM_JSONCPP=OFF - Use JsonCPP from system
+ OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference
+ RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory)
+ USE_GPROF=FALSE - Enable profiling using GProf
+ VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)
Library specific options:
-
+
BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located
BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so
CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll
CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib
EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h
EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so
- FREETYPE_INCLUDE_DIR_freetype2 - Only if building with Freetype2; directory that contains an freetype directory with files such as ftimage.h in it
- FREETYPE_INCLUDE_DIR_ft2build - Only if building with Freetype2; directory that contains ft2build.h
- FREETYPE_LIBRARY - Only if building with Freetype2; path to libfreetype.a/libfreetype.so/freetype.lib
- FREETYPE_DLL - Only if building with Freetype2 on Windows; path to libfreetype.dll
- GETTEXT_DLL - Only when building with Gettext on Windows; path to libintl3.dll
- GETTEXT_ICONV_DLL - Only when building with Gettext on Windows; path to libiconv2.dll
- 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_MSGFMT - Only when building with Gettext; path to msgfmt/msgfmt.exe
+ FREETYPE_INCLUDE_DIR_freetype2 - Only if building with FreeType 2; directory that contains an freetype directory with files such as ftimage.h in it
+ FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h
+ FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib
+ FREETYPE_DLL - Only if building with FreeType 2 on Windows; path to libfreetype.dll
+ GETTEXT_DLL - Only when building with gettext on Windows; path to libintl3.dll
+ GETTEXT_ICONV_DLL - Only when building with gettext on Windows; path to libiconv2.dll
+ 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_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe
IRRLICHT_DLL - Only on Windows; path to Irrlicht.dll
IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h
IRRLICHT_LIBRARY - Path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a/Irrlicht.lib
LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a
LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll
PostgreSQL_INCLUDE_DIR - Only when building with PostgreSQL; directory that contains libpq-fe.h
- POSTGRESQL_LIBRARY - Only when building with PostgreSQL; path to libpq.a/libpq.so
+ PostgreSQL_LIBRARY - Only when building with PostgreSQL; path to libpq.a/libpq.so/libpq.lib
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
VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a
XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so
ZLIB_DLL - Only on Windows; path to zlib1.dll
- ZLIBWAPI_DLL - Only on Windows; path to zlibwapi.dll
ZLIB_INCLUDE_DIR - Directory that contains zlib.h
- ZLIB_LIBRARY - Path to libz.a/libz.so/zlibwapi.lib
+ ZLIB_LIBRARY - Path to libz.a/libz.so/zlib.lib
### Compiling on Windows
-* This section is outdated. In addition to what is described here:
- * In addition to minetest, you need to download minetest_game.
- * If you wish to have sound support, you need libogg, libvorbis and libopenal
-
-* You need:
- * CMake:
- http://www.cmake.org/cmake/resources/software.html
- * A compiler
- * MinGW: http://www.mingw.org/
- * or Visual Studio: http://msdn.microsoft.com/en-us/vstudio/default
- * Irrlicht SDK 1.7:
- http://irrlicht.sourceforge.net/downloads.html
- * Zlib headers (zlib125.zip)
- http://www.winimage.com/zLibDll/index.html
- * Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip):
- http://www.winimage.com/zLibDll/index.html
- * SQLite3 headers and library
- https://www.sqlite.org/download.html
- * Optional: gettext library and tools:
- http://gnuwin32.sourceforge.net/downlinks/gettext.php
- * This is used for other UI languages. Feel free to leave it out.
- * And, of course, Minetest:
- http://minetest.net/download
-* Steps:
- * Select a directory called DIR hereafter in which you will operate.
- * Make sure you have CMake and a compiler installed.
- * Download all the other stuff to DIR and extract them into there.
- ("extract here", not "extract to packagename/")
- * NOTE: zlib125dll.zip needs to be extracted into zlib125dll
- * NOTE: You need to extract sqlite3.h & sqlite3ext.h from sqlite3 source
- and sqlite3.dll & sqlite3.def from sqlite3 precompiled binaries
- into "sqlite3" directory, and generate sqlite3.lib using command
- "LIB /DEF:sqlite3.def /OUT:sqlite3.lib"
- * All those packages contain a nice base directory in them, which
- should end up being the direct subdirectories of DIR.
- * You will end up with a directory structure like this (+=dir, -=file):
- -----------------
- + DIR
- * zlib-1.2.5.tar.gz
- * zlib125dll.zip
- * irrlicht-1.8.3.zip
- * sqlite-amalgamation-3130000.zip (SQLite3 headers)
- * sqlite-dll-win32-x86-3130000.zip (SQLite3 library for 32bit system)
- * 110214175330.zip (or whatever, this is the minetest source)
- + zlib-1.2.5
- * zlib.h
- + win32
- ...
- + zlib125dll
- * readme.txt
- + dll32
- ...
- + irrlicht-1.8.3
- + lib
- + include
- ...
- + sqlite3
- sqlite3.h
- sqlite3ext.h
- sqlite3.lib
- sqlite3.dll
- + gettext (optional)
- +bin
- +include
- +lib
- + minetest
- + src
- + doc
- * CMakeLists.txt
- ...
- -----------------
- * Start up the CMake GUI
- * Select "Browse Source..." and select DIR/minetest
- * Now, if using MSVC:
- * Select "Browse Build..." and select DIR/minetest-build
- * Else if using MinGW:
- * Select "Browse Build..." and select DIR/minetest
- * Select "Configure"
- * Select your compiler
- * It will warn about missing stuff, ignore that at this point. (later don't)
- * Make sure the configuration is as follows
- (note that the versions may differ for you):
-
- BUILD_CLIENT [X]
- BUILD_SERVER [ ]
- CMAKE_BUILD_TYPE Release
- CMAKE_INSTALL_PREFIX DIR/minetest-install
- IRRLICHT_SOURCE_DIR DIR/irrlicht-1.8.3
- RUN_IN_PLACE [X]
- WARN_ALL [ ]
- ZLIB_DLL DIR/zlib125dll/dll32/zlibwapi.dll
- ZLIB_INCLUDE_DIR DIR/zlib-1.2.5
- ZLIB_LIBRARIES DIR/zlib125dll/dll32/zlibwapi.lib
- GETTEXT_BIN_DIR DIR/gettext/bin
- GETTEXT_INCLUDE_DIR DIR/gettext/include
- GETTEXT_LIBRARIES DIR/gettext/lib/intl.lib
- GETTEXT_MSGFMT DIR/gettext/bin/msgfmt
-
- * If CMake complains it couldn't find SQLITE3, choose "Advanced" box on the
- right top corner, then specify the location of SQLITE3_INCLUDE_DIR and
- SQLITE3_LIBRARY manually.
- * If you want to build 64-bit minetest, you will need to build 64-bit version
- of irrlicht engine manually, as only 32-bit pre-built library is provided.
- * Hit "Configure"
- * Hit "Configure" once again 8)
- * If something is still coloured red, you have a problem.
- * Hit "Generate"
- If using MSVC:
- * Open the generated minetest.sln
- * The project defaults to the "Debug" configuration. Make very sure to
- select "Release", unless you want to debug some stuff (it's slower
- and might not even work at all)
- * Build the ALL_BUILD project
- * Build the INSTALL project
- * You should now have a working game with the executable in
- DIR/minetest-install/bin/minetest.exe
- * Additionally you may create a zip package by building the PACKAGE
- project.
- If using MinGW:
- * Using the command line, browse to the build directory and run 'make'
- (or mingw32-make or whatever it happens to be)
- * You may need to copy some of the downloaded DLLs into bin/, see what
- running the produced executable tells you it doesn't have.
- * You should now have a working game with the executable in
- DIR/minetest/bin/minetest.exe
-
-### Bat script to build Windows releases of Minetest
-
-This is how we build Windows releases.
-
- set sourcedir=%CD%
- set installpath="C:\tmp\minetest_install"
- set irrlichtpath="C:\tmp\irrlicht-1.7.2"
-
- set builddir=%sourcedir%\bvc10
- mkdir %builddir%
- pushd %builddir%
- cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=TRUE -DCMAKE_INSTALL_PREFIX=%installpath%
- if %errorlevel% neq 0 goto fail
- "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release
- if %errorlevel% neq 0 goto fail
- "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" INSTALL.vcxproj /p:Configuration=Release
- if %errorlevel% neq 0 goto fail
- "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" PACKAGE.vcxproj /p:Configuration=Release
- if %errorlevel% neq 0 goto fail
- popd
- echo Finished.
- exit /b 0
-
- :fail
- popd
- echo Failed.
- exit /b 1
+### Requirements
-Version scheme
---------------
+- [Visual Studio 2015 or newer](https://visualstudio.microsoft.com)
+- [CMake](https://cmake.org/download/)
+- [vcpkg](https://github.com/Microsoft/vcpkg)
+- [Git](https://git-scm.com/downloads)
+
+### Compiling and installing the dependencies
+
+It is highly recommended to use vcpkg as package manager.
+
+#### a) Using vcpkg to install dependencies
+
+After you successfully built vcpkg you can easily install the required libraries:
+```powershell
+vcpkg install irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows
+```
+
+- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store.
+- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound.
+- `freetype` is optional, it allows true-type font rendering.
+- `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter.
+- `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled
+
+There are other optional libraries, but they are not tested if they can build and link correctly.
+
+Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-windows`.
+
+#### b) Compile the dependencies on your own
+
+This is outdated and not recommended. Follow the instructions on https://dev.minetest.net/Build_Win32_Minetest_including_all_required_libraries#VS2012_Build
-Minetest partially follows semver (major.minor.patch).
+### Compile Minetest
-Since 5.0.0-dev and 0.4.17-dev, the dev notation refers to the next release,
-ie: 5.0.0-dev is the development version leading to 5.0.0.
+#### a) Using the vcpkg toolchain and CMake GUI
+1. Start up the CMake GUI
+2. Select **Browse Source...** and select DIR/minetest
+3. Select **Browse Build...** and select DIR/minetest-build
+4. Select **Configure**
+5. Choose the right visual Studio version and target platform. It has to match the version of the installed dependencies
+6. Choose **Specify toolchain file for cross-compiling**
+7. Click **Next**
+8. Select the vcpkg toolchain file e.g. `D:/vcpkg/scripts/buildsystems/vcpkg.cmake`
+9. Click Finish
+10. Wait until cmake have generated the cash file
+11. If there are any errors, solve them and hit **Configure**
+12. Click **Generate**
+13. Click **Open Project**
+14. Compile Minetest inside Visual studio.
-Prior to that, we used oldversion-dev.
+#### b) Using the vcpkg toolchain and the commandline
-Semver was adopted after 0.4.X series. Before that we used 0.major.minor scheme.
+Run the following script in PowerShell:
+
+```powershell
+cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF -DENABLE_SYSTEM_JSONCPP=ON
+cmake --build . --config Release
+```
+Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct.
+
+#### c) Using your own compiled libraries
+
+**This is outdated and not recommended**
+
+Follow the instructions on https://dev.minetest.net/Build_Win32_Minetest_including_all_required_libraries#VS2012_Build
+
+### Windows Installer using WiX Toolset
+
+Requirements:
+* [Visual Studio 2017](https://visualstudio.microsoft.com/)
+* [WiX Toolset](https://wixtoolset.org/)
+
+In the Visual Studio 2017 Installer select **Optional Features -> WiX Toolset**.
+
+Build the binaries as described above, but make sure you unselect `RUN_IN_PLACE`.
+
+Open the generated project file with Visual Studio. Right-click **Package** and choose **Generate**.
+It may take some minutes to generate the installer.
+
+
+Docker
+------
+We provide Minetest server Docker images using the GitLab mirror registry.
+
+Images are built on each commit and available using the following tag scheme:
+
+* `registry.gitlab.com/minetest/minetest/server:latest` (latest build)
+* `registry.gitlab.com/minetest/minetest/server:<branch/tag>` (current branch or current tag)
+* `registry.gitlab.com/minetest/minetest/server:<commit-id>` (current commit id)
+
+If you want to test it on a Docker server you can easily run:
+
+ sudo docker run registry.gitlab.com/minetest/minetest/server:<docker tag>
+
+If you want to use it in a production environment you should use volumes bound to the Docker host
+to persist data and modify the configuration:
+
+ sudo docker create -v /home/minetest/data/:/var/lib/minetest/ -v /home/minetest/conf/:/etc/minetest/ registry.gitlab.com/minetest/minetest/server:master
+
+Data will be written to `/home/minetest/data` on the host, and configuration will be read from `/home/minetest/conf/minetest.conf`.
+
+**Note:** If you don't understand the previous commands please read the official Docker documentation before use.
+
+You can also host your Minetest server inside a Kubernetes cluster. See our example implementation in [`misc/kubernetes.yml`](misc/kubernetes.yml).
+
+
+Version scheme
+--------------
+We use `major.minor.patch` since 5.0.0-dev. Prior to that we used `0.major.minor`.
+
+- Major is incremented when the release contains breaking changes, all other
+numbers are set to 0.
+- Minor is incremented when the release contains new non-breaking features,
+patch is set to 0.
+- Patch is incremented when the release only contains bugfixes and very
+minor/trivial features considered necessary.
+
+Since 5.0.0-dev and 0.4.17-dev, the dev notation refers to the next release,
+i.e.: 5.0.0-dev is the development version leading to 5.0.0.
+Prior to that we used `previous_version-dev`.