Merge remote-tracking branch 'upstream/master'

This commit is contained in:
poet.nohit 2015-03-30 15:21:21 -06:00
commit 524659cab6
78 changed files with 2129 additions and 1859 deletions

View File

@ -3,9 +3,9 @@ compiler:
- gcc - gcc
- clang - clang
env: env:
- WINDOWS=32 - PLATFORM=Win32
- WINDOWS=64 - PLATFORM=Win64
- WINDOWS=no - PLATFORM=Linux
before_install: ./util/travis/before_install.sh before_install: ./util/travis/before_install.sh
script: ./util/travis/script.sh script: ./util/travis/script.sh
notifications: notifications:
@ -13,7 +13,7 @@ notifications:
matrix: matrix:
fast_finish: true fast_finish: true
exclude: exclude:
- env: WINDOWS=32 - env: PLATFORM=Win32
compiler: clang compiler: clang
- env: WINDOWS=64 - env: PLATFORM=Win64
compiler: clang compiler: clang

View File

@ -1,69 +1,62 @@
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.6)
if(${CMAKE_VERSION} STREQUAL "2.8.2") if(${CMAKE_VERSION} STREQUAL "2.8.2")
# bug http://vtk.org/Bug/view.php?id=11020 # Bug http://vtk.org/Bug/view.php?id=11020
message( WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!") message(WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!")
endif(${CMAKE_VERSION} STREQUAL "2.8.2") endif()
# This can be read from ${PROJECT_NAME} after project() is called # This can be read from ${PROJECT_NAME} after project() is called
project(minetest) project(Minetest)
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Also remember to set PROTOCOL_VERSION in clientserver.h when releasing # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 0) set(VERSION_MAJOR 0)
set(VERSION_MINOR 4) set(VERSION_MINOR 4)
set(VERSION_PATCH 12) set(VERSION_PATCH 12)
set(VERSION_PATCH_ORIG ${VERSION_PATCH}) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
if(VERSION_EXTRA) if(VERSION_EXTRA)
set(VERSION_PATCH ${VERSION_PATCH}-${VERSION_EXTRA}) set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA})
else() else()
# Comment the following line during release # Comment the following line during release
set(VERSION_PATCH ${VERSION_PATCH}-dev) set(VERSION_STRING "${VERSION_STRING}-dev")
endif() endif()
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
MESSAGE(STATUS "*** Will build version ${VERSION_STRING} ***") message(STATUS "*** Will build version ${VERSION_STRING} ***")
# Configuration options # Configuration options
set(DEFAULT_RUN_IN_PLACE FALSE)
if(WIN32) if(WIN32)
set(RUN_IN_PLACE 1 CACHE BOOL "Run directly in source directory structure") set(DEFAULT_RUN_IN_PLACE TRUE)
else()
set(RUN_IN_PLACE 0 CACHE BOOL "Run directly in source directory structure")
endif() endif()
set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL
"Run directly in source directory structure")
# RUN_IN_PLACE is exported as a #define value, ensure it's 1/0 instead of ON/OFF
if(RUN_IN_PLACE)
set(RUN_IN_PLACE 1)
else()
set(RUN_IN_PLACE 0)
endif()
set(BUILD_CLIENT 1 CACHE BOOL "Build client") set(BUILD_CLIENT TRUE CACHE BOOL "Build client")
if(WIN32 OR APPLE) set(BUILD_SERVER FALSE CACHE BOOL "Build server")
set(BUILD_SERVER 0 CACHE BOOL "Build server")
else()
set(BUILD_SERVER 1 CACHE BOOL "Build server")
endif()
set(WARN_ALL 1 CACHE BOOL "Enable -Wall for Release build")
set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
# Default to release # Default to release
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE)
endif() endif()
# Included stuff # Included stuff
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(${CMAKE_SOURCE_DIR}/cmake/Modules/misc.cmake)
# This is done here so that relative search paths are more reasnable # This is done here so that relative search paths are more reasnable
find_package(Irrlicht) find_package(Irrlicht)
#
# Installation # Installation
#
if(WIN32) if(WIN32)
set(SHAREDIR ".") set(SHAREDIR ".")
@ -72,11 +65,11 @@ if(WIN32)
set(EXAMPLE_CONF_DIR ".") set(EXAMPLE_CONF_DIR ".")
set(LOCALEDIR "locale") set(LOCALEDIR "locale")
elseif(APPLE) elseif(APPLE)
set(BUNDLE_NAME ${PROJECT_NAME}.app) set(BUNDLE_NAME ${PROJECT_NAME_LOWER}.app)
set(BUNDLE_PATH "${BUNDLE_NAME}") set(BUNDLE_PATH "${BUNDLE_NAME}")
set(BINDIR ${BUNDLE_NAME}/Contents/MacOS) set(BINDIR ${BUNDLE_NAME}/Contents/MacOS)
set(SHAREDIR ${BUNDLE_NAME}/Contents/Resources) set(SHAREDIR ${BUNDLE_NAME}/Contents/Resources)
set(DOCDIR "${SHAREDIR}/${PROJECT_NAME}") set(DOCDIR "${SHAREDIR}/${PROJECT_NAME_LOWER}")
set(EXAMPLE_CONF_DIR ${DOCDIR}) set(EXAMPLE_CONF_DIR ${DOCDIR})
set(LOCALEDIR "${SHAREDIR}/locale") set(LOCALEDIR "${SHAREDIR}/locale")
elseif(UNIX) # Linux, BSD etc elseif(UNIX) # Linux, BSD etc
@ -91,15 +84,15 @@ elseif(UNIX) # Linux, BSD etc
set(ICONDIR "unix/icons") set(ICONDIR "unix/icons")
set(LOCALEDIR "locale") set(LOCALEDIR "locale")
else() else()
set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}") set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME_LOWER}")
set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin") set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}") set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME_LOWER}")
set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man") set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man")
set(EXAMPLE_CONF_DIR ${DOCDIR}) set(EXAMPLE_CONF_DIR ${DOCDIR})
set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications") set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/appdata") set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/appdata")
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons") set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale") set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME_LOWER}/locale")
endif() endif()
endif() endif()
@ -108,42 +101,50 @@ if(NOT CUSTOM_SHAREDIR STREQUAL "")
set(SHAREDIR "${CUSTOM_SHAREDIR}") set(SHAREDIR "${CUSTOM_SHAREDIR}")
message(STATUS "Using SHAREDIR=${SHAREDIR}") message(STATUS "Using SHAREDIR=${SHAREDIR}")
endif() endif()
set(CUSTOM_BINDIR "" CACHE STRING "Directory to install binaries into") set(CUSTOM_BINDIR "" CACHE STRING "Directory to install binaries into")
if(NOT CUSTOM_BINDIR STREQUAL "") if(NOT CUSTOM_BINDIR STREQUAL "")
set(BINDIR "${CUSTOM_BINDIR}") set(BINDIR "${CUSTOM_BINDIR}")
message(STATUS "Using BINDIR=${BINDIR}") message(STATUS "Using BINDIR=${BINDIR}")
endif() endif()
set(CUSTOM_DOCDIR "" CACHE STRING "Directory to install documentation into") set(CUSTOM_DOCDIR "" CACHE STRING "Directory to install documentation into")
if(NOT CUSTOM_DOCDIR STREQUAL "") if(NOT CUSTOM_DOCDIR STREQUAL "")
set(DOCDIR "${CUSTOM_DOCDIR}") set(DOCDIR "${CUSTOM_DOCDIR}")
message(STATUS "Using DOCDIR=${DOCDIR}") message(STATUS "Using DOCDIR=${DOCDIR}")
endif() endif()
set(CUSTOM_MANDIR "" CACHE STRING "Directory to install manpages into") set(CUSTOM_MANDIR "" CACHE STRING "Directory to install manpages into")
if(NOT CUSTOM_MANDIR STREQUAL "") if(NOT CUSTOM_MANDIR STREQUAL "")
set(MANDIR "${CUSTOM_MANDIR}") set(MANDIR "${CUSTOM_MANDIR}")
message(STATUS "Using MANDIR=${MANDIR}") message(STATUS "Using MANDIR=${MANDIR}")
endif() endif()
set(CUSTOM_EXAMPLE_CONF_DIR "" CACHE STRING "Directory to install example config file into") set(CUSTOM_EXAMPLE_CONF_DIR "" CACHE STRING "Directory to install example config file into")
if(NOT CUSTOM_EXAMPLE_CONF_DIR STREQUAL "") if(NOT CUSTOM_EXAMPLE_CONF_DIR STREQUAL "")
set(EXAMPLE_CONF_DIR "${CUSTOM_EXAMPLE_CONF_DIR}") set(EXAMPLE_CONF_DIR "${CUSTOM_EXAMPLE_CONF_DIR}")
message(STATUS "Using EXAMPLE_CONF_DIR=${EXAMPLE_CONF_DIR}") message(STATUS "Using EXAMPLE_CONF_DIR=${EXAMPLE_CONF_DIR}")
endif() endif()
set(CUSTOM_XDG_APPS_DIR "" CACHE STRING "Directory to install .desktop files into") set(CUSTOM_XDG_APPS_DIR "" CACHE STRING "Directory to install .desktop files into")
if(NOT CUSTOM_XDG_APPS_DIR STREQUAL "") if(NOT CUSTOM_XDG_APPS_DIR STREQUAL "")
set(XDG_APPS_DIR "${CUSTOM_XDG_APPS_DIR}") set(XDG_APPS_DIR "${CUSTOM_XDG_APPS_DIR}")
message(STATUS "Using XDG_APPS_DIR=${XDG_APPS_DIR}") message(STATUS "Using XDG_APPS_DIR=${XDG_APPS_DIR}")
endif() endif()
set(CUSTOM_ICONDIR "" CACHE STRING "Directory to install icons into") set(CUSTOM_ICONDIR "" CACHE STRING "Directory to install icons into")
if(NOT CUSTOM_ICONDIR STREQUAL "") if(NOT CUSTOM_ICONDIR STREQUAL "")
set(ICONDIR "${CUSTOM_ICONDIR}") set(ICONDIR "${CUSTOM_ICONDIR}")
message(STATUS "Using ICONDIR=${ICONDIR}") message(STATUS "Using ICONDIR=${ICONDIR}")
endif() endif()
set(CUSTOM_LOCALEDIR "" CACHE STRING "Directory to install l10n files into") set(CUSTOM_LOCALEDIR "" CACHE STRING "Directory to install l10n files into")
if(NOT CUSTOM_LOCALEDIR STREQUAL "") if(NOT CUSTOM_LOCALEDIR STREQUAL "")
set(LOCALEDIR "${CUSTOM_LOCALEDIR}") set(LOCALEDIR "${CUSTOM_LOCALEDIR}")
message(STATUS "Using LOCALEDIR=${LOCALEDIR}") message(STATUS "Using LOCALEDIR=${LOCALEDIR}")
endif() endif()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/builtin" DESTINATION "${SHAREDIR}") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/builtin" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client" DESTINATION "${SHAREDIR}") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games")
@ -183,13 +184,13 @@ if(APPLE)
install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents") install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents")
endif() endif()
#
# Subdirectories # Subdirectories
# Be sure to add all relevant definitions above this # Be sure to add all relevant definitions above this
#
add_subdirectory(src) add_subdirectory(src)
# CPack # CPack
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An InfiniMiner/Minecraft inspired game") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An InfiniMiner/Minecraft inspired game")
@ -202,9 +203,9 @@ set(CPACK_PACKAGE_CONTACT "Perttu Ahola <celeron55@gmail.com>")
if(WIN32) if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64") set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64")
else(CMAKE_SIZEOF_VOID_P EQUAL 8) else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32") set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32")
endif(CMAKE_SIZEOF_VOID_P EQUAL 8) endif()
set(CPACK_GENERATOR ZIP) set(CPACK_GENERATOR ZIP)
elseif(APPLE) elseif(APPLE)
@ -219,14 +220,16 @@ endif()
include(CPack) include(CPack)
# Add a target to generate API documentation with Doxygen # Add a target to generate API documentation with Doxygen
find_package(Doxygen) find_package(Doxygen)
if(DOXYGEN_FOUND) if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY)
add_custom_target(doc add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc
COMMENT "Generating API documentation with Doxygen" VERBATIM COMMENT "Generating API documentation with Doxygen" VERBATIM
) )
endif(DOXYGEN_FOUND) endif()

View File

@ -130,18 +130,21 @@ $ mv minetest_game-master minetest_game
$ cd .. $ cd ..
Build a version that runs directly from the source directory: Build a version that runs directly from the source directory:
$ cmake . -DRUN_IN_PLACE=1 $ cmake . -DRUN_IN_PLACE=TRUE
$ make -j2 $ make -j <number of processors>
Run it: 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=0 - If you want to install it system-wide (or are making a distribution package),
- You can build a bare server or a bare client by specifying -DBUILD_CLIENT=0 or -DBUILD_SERVER=0 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> - 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 - 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 - 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 CMake options
------------- -------------
@ -152,16 +155,17 @@ BUILD_SERVER - Build Minetest server
CMAKE_BUILD_TYPE - Type of build (Release vs. Debug) CMAKE_BUILD_TYPE - Type of build (Release vs. Debug)
Release - Release build Release - Release build
Debug - Debug build Debug - Debug build
SemiDebug - Partially optimized debug build
RelWithDebInfo - Release build with Debug information RelWithDebInfo - Release build with Debug information
MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible 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_CURL - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
ENABLE_FREETYPE - Build with Freetype2; Allows using TTF fonts ENABLE_FREETYPE - Build with FreeType2; Allows using TTF fonts
ENABLE_GETTEXT - Build with Gettext; Allows using translations ENABLE_GETTEXT - Build with Gettext; Allows using translations
ENABLE_GLES - Search for Open GLES headers & libraries and use them ENABLE_GLES - Search for Open GLES headers & libraries and use them
ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB, which is much faster than SQLite, as map backend ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (faster than SQLite3)
ENABLE_REDIS - Build with libhiredis; Enables use of redis map backend ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend
ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds
DISABLE_LUAJIT - Do not search for LuaJIT headers & library ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua)
RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory) RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory)
USE_GPROF - Enable profiling using GProf USE_GPROF - Enable profiling using GProf
VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)
@ -174,7 +178,7 @@ CURL_DLL - Only if building with cURL on Windows; path to
CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located
CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib 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_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h
EGL_egl_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so 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_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_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_LIBRARY - Only if building with Freetype2; path to libfreetype.a/libfreetype.so/freetype.lib
@ -190,8 +194,8 @@ IRRLICHT_LIBRARY - path to libIrrlicht.a/libIrrlicht.so/libIrrlic
LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h
LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a 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 LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll
REDIS_INCLUDE_DIR - Only when building with redis support; directory that contains hiredis.h REDIS_INCLUDE_DIR - Only when building with Redis support; directory that contains hiredis.h
REDIS_LIBRARY - Only when building with redis support; path to libhiredis.a/libhiredis.so REDIS_LIBRARY - Only when building with Redis support; path to libhiredis.a/libhiredis.so
LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located 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 LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so
MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll
@ -202,7 +206,7 @@ OPENAL_DLL - Only if building with sound on Windows; path t
OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located
OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib
OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h
OPENGLES2_gl_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so
SQLITE3_INCLUDE_DIR - Only if you want to use SQLite from your OS; directory that contains sqlite3.h SQLITE3_INCLUDE_DIR - Only if you want to use SQLite from your OS; directory that contains sqlite3.h
SQLITE3_LIBRARY - Only if you want to use the SQLite from your OS; path to libsqlite3.a/libsqlite3.so SQLITE3_LIBRARY - Only if you want to use the SQLite from your OS; path to libsqlite3.a/libsqlite3.so
VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll
@ -336,7 +340,7 @@ set irrlichtpath="C:\tmp\irrlicht-1.7.2"
set builddir=%sourcedir%\bvc10 set builddir=%sourcedir%\bvc10
mkdir %builddir% mkdir %builddir%
pushd %builddir% pushd %builddir%
cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=1 -DCMAKE_INSTALL_PREFIX=%installpath% cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=TRUE -DCMAKE_INSTALL_PREFIX=%installpath%
if %errorlevel% neq 0 goto fail if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail if %errorlevel% neq 0 goto fail

View File

@ -717,11 +717,11 @@ clean_all :
clean_openal clean_ogg clean_manifest; \ clean_openal clean_ogg clean_manifest; \
sleep 1; \ sleep 1; \
$(RM) -r gen libs obj deps bin Debug and_env $(RM) -r gen libs obj deps bin Debug and_env
$(ROOT)/jni/src/android_version.h : $(ROOT)/jni/src/android_version.h :
@echo "#define STR_HELPER(x) #x" \ @echo "#ifndef ANDROID_MT_VERSION_H" \
>${ROOT}/jni/src/android_version.h; \ >${ROOT}/jni/src/android_version.h; \
echo "#define STR(x) STR_HELPER(x)" \ echo "#define ANDROID_MT_VERSION_H" \
>> ${ROOT}/jni/src/android_version.h; \ >> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \ echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \ grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
@ -732,17 +732,16 @@ $(ROOT)/jni/src/android_version.h :
echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \ echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \ grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \ >> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_PATCH_ORIG $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \
export GITHASH=$$(git rev-parse --short=8 HEAD); \ export GITHASH=$$(git rev-parse --short=8 HEAD); \
export GITTAG=$$(git describe --abbrev=0 --tags); \ export GITTAG=$$(git describe --abbrev=0 --tags); \
echo "#define CMAKE_VERSION_GITHASH \"$$GITTAG-$$GITHASH-Android\"" \ echo "#define VERSION_GITHASH \"$$GITTAG-$$GITHASH-Android\"" \
>> ${ROOT}/jni/src/android_version.h; \ >> ${ROOT}/jni/src/android_version.h; \
echo "#define CMAKE_VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\ echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\
\".\"STR(VERSION_PATCH)" \ \".\"STR(VERSION_PATCH)" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#endif" \
>> ${ROOT}/jni/src/android_version.h; >> ${ROOT}/jni/src/android_version.h;
manifest : manifest :
@VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \ grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \

View File

@ -40,6 +40,18 @@ local function render_client_count(n)
end end
end end
local function configure_selected_world_params(idx)
local worldconfig = modmgr.get_worldconfig(
menudata.worldlist:get_list()[idx].path)
if worldconfig.creative_mode ~= nil then
core.setting_set("creative_mode", worldconfig.creative_mode)
end
if worldconfig.enable_damage ~= nil then
core.setting_set("enable_damage", worldconfig.enable_damage)
end
end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
function image_column(tooltip, flagname) function image_column(tooltip, flagname)
return "image," .. return "image," ..
@ -197,15 +209,7 @@ function menu_handle_key_up_down(fields,textlist,settingname)
core.setting_set(settingname, core.setting_set(settingname,
menudata.worldlist:get_raw_index(newidx)) menudata.worldlist:get_raw_index(newidx))
local worldconfig = modmgr.get_worldconfig( configure_selected_world_params(newidx)
menudata.worldlist:get_list()[newidx].path)
if worldconfig.creative_mode ~= nil then
core.setting_set("creative_mode", worldconfig.creative_mode)
end
if worldconfig.enable_damage ~= nil then
core.setting_set("enable_damage", worldconfig.enable_damage)
end
end end
return true return true
end end
@ -217,15 +221,8 @@ function menu_handle_key_up_down(fields,textlist,settingname)
local newidx = oldidx + 1 local newidx = oldidx + 1
core.setting_set(settingname, core.setting_set(settingname,
menudata.worldlist:get_raw_index(newidx)) menudata.worldlist:get_raw_index(newidx))
local worldconfig = modmgr.get_worldconfig(
menudata.worldlist:get_list()[newidx].path)
if worldconfig.creative_mode ~= nil then configure_selected_world_params(newidx)
core.setting_set("creative_mode", worldconfig.creative_mode)
end
if worldconfig.enable_damage ~= nil then
core.setting_set("enable_damage", worldconfig.enable_damage)
end
end end
return true return true

View File

@ -139,11 +139,8 @@ local function init_globals()
tv_main:add(tab_credits) tv_main:add(tab_credits)
tv_main:set_global_event_handler(main_event_handler) tv_main:set_global_event_handler(main_event_handler)
if PLATFORM ~= "Android" then
tv_main:set_fixed_size(true) tv_main:set_fixed_size(false)
else
tv_main:set_fixed_size(false)
end
if not (PLATFORM == "Android") then if not (PLATFORM == "Android") then
tv_main:set_tab(core.setting_get("maintab_LAST")) tv_main:set_tab(core.setting_get("maintab_LAST"))

View File

@ -39,10 +39,15 @@ tab_credits = {
"Nathanael Courant (Nore/Novatux) <nore@mesecons.net>,".. "Nathanael Courant (Nore/Novatux) <nore@mesecons.net>,"..
"BlockMen,".. "BlockMen,"..
"Craig Robbins (Zeno),".. "Craig Robbins (Zeno),"..
"Loic Blot (nerzhul/nrz),"..
"paramat,"..
",".. ","..
"#FFFF00" .. fgettext("Active Contributors") .. "," .. "#FFFF00" .. fgettext("Active Contributors") .. "," ..
"SmallJoker <mk939@ymail.com>," ..
"est31 <MTest31@outlook.com>," ..
"gregorycu,"..
"Andrew Ward (rubenwardy) <rubenwardy@gmail.com>," ..
"TriBlade9 <triblade9@mail.com>,".. "TriBlade9 <triblade9@mail.com>,"..
"SmallJoker <mk939@ymail.com>,"..
"Zefram <zefram@fysh.org>,".. "Zefram <zefram@fysh.org>,"..
"," .. "," ..
"#FFFF00" .. fgettext("Previous Contributors") .. "," .. "#FFFF00" .. fgettext("Previous Contributors") .. "," ..

View File

@ -1,47 +1,19 @@
# - Find curl mark_as_advanced(CURL_LIBRARY CURL_INCLUDE_DIR)
# Find the native CURL headers and libraries.
#
# CURL_INCLUDE_DIR - where to find curl/curl.h, etc.
# CURL_LIBRARY - List of libraries when using curl.
# CURL_FOUND - True if curl found.
if( UNIX ) find_library(CURL_LIBRARY NAMES curl)
FIND_PATH(CURL_INCLUDE_DIR NAMES curl.h find_path(CURL_INCLUDE_DIR NAMES curl/curl.h)
PATHS
/usr/local/include/curl
/usr/include/curl
)
FIND_LIBRARY(CURL_LIBRARY NAMES curl set(CURL_REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR)
PATHS
/usr/local/lib
/usr/lib
)
else( UNIX )
FIND_PATH(CURL_INCLUDE_DIR NAMES curl/curl.h) # Look for the header file.
FIND_LIBRARY(CURL_LIBRARY NAMES curl) # Look for the library.
FIND_FILE(CURL_DLL NAMES libcurl.dll
PATHS
"c:/windows/system32"
DOC "Path of the cURL dll (for installation)")
INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL DEFAULT_MSG CURL_LIBRARY CURL_INCLUDE_DIR) # all listed variables are TRUE
endif( UNIX )
if( WIN32 ) if(WIN32)
if( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL ) # libcurl.dll is required on Windows find_file(CURL_DLL NAMES libcurl-4.dll
SET(CURL_FOUND TRUE) PATHS
else( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL ) "C:/Windows/System32"
SET(CURL_FOUND FALSE) DOC "Path to the cURL DLL (for installation)")
endif( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL ) mark_as_advanced(CURL_DLL)
else ( WIN32 ) set(CURL_REQUIRED_VARS ${CURL_REQUIRED_VARS} CURL_DLL)
if( CURL_LIBRARY AND CURL_INCLUDE_DIR ) endif()
SET(CURL_FOUND TRUE)
else( CURL_LIBRARY AND CURL_INCLUDE_DIR ) include(FindPackageHandleStandardArgs)
SET(CURL_FOUND FALSE) find_package_handle_standard_args(CURL DEFAULT_MSG ${CURL_REQUIRED_VARS})
endif( CURL_LIBRARY AND CURL_INCLUDE_DIR )
endif ( WIN32 )
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
MESSAGE(STATUS "CURL_DLL = ${CURL_DLL}")

View File

@ -1,85 +1,78 @@
# Package finder for gettext libs and include files
SET(CUSTOM_GETTEXT_PATH "${PROJECT_SOURCE_DIR}/../../gettext" set(CUSTOM_GETTEXT_PATH "${PROJECT_SOURCE_DIR}/../../gettext"
CACHE FILEPATH "path to custom gettext") CACHE FILEPATH "path to custom gettext")
# by default find_path(GETTEXT_INCLUDE_DIR
SET(GETTEXT_FOUND FALSE)
FIND_PATH(GETTEXT_INCLUDE_DIR
NAMES libintl.h NAMES libintl.h
PATHS "${CUSTOM_GETTEXT_PATH}/include" PATHS "${CUSTOM_GETTEXT_PATH}/include"
DOC "gettext include directory") DOC "GetText include directory")
FIND_PROGRAM(GETTEXT_MSGFMT find_program(GETTEXT_MSGFMT
NAMES msgfmt NAMES msgfmt
PATHS "${CUSTOM_GETTEXT_PATH}/bin" PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to msgfmt") DOC "Path to msgfmt")
set(GETTEXT_REQUIRED_VARS GETTEXT_INCLUDE_DIR GETTEXT_MSGFMT)
if(APPLE) if(APPLE)
FIND_LIBRARY(GETTEXT_LIBRARY find_library(GETTEXT_LIBRARY
NAMES libintl.a NAMES libintl.a
PATHS "${CUSTOM_GETTEXT_PATH}/lib" PATHS "${CUSTOM_GETTEXT_PATH}/lib"
DOC "gettext *intl*.lib") DOC "GetText library")
FIND_LIBRARY(ICONV_LIBRARY find_library(ICONV_LIBRARY
NAMES libiconv.dylib NAMES libiconv.dylib
PATHS "/usr/lib" PATHS "/usr/lib"
DOC "iconv lib") DOC "IConv library")
set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_LIBRARY ICONV_LIBRARY)
endif(APPLE) endif(APPLE)
# modern Linux, as well as Mac, seem to not need require special linking # Modern Linux, as well as OSX, does not require special linking because
# they do not because gettext is part of glibc # GetText is part of glibc.
# TODO check the requirements on other BSDs and older Linux # TODO: check the requirements on other BSDs and older Linux
IF (WIN32) if(WIN32)
IF(MSVC) if(MSVC)
SET(GETTEXT_LIB_NAMES set(GETTEXT_LIB_NAMES
libintl.lib intl.lib libintl3.lib intl3.lib) libintl.lib intl.lib libintl3.lib intl3.lib)
ELSE() else()
SET(GETTEXT_LIB_NAMES set(GETTEXT_LIB_NAMES
libintl.dll.a intl.dll.a libintl3.dll.a intl3.dll.a) libintl.dll.a intl.dll.a libintl3.dll.a intl3.dll.a)
ENDIF() endif()
FIND_LIBRARY(GETTEXT_LIBRARY find_library(GETTEXT_LIBRARY
NAMES ${GETTEXT_LIB_NAMES} NAMES ${GETTEXT_LIB_NAMES}
PATHS "${CUSTOM_GETTEXT_PATH}/lib" PATHS "${CUSTOM_GETTEXT_PATH}/lib"
DOC "gettext *intl*.lib") DOC "GetText library")
FIND_FILE(GETTEXT_DLL find_file(GETTEXT_DLL
NAMES libintl.dll intl.dll libintl3.dll intl3.dll NAMES libintl.dll intl.dll libintl3.dll intl3.dll
PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
DOC "gettext *intl*.dll") DOC "gettext *intl*.dll")
FIND_FILE(GETTEXT_ICONV_DLL find_file(GETTEXT_ICONV_DLL
NAMES libiconv2.dll NAMES libiconv2.dll
PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
DOC "gettext *iconv*.lib") DOC "gettext *iconv*.lib")
ENDIF(WIN32) set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_DLL GETTEXT_ICONV_DLL)
endif(WIN32)
IF(GETTEXT_INCLUDE_DIR AND GETTEXT_MSGFMT)
IF (WIN32)
# in the Win32 case check also for the extra linking requirements
IF(GETTEXT_LIBRARY AND GETTEXT_DLL AND GETTEXT_ICONV_DLL)
SET(GETTEXT_FOUND TRUE)
ENDIF()
ELSE(WIN32)
# *BSD variants require special linkage as they don't use glibc
IF(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
SET(GETTEXT_LIBRARY "intl")
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
SET(GETTEXT_FOUND TRUE)
ENDIF(WIN32)
ENDIF()
IF(GETTEXT_FOUND) include(FindPackageHandleStandardArgs)
SET(GETTEXT_PO_PATH ${CMAKE_SOURCE_DIR}/po) find_package_handle_standard_args(GetText DEFAULT_MSG ${GETTEXT_REQUIRED_VARS})
SET(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH ${LOCALEDIR}/<locale>/LC_MESSAGES)
FILE(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*") if(GETTEXT_FOUND)
LIST(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot) # BSD variants require special linkage as they don't use glibc
LIST(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES timestamp) if(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
MACRO(SET_MO_PATHS _buildvar _destvar _locale) set(GETTEXT_LIBRARY "intl")
STRING(REPLACE "<locale>" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH}) endif()
STRING(REPLACE "<locale>" ${_locale} ${_destvar} ${GETTEXT_MO_DEST_PATH})
ENDMACRO(SET_MO_PATHS) set(GETTEXT_PO_PATH ${CMAKE_SOURCE_DIR}/po)
ELSE() set(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale/<locale>/LC_MESSAGES)
SET(GETTEXT_INCLUDE_DIR "") set(GETTEXT_MO_DEST_PATH ${LOCALEDIR}/<locale>/LC_MESSAGES)
SET(GETTEXT_LIBRARY "") file(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*")
ENDIF() list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot)
list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES timestamp)
macro(SET_MO_PATHS _buildvar _destvar _locale)
string(REPLACE "<locale>" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH})
string(REPLACE "<locale>" ${_locale} ${_destvar} ${GETTEXT_MO_DEST_PATH})
endmacro()
endif()

View File

@ -1,7 +1,8 @@
#FindIrrlicht.cmake
mark_as_advanced(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL)
set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)") set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)")
# Find include directory # Find include directory
if(NOT IRRLICHT_SOURCE_DIR STREQUAL "") if(NOT IRRLICHT_SOURCE_DIR STREQUAL "")
@ -24,65 +25,47 @@ if(NOT IRRLICHT_SOURCE_DIR STREQUAL "")
set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a) set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a)
endif() endif()
FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
PATHS PATHS
${IRRLICHT_SOURCE_DIR_INCLUDE} ${IRRLICHT_SOURCE_DIR_INCLUDE}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
FIND_LIBRARY(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES} find_library(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES}
PATHS PATHS
${IRRLICHT_SOURCE_DIR_LIBS} ${IRRLICHT_SOURCE_DIR_LIBS}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
else() else()
find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
PATHS PATHS
/usr/local/include/irrlicht /usr/local/include/irrlicht
/usr/include/irrlicht /usr/include/irrlicht
) )
FIND_LIBRARY(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht find_library(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht
PATHS PATHS
/usr/local/lib /usr/local/lib
/usr/lib /usr/lib
) )
endif() endif()
MESSAGE(STATUS "IRRLICHT_SOURCE_DIR = ${IRRLICHT_SOURCE_DIR}")
MESSAGE(STATUS "IRRLICHT_INCLUDE_DIR = ${IRRLICHT_INCLUDE_DIR}")
MESSAGE(STATUS "IRRLICHT_LIBRARY = ${IRRLICHT_LIBRARY}")
# On windows, find the dll for installation # On Windows, find the DLL for installation
if(WIN32) if(WIN32)
if(MSVC) if(MSVC)
FIND_FILE(IRRLICHT_DLL NAMES Irrlicht.dll set(IRRLICHT_COMPILER "VisualStudio")
PATHS
"${IRRLICHT_SOURCE_DIR}/bin/Win32-VisualStudio"
DOC "Path of the Irrlicht dll (for installation)"
)
else() else()
FIND_FILE(IRRLICHT_DLL NAMES Irrlicht.dll set(IRRLICHT_COMPILER "gcc")
PATHS
"${IRRLICHT_SOURCE_DIR}/bin/Win32-gcc"
DOC "Path of the Irrlicht dll (for installation)"
)
endif() endif()
MESSAGE(STATUS "IRRLICHT_DLL = ${IRRLICHT_DLL}") find_file(IRRLICHT_DLL NAMES Irrlicht.dll
PATHS
"${IRRLICHT_SOURCE_DIR}/bin/Win32-${IRRLICHT_COMPILER}"
DOC "Path of the Irrlicht dll (for installation)"
)
endif(WIN32) endif(WIN32)
# handle the QUIETLY and REQUIRED arguments and set IRRLICHT_FOUND to TRUE if include(FindPackageHandleStandardArgs)
# all listed variables are TRUE find_package_handle_standard_args(Irrlicht DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Irrlicht DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
IF(IRRLICHT_FOUND)
SET(IRRLICHT_LIBRARIES ${IRRLICHT_LIBRARY})
ELSE(IRRLICHT_FOUND)
SET(IRRLICHT_LIBRARIES)
ENDIF(IRRLICHT_FOUND)
MARK_AS_ADVANCED(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL)

View File

@ -1,18 +1,27 @@
# Look for json, use our own if not found # Look for JSONCPP if asked to.
# We use a bundled version by default because some distros ship versions of
# JSONCPP that cause segfaults and other memory errors when we link with them.
# See https://github.com/minetest/minetest/issues/1793
#FIND_PATH(JSON_INCLUDE_DIR json.h) mark_as_advanced(JSON_LIBRARY JSON_INCLUDE_DIR)
option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause segfaults and other memory errors!" FALSE)
#FIND_LIBRARY(JSON_LIBRARY NAMES jsoncpp) if(ENABLE_SYSTEM_JSONCPP)
find_library(JSON_LIBRARY NAMES jsoncpp)
find_path(JSON_INCLUDE_DIR json/features.h)
#IF(JSON_LIBRARY AND JSON_INCLUDE_DIR) include(FindPackageHandleStandardArgs)
# SET( JSON_FOUND TRUE ) find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
#ENDIF(JSON_LIBRARY AND JSON_INCLUDE_DIR)
if(JSONCPP_FOUND)
message(STATUS "Using system JSONCPP library.")
endif()
endif()
if(NOT JSONCPP_FOUND)
message(STATUS "Using bundled JSONCPP library.")
set(JSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/json)
set(JSON_LIBRARY jsoncpp)
add_subdirectory(json)
endif()
#IF(JSON_FOUND)
# MESSAGE(STATUS "Found system jsoncpp header file in ${JSON_INCLUDE_DIR}")
# MESSAGE(STATUS "Found system jsoncpp library ${JSON_LIBRARY}")
#ELSE(JSON_FOUND)
SET(JSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/json)
SET(JSON_LIBRARY jsoncpp)
MESSAGE(STATUS "Using project jsoncpp library")
#ENDIF(JSON_FOUND)

View File

@ -0,0 +1,25 @@
option(ENABLE_LUAJIT "Enable LuaJIT support" TRUE)
mark_as_advanced(LUA_LIBRARY LUA_INCLUDE_DIR)
set(USE_LUAJIT FALSE)
if(ENABLE_LUAJIT)
find_library(LUA_LIBRARY luajit
NAMES luajit-5.1)
find_path(LUA_INCLUDE_DIR luajit.h
NAMES luajit.h
PATH_SUFFIXES luajit-2.0)
if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
set(USE_LUAJIT TRUE)
endif()
else()
message (STATUS "LuaJIT detection disabled! (ENABLE_LUAJIT=0)")
endif()
if(NOT USE_LUAJIT)
message(STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_LIBRARY "lua")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
add_subdirectory(lua)
endif()

View File

@ -16,115 +16,97 @@
# EGL_INCLUDE_DIR - the EGL include directory # EGL_INCLUDE_DIR - the EGL include directory
# EGL_LIBRARIES - Link these to use EGL # EGL_LIBRARIES - Link these to use EGL
# win32, apple, android NOT TESED # Win32, Apple, and Android are not tested!
# linux tested and works # Linux tested and works
IF (WIN32)
IF (CYGWIN)
FIND_PATH(OPENGLES2_INCLUDE_DIR GLES2/gl2.h )
FIND_LIBRARY(OPENGLES2_gl_LIBRARY libGLESv2 )
ELSE (CYGWIN)
IF(BORLAND)
SET (OPENGLES2_gl_LIBRARY import32 CACHE STRING "OpenGL ES 2.x library for win32")
ELSE(BORLAND)
# todo
# SET (OPENGLES_gl_LIBRARY ${SOURCE_DIR}/Dependencies/lib/release/libGLESv2.lib CACHE STRING "OpenGL ES 2.x library for win32"
ENDIF(BORLAND)
ENDIF (CYGWIN)
ELSE (WIN32)
IF (APPLE)
if(WIN32)
if(CYGWIN)
find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h)
find_library(OPENGLES2_LIBRARY libGLESv2)
else()
if(BORLAND)
set(OPENGLES2_LIBRARY import32 CACHE STRING "OpenGL ES 2.x library for Win32")
else()
# TODO
# set(OPENGLES_LIBRARY ${SOURCE_DIR}/Dependencies/lib/release/libGLESv2.lib CACHE STRING "OpenGL ES 2.x library for win32"
endif()
endif()
elseif(APPLE)
create_search_paths(/Developer/Platforms) create_search_paths(/Developer/Platforms)
findpkg_framework(OpenGLES2) findpkg_framework(OpenGLES2)
set(OPENGLES2_gl_LIBRARY "-framework OpenGLES") set(OPENGLES2_LIBRARY "-framework OpenGLES")
else()
find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h
PATHS /usr/openwin/share/include
/opt/graphics/OpenGL/include
/usr/X11R6/include
/usr/include
)
ELSE(APPLE) find_library(OPENGLES2_LIBRARY
NAMES GLESv2
PATHS /opt/graphics/OpenGL/lib
/usr/openwin/lib
/usr/shlib /usr/X11R6/lib
/usr/lib
)
FIND_PATH(OPENGLES2_INCLUDE_DIR GLES2/gl2.h if(NOT BUILD_ANDROID)
/usr/openwin/share/include find_path(EGL_INCLUDE_DIR EGL/egl.h
/opt/graphics/OpenGL/include /usr/X11R6/include PATHS /usr/openwin/share/include
/usr/include /opt/graphics/OpenGL/include
) /usr/X11R6/include
/usr/include
FIND_LIBRARY(OPENGLES2_gl_LIBRARY
NAMES GLESv2
PATHS /opt/graphics/OpenGL/lib
/usr/openwin/lib
/usr/shlib /usr/X11R6/lib
/usr/lib
)
IF (NOT BUILD_ANDROID)
FIND_PATH(EGL_INCLUDE_DIR EGL/egl.h
/usr/openwin/share/include
/opt/graphics/OpenGL/include /usr/X11R6/include
/usr/include
) )
FIND_LIBRARY(EGL_egl_LIBRARY find_library(EGL_LIBRARY
NAMES EGL NAMES EGL
PATHS /opt/graphics/OpenGL/lib PATHS /opt/graphics/OpenGL/lib
/usr/openwin/lib /usr/openwin/lib
/usr/shlib /usr/X11R6/lib /usr/shlib
/usr/X11R6/lib
/usr/lib /usr/lib
) )
# On Unix OpenGL most certainly always requires X11. # On Unix OpenGL usually requires X11.
# Feel free to tighten up these conditions if you don't # It doesn't require X11 on OSX.
# think this is always true.
# It's not true on OSX.
IF (OPENGLES2_gl_LIBRARY) if(OPENGLES2_LIBRARY)
IF(NOT X11_FOUND) if(NOT X11_FOUND)
INCLUDE(FindX11) include(FindX11)
ENDIF(NOT X11_FOUND) endif()
IF (X11_FOUND) if(X11_FOUND)
IF (NOT APPLE) set(OPENGLES2_LIBRARIES ${X11_LIBRARIES})
SET (OPENGLES2_LIBRARIES ${X11_LIBRARIES}) endif()
ENDIF (NOT APPLE) endif()
ENDIF (X11_FOUND) endif()
ENDIF (OPENGLES2_gl_LIBRARY) endif()
ENDIF ()
ENDIF(APPLE) set(OPENGLES2_LIBRARIES ${OPENGLES2_LIBRARIES} ${OPENGLES2_LIBRARY})
ENDIF (WIN32)
#SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES}) if(BUILD_ANDROID)
if(OPENGLES2_LIBRARY)
set(EGL_LIBRARIES)
set(OPENGLES2_FOUND TRUE)
endif()
else()
if(OPENGLES2_LIBRARY AND EGL_LIBRARY)
set(OPENGLES2_LIBRARIES ${OPENGLES2_LIBRARY} ${OPENGLES2_LIBRARIES})
set(EGL_LIBRARIES ${EGL_LIBRARY} ${EGL_LIBRARIES})
set(OPENGLES2_FOUND TRUE)
endif()
endif()
IF (BUILD_ANDROID) mark_as_advanced(
IF(OPENGLES2_gl_LIBRARY) OPENGLES2_INCLUDE_DIR
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES}) OPENGLES2_LIBRARY
SET( EGL_LIBRARIES) EGL_INCLUDE_DIR
SET( OPENGLES2_FOUND "YES" ) EGL_LIBRARY
ENDIF(OPENGLES2_gl_LIBRARY)
ELSE ()
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
IF(OPENGLES2_gl_LIBRARY AND EGL_egl_LIBRARY)
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
SET( EGL_LIBRARIES ${EGL_egl_LIBRARY} ${EGL_LIBRARIES})
SET( OPENGLES2_FOUND "YES" )
ENDIF(OPENGLES2_gl_LIBRARY AND EGL_egl_LIBRARY)
ENDIF ()
MARK_AS_ADVANCED(
OPENGLES2_INCLUDE_DIR
OPENGLES2_gl_LIBRARY
EGL_INCLUDE_DIR
EGL_egl_LIBRARY
) )
IF(OPENGLES2_FOUND) if(OPENGLES2_FOUND)
MESSAGE(STATUS "Found system opengles2 library ${OPENGLES2_LIBRARIES}") message(STATUS "Found system OpenGL ES 2 library: ${OPENGLES2_LIBRARIES}")
ELSE () else()
SET(OPENGLES2_LIBRARIES "") set(OPENGLES2_LIBRARIES "")
ENDIF () endif()

View File

@ -2,14 +2,14 @@
if(VERSION_EXTRA) if(VERSION_EXTRA)
set(VERSION_GITHASH "${VERSION_STRING}") set(VERSION_GITHASH "${VERSION_STRING}")
else(VERSION_EXTRA) else()
execute_process(COMMAND git describe --always --tag --dirty execute_process(COMMAND git describe --always --tag --dirty
WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}"
OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET) ERROR_QUIET)
if(VERSION_GITHASH) if(VERSION_GITHASH)
message(STATUS "*** Detected git version ${VERSION_GITHASH} ***") message(STATUS "*** Detected Git version ${VERSION_GITHASH} ***")
else() else()
set(VERSION_GITHASH "${VERSION_STRING}") set(VERSION_GITHASH "${VERSION_STRING}")
endif() endif()
@ -18,3 +18,4 @@ endif()
configure_file( configure_file(
${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in ${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in
${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h) ${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h)

View File

@ -1,21 +0,0 @@
#
# Random macros
#
# Not used ATM
MACRO (GETDATETIME RESULT)
IF (WIN32)
EXECUTE_PROCESS(COMMAND "cmd" /C echo %date% %time% OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "\n" "" ${RESULT} "${${RESULT}}")
ELSEIF(UNIX)
EXECUTE_PROCESS(COMMAND "date" "+%Y-%m-%d_%H:%M:%S" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "\n" "" ${RESULT} "${${RESULT}}")
ELSE (WIN32)
MESSAGE(SEND_ERROR "date not implemented")
SET(${RESULT} "Unknown")
ENDIF (WIN32)
string(REGEX REPLACE " " "_" ${RESULT} "${${RESULT}}")
ENDMACRO (GETDATETIME)

View File

@ -1903,10 +1903,12 @@ and `minetest.auth_reload` call the authetification handler.
* Sets the noiseparams setting of `name` to the noiseparams table specified in `noiseparams`. * Sets the noiseparams setting of `name` to the noiseparams table specified in `noiseparams`.
* `set_default` is an optional boolean (default: `true`) that specifies whether the setting * `set_default` is an optional boolean (default: `true`) that specifies whether the setting
should be applied to the default config or current active config should be applied to the default config or current active config
* `minetest.generate_ores(vm, p1, p2)` * `minetest.generate_ores(vm, pos1, pos2)`
* Generate all registered ores within the VoxelManip `vm` and in the area from p1 to p2. * Generate all registered ores within the VoxelManip `vm` and in the area from `pos1` to `pos2`.
* `minetest.generate_decorations(vm, p1, p2)` * `pos1` and `pos2` are optional and default to mapchunk minp and maxp.
* Generate all registered decorations within the VoxelManip `vm` and in the area from p1 to p2. * `minetest.generate_decorations(vm, pos1, pos2)`
* Generate all registered decorations within the VoxelManip `vm` and in the area from `pos1` to `pos2`.
* `pos1` and `pos2` are optional and default to mapchunk minp and maxp.
* `minetest.clear_objects()` * `minetest.clear_objects()`
* clear all objects in the environments * clear all objects in the environments
* `minetest.delete_area(pos1, pos2)` * `minetest.delete_area(pos1, pos2)`
@ -3021,7 +3023,7 @@ Definition tables
^ Called after destructing node when node was dug using ^ Called after destructing node when node was dug using
minetest.node_dig / minetest.dig_node minetest.node_dig / minetest.dig_node
^ default: nil ]] ^ default: nil ]]
can_dig = function(pos,player) --[[ can_dig = function(pos, [player]) --[[
^ returns true if node can be dug, or false if not ^ returns true if node can be dug, or false if not
^ default: nil ]] ^ default: nil ]]

View File

@ -1,12 +1,18 @@
.\" Minetest man page
.TH minetest 6 "10 September 2013" "" "" .TH minetest 6 "10 September 2013" "" ""
.SH NAME .SH NAME
minetest \- Multiplayer infinite-world block sandbox minetest, minetestserver \- Multiplayer infinite-world block sandbox
.SH SYNOPSIS .SH SYNOPSIS
.B minetest .B minetest
[ OPTION ... ] [\fB--server SERVER OPTIONS\fR | \fBCLIENT OPTIONS\fR]
[\fBCOMMON OPTIONS\fR]
[\fBWORLD PATH\fR]
.B minetestserver
[\fBSERVER OPTIONS\fR]
[\fBCOMMON OPTIONS\fR]
[\fBWORLD PATH\fR]
.SH DESCRIPTION .SH DESCRIPTION
.B Minetest .B Minetest
@ -14,79 +20,79 @@ is one of the first InfiniMiner/Minecraft(/whatever) inspired games (started Oct
.PP .PP
The main design philosophy is to keep it technically simple, stable and portable. It will be kept lightweight enough to run on fairly old hardware. The main design philosophy is to keep it technically simple, stable and portable. It will be kept lightweight enough to run on fairly old hardware.
.SH OPTIONS .SH COMMON OPTIONS
.TP .TP
\-\-address <value> .B \-\-help
Address to connect to Print allowed options and exit
.TP .TP
\-\-config <value> .B \-\-version
Print version information and exit
.TP
.B \-\-config <value>
Load configuration from specified file Load configuration from specified file
.TP .TP
\-\-disable\-unittests .B \-\-logfile <value>
Disable unit tests
.TP
\-\-enable\-unittests
Enable unit tests
.TP
\-\-gameid <value>
Set gameid
.TP
\-\-go
Disable main menu
.TP
\-\-help
Show allowed options
.TP
\-\-version
Show version information
.TP
\-\-logfile <value>
Set logfile path (debug.txt) Set logfile path (debug.txt)
.TP .TP
\-\-map\-dir <value> .B \-\-info
Same as \-\-world (deprecated)
.TP
\-\-name <value>
Set player name
.TP
\-\-password <value>
Set password
.TP
\-\-port <value>
Set network port (UDP) to use
.TP
\-\-random\-input
Enable random user input, for testing
.TP
\-\-server
Run dedicated server
.TP
\-\-speedtests
Run speed tests
.TP
\-\-videomodes
List available video modes
.TP
\-\-info
Print more information to console Print more information to console
.TP .TP
\-\-verbose .B \-\-verbose
Print even more information to console Print even more information to console
.TP .TP
\-\-trace .B \-\-trace
Print enormous amounts of information to console Print enormous amounts of information to console
.TP .TP
\-\-world <value> .B \-\-gameid <value>
Set world path Set gameid
.TP .TP
\-\-migrate <value> .B \-\-worldname <value>
Migrate from current map backend to another. Possible values are sqlite3 Set world path by name
and leveldb. Only works when using \-\-server.
.SH ENVIRONMENT VARIABLES
.TP .TP
MINETEST_SUBGAME_PATH .B \-\-world <value> | list
Set world path or list worlds
.TP
.B \-\-map\-dir <value>
Same as \-\-world (deprecated)
.TP
.B \-\-port <value>
Set network port (UDP) to use
.TP
.B \-\-run\-unittests
Run unit tests and exit
.SH CLIENT OPTIONS
.TP
.B \-\-address <value>
Address to connect to
.TP
.B \-\-go
Disable main menu
.TP
.B \-\-name <value>
Set player name
.TP
.B \-\-password <value>
Set password
.TP
.B \-\-random\-input
Enable random user input, for testing (client only)
.TP
.B \-\-videomodes
List available video modes (client only)
.TP
.B \-\-speedtests
Run speed tests
.SH SERVER OPTIONS
.TP
.B \-\-migrate <value>
Migrate from current map backend to another. Possible values are sqlite3,
leveldb, redis, and dummy.
.SH ENVIRONMENT
.TP
.B MINETEST_SUBGAME_PATH
Colon delimited list of directories to search for subgames. Colon delimited list of directories to search for subgames.
.SH BUGS .SH BUGS
@ -103,5 +109,3 @@ Juhani Numminen <juhaninumminen0@gmail.com>.
.SH WWW .SH WWW
http://www.minetest.net/ http://www.minetest.net/
.SH "SEE ALSO"
.BR minetestserver(6)

View File

@ -1,77 +1,2 @@
.\" Minetestserver man page .so man6/minetest.6
.TH minetestserver 6 "10 September 2013" "" ""
.SH NAME
minetestserver \- Minetest server
.SH SYNOPSIS
.B minetestserver
[ OPTION ... ]
.SH DESCRIPTION
.B Minetest
is one of the first InfiniMiner/Minecraft(/whatever) inspired games (started October 2010), with a goal of taking the survival multiplayer gameplay to a slightly different direction.
.PP
The main design philosophy is to keep it technically simple, stable and portable. It will be kept lightweight enough to run on fairly old hardware.
.SH OPTIONS
.TP
\-\-config <value>
Load configuration from specified file
.TP
\-\-disable\-unittests
Disable unit tests
.TP
\-\-enable\-unittests
Enable unit tests
.TP
\-\-gameid <value>
Set gameid
.TP
\-\-help
Show allowed options
.TP
\-\-version
Show version information
.TP
\-\-logfile <value>
Set logfile path (debug.txt)
.TP
\-\-map\-dir <value>
Same as \-\-world (deprecated)
.TP
\-\-port <value>
Set network port (UDP) to use
.TP
\-\-info
Print more information to console
.TP
\-\-verbose
Print even more information to console
.TP
\-\-trace
Print enormous amounts of information to console
.TP
\-\-world <value>
Set world path
.TP
\-\-migrate <value>
Migrate from current map backend to another. Possible values are sqlite3
and leveldb.
.SH BUGS
Please report all bugs to Perttu Ahola <celeron55@gmail.com>.
.SH AUTHOR
.PP
Perttu Ahola <celeron55@gmail.com>
and contributors.
.PP
This man page was originally written by
Juhani Numminen <juhaninumminen0@gmail.com>.
.SH WWW
http://www.minetest.net/
.SH "SEE ALSO"
.BR minetest(6)

View File

@ -5,10 +5,10 @@
#include "config.h" #include "config.h"
#undef USE_CMAKE_CONFIG_H #undef USE_CMAKE_CONFIG_H
#if RUN_IN_PLACE == 1 #if RUN_IN_PLACE
#define BUILDMODE "RUN_IN_PLACE=1\0" #define BUILDMODE "RUN_IN_PLACE=1"
#else #else
#define BUILDMODE "RUN_IN_PLACE=0\0" #define BUILDMODE "RUN_IN_PLACE=0"
#endif #endif
LANGUAGE 0, SUBLANG_NEUTRAL LANGUAGE 0, SUBLANG_NEUTRAL
@ -20,8 +20,8 @@ LANGUAGE 0, SUBLANG_NEUTRAL
// //
1 VERSIONINFO 1 VERSIONINFO
FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH_ORIG,0 FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0
PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH_ORIG,0 PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifndef NDEBUG #ifndef NDEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -36,16 +36,16 @@ BEGIN
BEGIN BEGIN
BLOCK "040904b0" BLOCK "040904b0"
BEGIN BEGIN
VALUE "Comments", "\0" VALUE "Comments", ""
VALUE "CompanyName", "Minetest Community\0" VALUE "CompanyName", PROJECT_NAME " community"
VALUE "FileDescription", "Minetest engine core main application\0" VALUE "FileDescription", PROJECT_NAME " engine main executable"
VALUE "FileVersion", VERSION_STRING VALUE "FileVersion", VERSION_STRING
VALUE "InternalName", "Minetest engine\0" VALUE "InternalName", PROJECT_NAME
VALUE "LegalCopyright", "(c) 2014 celeron55\0" VALUE "LegalCopyright", "(c) 2014 celeron55"
VALUE "LegalTrademarks", """Minetest"" is property of Minetest community, don't use the name for your application without permission!\0" VALUE "LegalTrademarks", """Minetest"" is the property of the Minetest community, don't use it without permission!"
VALUE "OriginalFilename", "minetest.exe\0" VALUE "OriginalFilename", "minetest.exe"
VALUE "PrivateBuild", VERSION_EXTRA_STRING VALUE "PrivateBuild", VERSION_EXTRA
VALUE "ProductName", "Minetest\0" VALUE "ProductName", PROJECT_NAME
VALUE "ProductVersion", PRODUCT_VERSION_STRING VALUE "ProductVersion", PRODUCT_VERSION_STRING
VALUE "SpecialBuild", BUILDMODE VALUE "SpecialBuild", BUILDMODE
END END
@ -55,3 +55,4 @@ BEGIN
VALUE "Translation", 0x409, 1200 VALUE "Translation", 0x409, 1200
END END
END END

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: minetest\n" "Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-13 15:24+0100\n" "POT-Creation-Date: 2015-03-14 16:32+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,57 +17,57 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: builtin/fstk/ui.lua:67 #: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165
msgid "Ok" msgid "Ok"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:26 #: builtin/mainmenu/dlg_config_world.lua:29
msgid "World:" msgid "World:"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:30 #: builtin/mainmenu/dlg_config_world.lua:33
#: builtin/mainmenu/dlg_config_world.lua:32 #: builtin/mainmenu/dlg_config_world.lua:35
msgid "Hide Game" msgid "Hide Game"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:36 #: builtin/mainmenu/dlg_config_world.lua:39
#: builtin/mainmenu/dlg_config_world.lua:38 #: builtin/mainmenu/dlg_config_world.lua:41
msgid "Hide mp content" msgid "Hide mp content"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:46 #: builtin/mainmenu/dlg_config_world.lua:49
msgid "Mod:" msgid "Mod:"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:48 #: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
msgid "Depends:" msgid "Depends:"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 #: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:52 #: builtin/mainmenu/dlg_config_world.lua:55
#: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_create_world.lua:64
#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200
#: src/keycode.cpp:224 #: src/keycode.cpp:224
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:68 #: builtin/mainmenu/dlg_config_world.lua:71
msgid "Enable MP" msgid "Enable MP"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:70 #: builtin/mainmenu/dlg_config_world.lua:73
msgid "Disable MP" msgid "Disable MP"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:74 #: builtin/mainmenu/dlg_config_world.lua:77
#: builtin/mainmenu/dlg_config_world.lua:76 #: builtin/mainmenu/dlg_config_world.lua:79
msgid "enabled" msgid "enabled"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_config_world.lua:82 #: builtin/mainmenu/dlg_config_world.lua:85
msgid "Enable all" msgid "Enable all"
msgstr "" msgstr ""
@ -107,7 +107,7 @@ msgstr ""
msgid "Download a subgame, such as minetest_game, from minetest.net" msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr "" msgstr ""
#: builtin/mainmenu/dlg_create_world.lua:97 #: builtin/mainmenu/dlg_create_world.lua:99
msgid "A world named \"$1\" already exists" msgid "A world named \"$1\" already exists"
msgstr "" msgstr ""
@ -121,7 +121,7 @@ msgstr ""
#: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_mod.lua:27
#: builtin/mainmenu/dlg_delete_world.lua:25 #: builtin/mainmenu/dlg_delete_world.lua:25
#: builtin/mainmenu/tab_settings.lua:25 #: builtin/mainmenu/tab_settings.lua:79
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
@ -179,47 +179,39 @@ msgstr ""
msgid "Unsorted" msgid "Unsorted"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:125 #: builtin/mainmenu/store.lua:126
msgid "Downloading" msgid "Downloading $1, please wait..."
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:127 #: builtin/mainmenu/store.lua:160
msgid "please wait..."
msgstr ""
#: builtin/mainmenu/store.lua:159
msgid "Successfully installed:" msgid "Successfully installed:"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:163 #: builtin/mainmenu/store.lua:162
msgid "Shortname:" msgid "Shortname:"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 #: builtin/mainmenu/store.lua:472
msgid "ok"
msgstr ""
#: builtin/mainmenu/store.lua:476
msgid "Rating" msgid "Rating"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:501 #: builtin/mainmenu/store.lua:497
msgid "re-Install" msgid "re-Install"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:503 #: builtin/mainmenu/store.lua:499
msgid "Install" msgid "Install"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:522 #: builtin/mainmenu/store.lua:518
msgid "Close store" msgid "Close store"
msgstr "" msgstr ""
#: builtin/mainmenu/store.lua:530 #: builtin/mainmenu/store.lua:526
msgid "Page $1 of $2" msgid "Page $1 of $2"
msgstr "" msgstr ""
@ -276,12 +268,11 @@ msgid "Mods"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:23 #: builtin/mainmenu/tab_multiplayer.lua:23
msgid "Address/Port" msgid "Address / Port :"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 #: builtin/mainmenu/tab_multiplayer.lua:24
#: builtin/mainmenu/tab_simple_main.lua:25 msgid "Name / Password :"
msgid "Name/Password"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_multiplayer.lua:29
@ -299,7 +290,22 @@ msgstr ""
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:252 #: builtin/mainmenu/tab_multiplayer.lua:62
#: builtin/mainmenu/tab_simple_main.lua:45
msgid "Creative mode"
msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:63
#: builtin/mainmenu/tab_simple_main.lua:46
msgid "Damage enabled"
msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:64
#: builtin/mainmenu/tab_simple_main.lua:47
msgid "PvP enabled"
msgstr ""
#: builtin/mainmenu/tab_multiplayer.lua:257
msgid "Client" msgid "Client"
msgstr "" msgstr ""
@ -319,12 +325,12 @@ msgstr ""
msgid "Select World:" msgid "Select World:"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
#: builtin/mainmenu/tab_singleplayer.lua:90 #: builtin/mainmenu/tab_singleplayer.lua:90
msgid "Creative Mode" msgid "Creative Mode"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
#: builtin/mainmenu/tab_singleplayer.lua:92 #: builtin/mainmenu/tab_singleplayer.lua:92
msgid "Enable Damage" msgid "Enable Damage"
msgstr "" msgstr ""
@ -333,6 +339,10 @@ msgstr ""
msgid "Public" msgid "Public"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu/tab_server.lua:45 #: builtin/mainmenu/tab_server.lua:45
msgid "Bind Address" msgid "Bind Address"
msgstr "" msgstr ""
@ -349,131 +359,151 @@ msgstr ""
msgid "Server" msgid "Server"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:21
msgid "No Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:22
msgid "Bilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:23 #: builtin/mainmenu/tab_settings.lua:23
msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:32
msgid "No Mipmap"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:33
msgid "Mipmap"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:34
msgid "Mipmap + Aniso. Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:77
msgid "Are you sure to reset your singleplayer world?" msgid "Are you sure to reset your singleplayer world?"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:27 #: builtin/mainmenu/tab_settings.lua:81
msgid "No!!!" msgid "No!!!"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:134 #: builtin/mainmenu/tab_settings.lua:181
msgid "Smooth Lighting" msgid "Smooth Lighting"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:136 #: builtin/mainmenu/tab_settings.lua:183
msgid "Enable Particles" msgid "Enable Particles"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:138 #: builtin/mainmenu/tab_settings.lua:185
msgid "3D Clouds" msgid "3D Clouds"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:140 #: builtin/mainmenu/tab_settings.lua:187
msgid "Fancy Trees" msgid "Fancy Trees"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:142 #: builtin/mainmenu/tab_settings.lua:189
msgid "Opaque Water" msgid "Opaque Water"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:144 #: builtin/mainmenu/tab_settings.lua:191
msgid "Connected Glass" msgid "Connected Glass"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:149 #: builtin/mainmenu/tab_settings.lua:193
msgid "Node Highlighting"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:196
msgid "Texturing:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:201
msgid "Rendering:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:205
msgid "Restart minetest for driver change to take effect" msgid "Restart minetest for driver change to take effect"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:151 #: builtin/mainmenu/tab_settings.lua:207
msgid "Mip-Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:153
msgid "Anisotropic Filtering"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:155
msgid "Bi-Linear Filtering"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:157
msgid "Tri-Linear Filtering"
msgstr ""
#: builtin/mainmenu/tab_settings.lua:160
msgid "Shaders" msgid "Shaders"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:164 #: builtin/mainmenu/tab_settings.lua:212
msgid "Change keys" msgid "Change keys"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:167 #: builtin/mainmenu/tab_settings.lua:215
msgid "Reset singleplayer world" msgid "Reset singleplayer world"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:171 #: builtin/mainmenu/tab_settings.lua:219
msgid "GUI scale factor" msgid "GUI scale factor"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:175 #: builtin/mainmenu/tab_settings.lua:223
msgid "Scaling factor applied to menu elements: " msgid "Scaling factor applied to menu elements: "
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:181 #: builtin/mainmenu/tab_settings.lua:229
msgid "Touch free target" msgid "Touch free target"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:187 #: builtin/mainmenu/tab_settings.lua:235
msgid "Touchthreshold (px)" msgid "Touchthreshold (px)"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 #: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256
msgid "Bumpmapping" msgid "Bumpmapping"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 #: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257
msgid "Generate Normalmaps" msgid "Generate Normalmaps"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 #: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258
msgid "Parallax Occlusion" msgid "Parallax Occlusion"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 #: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259
msgid "Waving Water" msgid "Waving Water"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 #: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260
msgid "Waving Leaves" msgid "Waving Leaves"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 #: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261
msgid "Waving Plants" msgid "Waving Plants"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:255 #: builtin/mainmenu/tab_settings.lua:287
msgid "To enable shaders the OpenGL driver needs to be used." msgid "To enable shaders the OpenGL driver needs to be used."
msgstr "" msgstr ""
#: builtin/mainmenu/tab_settings.lua:330 #: builtin/mainmenu/tab_settings.lua:398
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_simple_main.lua:67 #: builtin/mainmenu/tab_simple_main.lua:80
msgid "Fly mode" msgid "Fly mode"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_simple_main.lua:71 #: builtin/mainmenu/tab_simple_main.lua:84
msgid "Start Singleplayer" msgid "Start Singleplayer"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_simple_main.lua:72 #: builtin/mainmenu/tab_simple_main.lua:85
msgid "Config mods" msgid "Config mods"
msgstr "" msgstr ""
#: builtin/mainmenu/tab_simple_main.lua:191 #: builtin/mainmenu/tab_simple_main.lua:208
msgid "Main" msgid "Main"
msgstr "" msgstr ""
@ -497,157 +527,292 @@ msgstr ""
msgid "Texturepacks" msgid "Texturepacks"
msgstr "" msgstr ""
#: src/client.cpp:2726 #: src/client.cpp:1563
msgid "Loading textures..."
msgstr ""
#: src/client.cpp:1573
msgid "Rebuilding shaders..."
msgstr ""
#: src/client.cpp:1580
msgid "Initializing nodes..."
msgstr ""
#: src/client.cpp:1595
msgid "Item textures..." msgid "Item textures..."
msgstr "" msgstr ""
#: src/client.cpp:1620
msgid "Done!"
msgstr ""
#: src/client/clientlauncher.cpp:172
msgid "Main Menu"
msgstr ""
#: src/client/clientlauncher.cpp:210
msgid "Player name too long."
msgstr ""
#: src/client/clientlauncher.cpp:248
msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp:413
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/client/clientlauncher.cpp:420
msgid "Provided world path doesn't exist: "
msgstr ""
#: src/client/clientlauncher.cpp:429
msgid "Could not find or load game \""
msgstr ""
#: src/client/clientlauncher.cpp:447
msgid "Invalid gamespec."
msgstr ""
#: src/fontengine.cpp:70 src/fontengine.cpp:226 #: src/fontengine.cpp:70 src/fontengine.cpp:226
msgid "needs_fallback_font" msgid "needs_fallback_font"
msgstr "" msgstr ""
#: src/game.cpp:1063 #: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008
msgid "Proceed"
msgstr ""
#: src/game.cpp:1081
msgid "You died."
msgstr ""
#: src/game.cpp:1082
msgid "Respawn" msgid "Respawn"
msgstr "" msgstr ""
#: src/game.cpp:2250 #: src/game.cpp:1101
msgid ""
"Default Controls:\n"
"No menu visible:\n"
"- single tap: button activate\n"
"- double tap: place/use\n"
"- slide finger: look around\n"
"Menu/Inventory visible:\n"
"- double tap (outside):\n"
" -->close\n"
"- touch stack, touch slot:\n"
" --> move stack\n"
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
#: src/game.cpp:1115
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/game.cpp:1134
msgid "Continue"
msgstr ""
#: src/game.cpp:1138
msgid "Change Password"
msgstr ""
#: src/game.cpp:1143
msgid "Sound Volume"
msgstr ""
#: src/game.cpp:1145
msgid "Change Keys"
msgstr ""
#: src/game.cpp:1148
msgid "Exit to Menu"
msgstr ""
#: src/game.cpp:1150
msgid "Exit to OS"
msgstr ""
#: src/game.cpp:1827
msgid "Shutting down..."
msgstr ""
#: src/game.cpp:1876
msgid "Loading..."
msgstr ""
#: src/game.cpp:1933
msgid "Creating server..."
msgstr ""
#: src/game.cpp:1970
msgid "Creating client..."
msgstr ""
#: src/game.cpp:2143
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:2234
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:2292
msgid "Item definitions..." msgid "Item definitions..."
msgstr "" msgstr ""
#: src/game.cpp:2255 #: src/game.cpp:2297
msgid "Node definitions..." msgid "Node definitions..."
msgstr "" msgstr ""
#: src/game.cpp:2262 #: src/game.cpp:2304
msgid "Media..." msgid "Media..."
msgstr "" msgstr ""
#: src/game.cpp:2267 #: src/game.cpp:2309
msgid " KB/s" msgid " KB/s"
msgstr "" msgstr ""
#: src/game.cpp:2271 #: src/game.cpp:2313
msgid " MB/s" msgid " MB/s"
msgstr "" msgstr ""
#: src/game.cpp:4220 #: src/game.cpp:4265
msgid "" msgid ""
"\n" "\n"
"Check debug.txt for details." "Check debug.txt for details."
msgstr "" msgstr ""
#: src/guiFormSpecMenu.cpp:2055 #: src/guiFormSpecMenu.cpp:2799
msgid "Proceed"
msgstr ""
#: src/guiFormSpecMenu.cpp:2846
msgid "Enter " msgid "Enter "
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:125 #: src/guiFormSpecMenu.cpp:2819
msgid "ok"
msgstr ""
#: src/guiKeyChangeMenu.cpp:126
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:165 #: src/guiKeyChangeMenu.cpp:166
msgid "\"Use\" = climb down" msgid "\"Use\" = climb down"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:180 #: src/guiKeyChangeMenu.cpp:181
msgid "Double tap \"jump\" to toggle fly" msgid "Double tap \"jump\" to toggle fly"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:296 #: src/guiKeyChangeMenu.cpp:297
msgid "Key already in use" msgid "Key already in use"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:371 #: src/guiKeyChangeMenu.cpp:372
msgid "press key" msgid "press key"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:397 #: src/guiKeyChangeMenu.cpp:398
msgid "Forward" msgid "Forward"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:398 #: src/guiKeyChangeMenu.cpp:399
msgid "Backward" msgid "Backward"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 #: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229
msgid "Left" msgid "Left"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229
msgid "Right" msgid "Right"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:401 #: src/guiKeyChangeMenu.cpp:402
msgid "Use" msgid "Use"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:402 #: src/guiKeyChangeMenu.cpp:403
msgid "Jump" msgid "Jump"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:403 #: src/guiKeyChangeMenu.cpp:404
msgid "Sneak" msgid "Sneak"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:404 #: src/guiKeyChangeMenu.cpp:405
msgid "Drop" msgid "Drop"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:405 #: src/guiKeyChangeMenu.cpp:406
msgid "Inventory" msgid "Inventory"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:406 #: src/guiKeyChangeMenu.cpp:407
msgid "Chat" msgid "Chat"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:407 #: src/guiKeyChangeMenu.cpp:408
msgid "Command" msgid "Command"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:408 #: src/guiKeyChangeMenu.cpp:409
msgid "Console" msgid "Console"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:409 #: src/guiKeyChangeMenu.cpp:410
msgid "Toggle fly" msgid "Toggle fly"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:410 #: src/guiKeyChangeMenu.cpp:411
msgid "Toggle fast" msgid "Toggle fast"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:411
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412 #: src/guiKeyChangeMenu.cpp:412
msgid "Range select" msgid "Toggle Cinematic"
msgstr "" msgstr ""
#: src/guiKeyChangeMenu.cpp:413 #: src/guiKeyChangeMenu.cpp:413
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
msgid "Print stacks" msgid "Print stacks"
msgstr "" msgstr ""
#: src/guiPasswordChange.cpp:106 #: src/guiPasswordChange.cpp:108
msgid "Old Password" msgid "Old Password"
msgstr "" msgstr ""
#: src/guiPasswordChange.cpp:122 #: src/guiPasswordChange.cpp:124
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: src/guiPasswordChange.cpp:137 #: src/guiPasswordChange.cpp:139
msgid "Confirm Password" msgid "Confirm Password"
msgstr "" msgstr ""
#: src/guiPasswordChange.cpp:153 #: src/guiPasswordChange.cpp:155
msgid "Change" msgid "Change"
msgstr "" msgstr ""
#: src/guiPasswordChange.cpp:162 #: src/guiPasswordChange.cpp:164
msgid "Passwords do not match!" msgid "Passwords do not match!"
msgstr "" msgstr ""
@ -946,31 +1111,3 @@ msgstr ""
#: src/keycode.cpp:249 #: src/keycode.cpp:249
msgid "Zoom" msgid "Zoom"
msgstr "" msgstr ""
#: src/main.cpp:1681
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1719
msgid "Player name too long."
msgstr ""
#: src/main.cpp:1757
msgid "Connection error (timed out?)"
msgstr ""
#: src/main.cpp:1919
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1926
msgid "Provided world path doesn't exist: "
msgstr ""
#: src/main.cpp:1935
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1953
msgid "Invalid gamespec."
msgstr ""

View File

@ -1,7 +1,8 @@
project(minetest) cmake_minimum_required(VERSION 2.6)
cmake_minimum_required( VERSION 2.6 )
project(Minetest)
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
INCLUDE(CheckCSourceRuns)
INCLUDE(CheckIncludeFiles) INCLUDE(CheckIncludeFiles)
# Add custom SemiDebug build mode # Add custom SemiDebug build mode
@ -22,83 +23,69 @@ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
FORCE FORCE
) )
# Set some random things default to not being visible in the GUI # Set some random things default to not being visible in the GUI
mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH) mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
option(ENABLE_CURL "Enable cURL support for fetching media" 1)
if (NOT ENABLE_CURL) option(ENABLE_CURL "Enable cURL support for fetching media" TRUE)
mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR) set(USE_CURL FALSE)
endif(NOT ENABLE_CURL)
if( ENABLE_CURL ) if(ENABLE_CURL)
find_package(CURL) find_package(CURL)
endif( ENABLE_CURL ) if (CURL_FOUND)
set(USE_CURL 0) message(STATUS "cURL support enabled.")
if (CURL_FOUND AND ENABLE_CURL) set(USE_CURL TRUE)
message(STATUS "cURL support enabled") endif()
set(USE_CURL 1) else()
endif(CURL_FOUND AND ENABLE_CURL) mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
endif()
# user-visible option to enable/disable gettext usage
OPTION(ENABLE_GETTEXT "Use GetText for internationalization" 0)
# this is only set to 1 if gettext is enabled _and_ available option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE)
set(USE_GETTEXT 0) set(USE_GETTEXT FALSE)
if(ENABLE_GETTEXT) if(ENABLE_GETTEXT)
find_package(GettextLib) find_package(GettextLib)
if(GETTEXT_FOUND)
if(WIN32)
message(STATUS "GetText library: ${GETTEXT_LIBRARY}")
message(STATUS "GetText DLL: ${GETTEXT_DLL}")
message(STATUS "GetText iconv DLL: ${GETTEXT_ICONV_DLL}")
endif()
set(USE_GETTEXT TRUE)
message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
endif(GETTEXT_FOUND)
else() else()
MARK_AS_ADVANCED(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT) mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
message(STATUS "GetText disabled.")
endif() endif()
if(GETTEXT_FOUND AND ENABLE_GETTEXT)
message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
if(WIN32)
message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
message(STATUS "gettext dll: ${GETTEXT_DLL}")
message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
endif()
set(USE_GETTEXT 1)
message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
MESSAGE(STATUS "GetText found but disabled;")
else(GETTEXT_FOUND AND ENABLE_GETTEXT)
message(STATUS "GetText disabled")
endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
# user visible option to enable/disable sound option(ENABLE_SOUND "Enable sound" TRUE)
OPTION(ENABLE_SOUND "Enable sound" ON) set(USE_SOUND FALSE)
# this is only set to 1 if sound is enabled _and_ available if(BUILD_CLIENT AND ENABLE_SOUND)
set(USE_SOUND 0)
set(SOUND_PROBLEM 0)
if(ENABLE_SOUND AND BUILD_CLIENT)
# Sound libraries # Sound libraries
find_package(OpenAL) find_package(OpenAL)
find_package(Vorbis) find_package(Vorbis)
if(NOT OPENAL_FOUND) if(NOT OPENAL_FOUND)
message(STATUS "Sound enabled, but OpenAL not found!") message(STATUS "Sound enabled, but OpenAL not found!")
set(SOUND_PROBLEM 1) mark_as_advanced(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
MARK_AS_ADVANCED(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
endif() endif()
if(NOT VORBIS_FOUND) if(NOT VORBIS_FOUND)
message(STATUS "Sound enabled, but Vorbis libraries not found!") message(STATUS "Sound enabled, but Vorbis libraries not found!")
set(SOUND_PROBLEM 1) mark_as_advanced(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
MARK_AS_ADVANCED(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
endif() endif()
if(OPENAL_FOUND AND VORBIS_FOUND) if(OPENAL_FOUND AND VORBIS_FOUND)
set(USE_SOUND 1) set(USE_SOUND TRUE)
message(STATUS "Sound enabled") message(STATUS "Sound enabled.")
else()
message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
"To continue, either fill in the required paths or disable sound. (-DENABLE_SOUND=0)")
endif() endif()
endif(ENABLE_SOUND AND BUILD_CLIENT)
if(SOUND_PROBLEM)
message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
"To continue, either fill in the required paths or disable sound. (-DENABLE_SOUND=0)")
endif() endif()
if(USE_SOUND) if(USE_SOUND)
set(sound_SRCS sound_openal.cpp) set(sound_SRCS sound_openal.cpp)
set(SOUND_INCLUDE_DIRS set(SOUND_INCLUDE_DIRS
@ -112,18 +99,87 @@ if(USE_SOUND)
) )
endif() endif()
option(ENABLE_FREETYPE "Enable freetype2 (truetype fonts and basic unicode support)" OFF)
set(USE_FREETYPE 0) option(ENABLE_GLES "Enable OpenGL ES support" FALSE)
mark_as_advanced(ENABLE_GLES)
if(ENABLE_GLES)
find_package(OpenGLES2)
endif()
option(ENABLE_FREETYPE "Enable FreeType2 (TrueType fonts and basic unicode support)" TRUE)
set(USE_FREETYPE FALSE)
if(ENABLE_FREETYPE) if(ENABLE_FREETYPE)
set(USE_FREETYPE 1) if(UNIX)
include(FindPkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(FREETYPE QUIET freetype2)
if(FREETYPE_FOUND)
SET(FREETYPE_PKGCONFIG_FOUND TRUE)
SET(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES})
# Because CMake is idiotic
string(REPLACE ";" " " FREETYPE_CFLAGS_STR ${FREETYPE_CFLAGS})
string(REPLACE ";" " " FREETYPE_LDFLAGS_STR ${FREETYPE_LDFLAGS})
endif(FREETYPE_FOUND)
endif(PKG_CONFIG_FOUND)
endif(UNIX)
if(NOT FREETYPE_FOUND)
find_package(Freetype)
endif()
if(FREETYPE_FOUND)
set(USE_FREETYPE TRUE)
set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
set(CGUITTFONT_LIBRARY cguittfont)
endif()
endif(ENABLE_FREETYPE) endif(ENABLE_FREETYPE)
find_package(Lua REQUIRED)
option(ENABLE_LEVELDB "Enable LevelDB backend" TRUE)
set(USE_LEVELDB FALSE)
if(ENABLE_LEVELDB)
find_library(LEVELDB_LIBRARY leveldb)
find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb)
if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
set(USE_LEVELDB TRUE)
message(STATUS "LevelDB backend enabled.")
include_directories(${LEVELDB_INCLUDE_DIR})
else()
message(STATUS "LevelDB not found!")
endif()
endif(ENABLE_LEVELDB)
OPTION(ENABLE_REDIS "Enable Redis backend" TRUE)
set(USE_REDIS FALSE)
if(ENABLE_REDIS)
find_library(REDIS_LIBRARY hiredis)
find_path(REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
if(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
set(USE_REDIS TRUE)
message(STATUS "Redis backend enabled.")
include_directories(${REDIS_INCLUDE_DIR})
else(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
message(STATUS "Redis not found!")
endif(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
endif(ENABLE_REDIS)
find_package(SQLite3 REQUIRED)
find_package(Json REQUIRED)
if(NOT MSVC) if(NOT MSVC)
set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++") set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++")
endif() endif()
# Use cmake_config.h # Use cmake_config.h
add_definitions ( -DUSE_CMAKE_CONFIG_H ) add_definitions(-DUSE_CMAKE_CONFIG_H)
if(WIN32) if(WIN32)
# Windows # Windows
@ -150,7 +206,7 @@ if(WIN32)
CACHE PATH "freetype include dir") CACHE PATH "freetype include dir")
set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib" set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
CACHE FILEPATH "Path to freetype247.lib") CACHE FILEPATH "Path to freetype247.lib")
endif(USE_FREETYPE) endif()
if(ENABLE_SOUND) if(ENABLE_SOUND)
set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)") set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)") set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
@ -166,9 +222,9 @@ else()
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
if(APPLE) if(APPLE)
FIND_LIBRARY(CARBON_LIB Carbon) find_library(CARBON_LIB Carbon)
FIND_LIBRARY(COCOA_LIB Cocoa) find_library(COCOA_LIB Cocoa)
FIND_LIBRARY(IOKIT_LIB IOKit) find_library(IOKIT_LIB IOKit)
mark_as_advanced( mark_as_advanced(
CARBON_LIB CARBON_LIB
COCOA_LIB COCOA_LIB
@ -191,156 +247,14 @@ else()
set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY}) set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
endif() endif()
find_package(SQLite3 REQUIRED) check_include_files(endian.h HAVE_ENDIAN_H)
find_package(Json REQUIRED)
option(ENABLE_GLES "Enable OpenGL ES support" 0)
mark_as_advanced(ENABLE_GLES)
if(ENABLE_GLES)
find_package(OpenGLES2)
endif(ENABLE_GLES)
if(USE_FREETYPE)
if(UNIX)
include(FindPkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(FREETYPE QUIET freetype2)
if(FREETYPE_FOUND)
SET(FREETYPE_PKGCONFIG_FOUND TRUE)
SET(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES})
# because cmake is idiotic
string(REPLACE ";" " " FREETYPE_CFLAGS_STR ${FREETYPE_CFLAGS})
string(REPLACE ";" " " FREETYPE_LDFLAGS_STR ${FREETYPE_LDFLAGS})
endif(FREETYPE_FOUND)
endif(PKG_CONFIG_FOUND)
endif(UNIX)
if(NOT FREETYPE_FOUND)
find_package(Freetype REQUIRED)
endif(NOT FREETYPE_FOUND)
set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
set(CGUITTFONT_LIBRARY cguittfont)
endif(USE_FREETYPE)
if (NOT DISABLE_LUAJIT)
find_library(LUA_LIBRARY luajit
NAMES luajit-5.1)
find_path(LUA_INCLUDE_DIR luajit.h
NAMES luajit.h
PATH_SUFFIXES luajit-2.0)
message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
else (NOT ${DISABLE_LUAJIT} MATCHES "1")
message (STATUS "LuaJIT detection disabled! (DISABLE_LUAJIT=1)")
set(LUA_LIBRARY "")
set(LUA_INCLUDE_DIR "")
endif (NOT DISABLE_LUAJIT)
set(USE_LUAJIT 0)
if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
message (STATUS "LuaJIT found, checking for broken versions...")
if(CMAKE_CROSSCOMPILING)
message(WARNING "Cross-compiling enabled, assuming LuaJIT is not broken")
set(VALID_LUAJIT_VERSION 1)
else(CMAKE_CROSSCOMPILING)
set(BACKUP_REQUIRED_INCS CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${LUA_INCLUDE_DIR}")
CHECK_C_SOURCE_RUNS("
#include <luajit.h>
#include <stdio.h>
#include <string.h>
#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
static char *broken_luajit_versions[] = {
\"LuaJIT 2.0.0-beta7\",
\"LuaJIT 2.0.0-beta6\",
\"LuaJIT 2.0.0-beta5\",
\"LuaJIT 2.0.0-beta4\",
\"LuaJIT 2.0.0-beta3\",
\"LuaJIT 2.0.0-beta2\",
\"LuaJIT 2.0.0-beta1\"
};
int main(int argc, char *argv[]) {
unsigned int i;
for (i = 0; i < ARRAYSIZE(broken_luajit_versions); i++) {
if (strcmp(LUAJIT_VERSION, broken_luajit_versions[i]) == 0) {
return 1;
}
}
return 0;
}
"
VALID_LUAJIT_VERSION)
set(CMAKE_REQUIRED_INCLUDES BACKUP_REQUIRED_INCS)
endif(CMAKE_CROSSCOMPILING)
if (VALID_LUAJIT_VERSION)
message (STATUS "LuaJIT version ok")
set(USE_LUAJIT 1)
else (VALID_LUAJIT_VERSION)
message (STATUS "LuaJIT versions till 2.0.0beta7 known to be broken, update to at least beta8")
set(USE_LUAJIT 0)
endif (VALID_LUAJIT_VERSION)
endif (LUA_LIBRARY AND LUA_INCLUDE_DIR)
if(NOT USE_LUAJIT)
message (STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
set(LUA_LIBRARY "lua")
add_subdirectory(lua)
endif(NOT USE_LUAJIT)
mark_as_advanced(LUA_LIBRARY)
mark_as_advanced(LUA_INCLUDE_DIR)
set(USE_LEVELDB 0)
OPTION(ENABLE_LEVELDB "Enable LevelDB backend")
if(ENABLE_LEVELDB)
find_library(LEVELDB_LIBRARY leveldb)
find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb)
message (STATUS "LevelDB library: ${LEVELDB_LIBRARY}")
message (STATUS "LevelDB headers: ${LEVELDB_INCLUDE_DIR}")
if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
set(USE_LEVELDB 1)
message(STATUS "LevelDB backend enabled")
include_directories(${LEVELDB_INCLUDE_DIR})
else(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
set(USE_LEVELDB 0)
message(STATUS "LevelDB not found!")
endif(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
endif(ENABLE_LEVELDB)
set(USE_REDIS 0)
OPTION(ENABLE_REDIS "Enable redis backend" 0)
if(ENABLE_REDIS)
find_library(REDIS_LIBRARY hiredis)
find_path(REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
message(STATUS "redis library: ${REDIS_LIBRARY}")
message(STATUS "redis headers: ${REDIS_INCLUDE_DIR}")
if(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
set(USE_REDIS 1)
message(STATUS "redis backend enabled")
include_directories(${REDIS_INCLUDE_DIR})
else(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
set(USE_REDIS 0)
message(STATUS "redis not found!")
endif(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
endif(ENABLE_REDIS)
CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
if(NOT HAVE_ENDIAN_H)
set(HAVE_ENDIAN_H 0)
endif(NOT HAVE_ENDIAN_H)
configure_file( configure_file(
"${PROJECT_SOURCE_DIR}/cmake_config.h.in" "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
"${PROJECT_BINARY_DIR}/cmake_config.h" "${PROJECT_BINARY_DIR}/cmake_config.h"
) )
# Add a target that always rebuilds cmake_config_githash.h # Add a target that always rebuilds cmake_config_githash.h
add_custom_target(GenerateVersion add_custom_target(GenerateVersion
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
@ -351,11 +265,13 @@ add_custom_target(GenerateVersion
-P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake" -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
add_subdirectory(jthread) add_subdirectory(jthread)
add_subdirectory(network) add_subdirectory(network)
add_subdirectory(script) add_subdirectory(script)
add_subdirectory(util) add_subdirectory(util)
set (unittests_SRCS set (unittests_SRCS
test.cpp test.cpp
) )
@ -437,9 +353,10 @@ set(common_SRCS
${unittests_SRCS} ${unittests_SRCS}
) )
# This gives us the icon and file version information # This gives us the icon and file version information
if(WIN32) if(WIN32)
set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc) set(WINRESOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc")
if(MINGW) if(MINGW)
if(NOT CMAKE_RC_COMPILER) if(NOT CMAKE_RC_COMPILER)
set(CMAKE_RC_COMPILER "windres.exe") set(CMAKE_RC_COMPILER "windres.exe")
@ -456,16 +373,16 @@ if(WIN32)
endif(MINGW) endif(MINGW)
endif() endif()
# Client sources
# Client sources
if (BUILD_CLIENT) if (BUILD_CLIENT)
add_subdirectory(client) add_subdirectory(client)
endif(BUILD_CLIENT) endif(BUILD_CLIENT)
set(minetest_SRCS set(client_SRCS
${client_SRCS}
${common_SRCS} ${common_SRCS}
${sound_SRCS} ${sound_SRCS}
${client_SRCS}
${client_network_SRCS} ${client_network_SRCS}
camera.cpp camera.cpp
chat.cpp chat.cpp
@ -500,16 +417,16 @@ set(minetest_SRCS
shader.cpp shader.cpp
sky.cpp sky.cpp
wieldmesh.cpp wieldmesh.cpp
${minetest_SCRIPT_SRCS} ${client_SCRIPT_SRCS}
) )
list(SORT minetest_SRCS) list(SORT client_SRCS)
# Server sources # Server sources
set(minetestserver_SRCS set(server_SRCS
${common_SRCS} ${common_SRCS}
main.cpp main.cpp
) )
list(SORT minetestserver_SRCS) list(SORT server_SRCS)
include_directories( include_directories(
${PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}
@ -526,26 +443,24 @@ include_directories(
${PROJECT_SOURCE_DIR}/script ${PROJECT_SOURCE_DIR}/script
) )
if(USE_FREETYPE) if(USE_FREETYPE)
include_directories( include_directories(${FREETYPE_INCLUDE_DIRS} ${CGUITTFONT_INCLUDE_DIR})
${FREETYPE_INCLUDE_DIRS} endif()
${CGUITTFONT_INCLUDE_DIR}
)
endif(USE_FREETYPE)
if(USE_CURL) if(USE_CURL)
include_directories( include_directories(${CURL_INCLUDE_DIR})
${CURL_INCLUDE_DIR} endif()
)
endif(USE_CURL)
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin") set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
if(BUILD_CLIENT) if(BUILD_CLIENT)
add_executable(${PROJECT_NAME} ${minetest_SRCS}) add_executable(${PROJECT_NAME_LOWER} ${client_SRCS})
add_dependencies(${PROJECT_NAME} GenerateVersion) add_dependencies(${PROJECT_NAME_LOWER} GenerateVersion)
set(minetest_LIBS set(client_LIBS
${PROJECT_NAME} ${PROJECT_NAME_LOWER}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${IRRLICHT_LIBRARY} ${IRRLICHT_LIBRARY}
${OPENGL_LIBRARIES} ${OPENGL_LIBRARIES}
@ -564,46 +479,47 @@ if(BUILD_CLIENT)
) )
if(APPLE) if(APPLE)
target_link_libraries( target_link_libraries(
${minetest_LIBS} ${client_LIBS}
${ICONV_LIBRARY} ${ICONV_LIBRARY}
) )
else() else()
target_link_libraries( target_link_libraries(
${minetest_LIBS} ${client_LIBS}
) )
endif() endif()
if(USE_CURL) if(USE_CURL)
target_link_libraries( target_link_libraries(
${PROJECT_NAME} ${PROJECT_NAME_LOWER}
${CURL_LIBRARY} ${CURL_LIBRARY}
) )
endif(USE_CURL) endif()
if(USE_FREETYPE) if(USE_FREETYPE)
if(FREETYPE_PKGCONFIG_FOUND) if(FREETYPE_PKGCONFIG_FOUND)
set_target_properties(${PROJECT_NAME} set_target_properties(${PROJECT_NAME_LOWER}
PROPERTIES PROPERTIES
COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}" COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
) )
endif(FREETYPE_PKGCONFIG_FOUND) endif()
target_link_libraries( target_link_libraries(
${PROJECT_NAME} ${PROJECT_NAME_LOWER}
${FREETYPE_LIBRARY} ${FREETYPE_LIBRARY}
${CGUITTFONT_LIBRARY} ${CGUITTFONT_LIBRARY}
) )
endif(USE_FREETYPE) endif()
if (USE_LEVELDB) if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY}) target_link_libraries(${PROJECT_NAME_LOWER} ${LEVELDB_LIBRARY})
endif(USE_LEVELDB) endif()
if (USE_REDIS) if (USE_REDIS)
target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY}) target_link_libraries(${PROJECT_NAME_LOWER} ${REDIS_LIBRARY})
endif(USE_REDIS) endif()
endif(BUILD_CLIENT) endif(BUILD_CLIENT)
if(BUILD_SERVER) if(BUILD_SERVER)
add_executable(${PROJECT_NAME}server ${minetestserver_SRCS}) add_executable(${PROJECT_NAME_LOWER}server ${server_SRCS})
add_dependencies(${PROJECT_NAME}server GenerateVersion) add_dependencies(${PROJECT_NAME_LOWER}server GenerateVersion)
target_link_libraries( target_link_libraries(
${PROJECT_NAME}server ${PROJECT_NAME_LOWER}server
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${SQLITE3_LIBRARY} ${SQLITE3_LIBRARY}
${JSON_LIBRARY} ${JSON_LIBRARY}
@ -611,24 +527,24 @@ if(BUILD_SERVER)
${LUA_LIBRARY} ${LUA_LIBRARY}
${PLATFORM_LIBS} ${PLATFORM_LIBS}
) )
set_target_properties(${PROJECT_NAME_LOWER}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")
if (USE_LEVELDB) if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY}) target_link_libraries(${PROJECT_NAME_LOWER}server ${LEVELDB_LIBRARY})
endif(USE_LEVELDB) endif()
if (USE_REDIS) if (USE_REDIS)
target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY}) target_link_libraries(${PROJECT_NAME_LOWER}server ${REDIS_LIBRARY})
endif(USE_REDIS) endif()
if(USE_CURL) if(USE_CURL)
target_link_libraries( target_link_libraries(
${PROJECT_NAME}server ${PROJECT_NAME_LOWER}server
${CURL_LIBRARY} ${CURL_LIBRARY}
) )
endif(USE_CURL) endif()
endif(BUILD_SERVER) endif(BUILD_SERVER)
#
# Set some optimizations and tweaks # Set some optimizations and tweaks
#
include(CheckCXXCompilerFlag) include(CheckCXXCompilerFlag)
@ -649,12 +565,6 @@ if(MSVC)
# Flags for C files (sqlite) # Flags for C files (sqlite)
# /MT = Link statically with standard library stuff # /MT = Link statically with standard library stuff
set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT") set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
if(BUILD_SERVER)
set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")
endif(BUILD_SERVER)
else() else()
# Probably GCC # Probably GCC
if(APPLE) if(APPLE)
@ -687,20 +597,11 @@ else()
if(USE_GPROF) if(USE_GPROF)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
endif() endif()
if(BUILD_SERVER)
set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")
endif(BUILD_SERVER)
endif() endif()
#MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
#MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
#
# Installation # Installation
#
if(WIN32) if(WIN32)
if(USE_SOUND) if(USE_SOUND)
if(OPENAL_DLL) if(OPENAL_DLL)
@ -737,7 +638,7 @@ if(WIN32)
endif() endif()
if(BUILD_CLIENT) if(BUILD_CLIENT)
install(TARGETS ${PROJECT_NAME} install(TARGETS ${PROJECT_NAME_LOWER}
RUNTIME DESTINATION ${BINDIR} RUNTIME DESTINATION ${BINDIR}
LIBRARY DESTINATION ${BINDIR} LIBRARY DESTINATION ${BINDIR}
ARCHIVE DESTINATION ${BINDIR} ARCHIVE DESTINATION ${BINDIR}
@ -755,9 +656,9 @@ if(BUILD_CLIENT)
if(USE_GETTEXT) if(USE_GETTEXT)
foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE}) set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo") set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME_LOWER}.mo")
install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH}) install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) endforeach()
endif() endif()
if(WIN32) if(WIN32)
@ -771,21 +672,21 @@ if(BUILD_CLIENT)
if(DEFINED GETTEXT_ICONV_DLL) if(DEFINED GETTEXT_ICONV_DLL)
install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR}) install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
endif() endif()
endif(USE_GETTEXT) endif()
endif() endif()
endif(BUILD_CLIENT) endif(BUILD_CLIENT)
if(BUILD_SERVER) if(BUILD_SERVER)
install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR}) install(TARGETS ${PROJECT_NAME_LOWER}server DESTINATION ${BINDIR})
endif(BUILD_SERVER) endif()
if (USE_GETTEXT) if (USE_GETTEXT)
set(MO_FILES) set(MO_FILES)
foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po") set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/${PROJECT_NAME_LOWER}.po")
set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE}) set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo") set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME_LOWER}.mo")
add_custom_command(OUTPUT ${MO_BUILD_PATH} add_custom_command(OUTPUT ${MO_BUILD_PATH}
COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH} COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
@ -800,20 +701,15 @@ if (USE_GETTEXT)
) )
set(MO_FILES ${MO_FILES} ${MO_FILE_PATH}) set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) endforeach()
add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES}) add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
endif(USE_GETTEXT) endif()
# Subdirectories # Subdirectories
if (BUILD_CLIENT AND USE_FREETYPE) if (BUILD_CLIENT AND USE_FREETYPE)
add_subdirectory(cguittfont) add_subdirectory(cguittfont)
endif (BUILD_CLIENT AND USE_FREETYPE) endif()
if (JSON_FOUND)
else (JSON_FOUND)
add_subdirectory(json)
endif (JSON_FOUND)
#end

View File

@ -119,34 +119,22 @@ Camera::~Camera()
m_wieldmgr->drop(); m_wieldmgr->drop();
} }
bool Camera::successfullyCreated(std::wstring& error_message) bool Camera::successfullyCreated(std::string &error_message)
{ {
if (m_playernode == NULL) if (!m_playernode) {
{ error_message = "Failed to create the player scene node";
error_message = L"Failed to create the player scene node"; } else if (!m_headnode) {
return false; error_message = "Failed to create the head scene node";
} else if (!m_cameranode) {
error_message = "Failed to create the camera scene node";
} else if (!m_wieldmgr) {
error_message = "Failed to create the wielded item scene manager";
} else if (!m_wieldnode) {
error_message = "Failed to create the wielded item scene node";
} else {
error_message.clear();
} }
if (m_headnode == NULL) return error_message.empty();
{
error_message = L"Failed to create the head scene node";
return false;
}
if (m_cameranode == NULL)
{
error_message = L"Failed to create the camera scene node";
return false;
}
if (m_wieldmgr == NULL)
{
error_message = L"Failed to create the wielded item scene manager";
return false;
}
if (m_wieldnode == NULL)
{
error_message = L"Failed to create the wielded item scene node";
return false;
}
return true;
} }
// Returns the fractional part of x // Returns the fractional part of x

View File

@ -110,7 +110,7 @@ public:
} }
// Checks if the constructor was able to create the scene nodes // Checks if the constructor was able to create the scene nodes
bool successfullyCreated(std::wstring& error_message); bool successfullyCreated(std::string &error_message);
// Step the camera: updates the viewing range and view bobbing. // Step the camera: updates the viewing range and view bobbing.
void step(f32 dtime); void step(f32 dtime);

View File

@ -27,3 +27,4 @@ target_link_libraries(
${FREETYPE_LIBRARY} ${FREETYPE_LIBRARY}
${ZLIB_LIBRARIES} # needed by freetype, repeated here for safety ${ZLIB_LIBRARIES} # needed by freetype, repeated here for safety
) )

View File

@ -1126,12 +1126,12 @@ void Client::sendReady()
DSTACK(__FUNCTION_NAME); DSTACK(__FUNCTION_NAME);
NetworkPacket pkt(TOSERVER_CLIENT_READY, NetworkPacket pkt(TOSERVER_CLIENT_READY,
1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(minetest_version_hash)); 1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(g_version_hash));
pkt << (u8) VERSION_MAJOR << (u8) VERSION_MINOR << (u8) VERSION_PATCH_ORIG pkt << (u8) VERSION_MAJOR << (u8) VERSION_MINOR << (u8) VERSION_PATCH
<< (u8) 0 << (u16) strlen(minetest_version_hash); << (u8) 0 << (u16) strlen(g_version_hash);
pkt.putRawString(minetest_version_hash, (u16) strlen(minetest_version_hash)); pkt.putRawString(g_version_hash, (u16) strlen(g_version_hash));
Send(&pkt); Send(&pkt);
} }
@ -1710,13 +1710,22 @@ void Client::makeScreenshot(IrrlichtDevice *device)
if (image) { if (image) {
raw_image->copyTo(image); raw_image->copyTo(image);
irr::c8 filename[256];
snprintf(filename, sizeof(filename), std::string filename;
(std::string("%s") + DIR_DELIM + "screenshot_%u.png").c_str(),
g_settings->get("screenshot_path").c_str(), time_t t = time(NULL);
device->getTimer()->getRealTime()); struct tm *tm = localtime(&t);
char timetstamp_c[16]; // YYYYMMDD_HHMMSS + '\0'
strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
filename = g_settings->get("screenshot_path")
+ DIR_DELIM
+ std::string("screenshot_")
+ std::string(timetstamp_c)
+ ".png";
std::ostringstream sstr; std::ostringstream sstr;
if (driver->writeImageToFile(image, filename)) { if (driver->writeImageToFile(image, filename.c_str())) {
sstr << "Saved screenshot to '" << filename << "'"; sstr << "Saved screenshot to '" << filename << "'";
} else { } else {
sstr << "Failed to save screenshot '" << filename << "'"; sstr << "Failed to save screenshot '" << filename << "'";

View File

@ -480,7 +480,7 @@ public:
bool accessDenied() bool accessDenied()
{ return m_access_denied; } { return m_access_denied; }
std::wstring accessDeniedReason() std::string accessDeniedReason()
{ return m_access_denied_reason; } { return m_access_denied_reason; }
bool itemdefReceived() bool itemdefReceived()
@ -589,7 +589,7 @@ private:
u64 m_map_seed; u64 m_map_seed;
std::string m_password; std::string m_password;
bool m_access_denied; bool m_access_denied;
std::wstring m_access_denied_reason; std::string m_access_denied_reason;
std::queue<ClientEvent> m_client_event_queue; std::queue<ClientEvent> m_client_event_queue;
bool m_itemdef_received; bool m_itemdef_received;
bool m_nodedef_received; bool m_nodedef_received;

View File

@ -3,3 +3,4 @@ set(client_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/tile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tile.cpp
PARENT_SCOPE PARENT_SCOPE
) )

View File

@ -81,6 +81,9 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
return false; return false;
} }
// Create time getter
g_timegetter = new IrrlichtTimeGetter(device);
// Speed tests (done after irrlicht is loaded to get timer) // Speed tests (done after irrlicht is loaded to get timer)
if (cmd_args.getFlag("speedtests")) { if (cmd_args.getFlag("speedtests")) {
dstream << "Running speed tests" << std::endl; dstream << "Running speed tests" << std::endl;
@ -94,7 +97,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
return false; return false;
} }
porting::setXorgClassHint(video_driver->getExposedVideoData(), "Minetest"); porting::setXorgClassHint(video_driver->getExposedVideoData(), PROJECT_NAME);
/* /*
This changes the minimum allowed number of vertices in a VBO. This changes the minimum allowed number of vertices in a VBO.
@ -102,9 +105,6 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
*/ */
//driver->setMinHardwareBufferVertexCount(50); //driver->setMinHardwareBufferVertexCount(50);
// Create time getter
g_timegetter = new IrrlichtTimeGetter(device);
// Create game callback for menus // Create game callback for menus
g_gamecallback = new MainGameCallback(device); g_gamecallback = new MainGameCallback(device);
@ -156,7 +156,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
// If an error occurs, this is set to something by menu(). // If an error occurs, this is set to something by menu().
// It is then displayed before the menu shows on the next call to menu() // It is then displayed before the menu shows on the next call to menu()
std::wstring error_message = L""; std::string error_message;
bool first_loop = true; bool first_loop = true;
@ -170,7 +170,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
{ {
// Set the window caption // Set the window caption
const wchar_t *text = wgettext("Main Menu"); const wchar_t *text = wgettext("Main Menu");
device->setWindowCaption((std::wstring(L"Minetest [") + text + L"]").c_str()); device->setWindowCaption((narrow_to_wide(PROJECT_NAME) + L" [" + text + L"]").c_str());
delete[] text; delete[] text;
try { // This is used for catching disconnects try { // This is used for catching disconnects
@ -184,7 +184,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
*/ */
guiroot = guienv->addStaticText(L"", core::rect<s32>(0, 0, 10000, 10000)); guiroot = guienv->addStaticText(L"", core::rect<s32>(0, 0, 10000, 10000));
bool game_has_run = launch_game(&error_message, game_params, cmd_args); bool game_has_run = launch_game(error_message, game_params, cmd_args);
// If skip_main_menu, we only want to startup once // If skip_main_menu, we only want to startup once
if (skip_main_menu && !first_loop) if (skip_main_menu && !first_loop)
@ -207,7 +207,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
} }
if (current_playername.length() > PLAYERNAME_SIZE-1) { if (current_playername.length() > PLAYERNAME_SIZE-1) {
error_message = wgettext("Player name too long."); error_message = gettext("Player name too long.");
playername = current_playername.substr(0, PLAYERNAME_SIZE-1); playername = current_playername.substr(0, PLAYERNAME_SIZE-1);
g_settings->set("name", playername); g_settings->set("name", playername);
continue; continue;
@ -245,25 +245,24 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
} //try } //try
catch (con::PeerNotFoundException &e) { catch (con::PeerNotFoundException &e) {
error_message = wgettext("Connection error (timed out?)"); error_message = gettext("Connection error (timed out?)");
errorstream << wide_to_narrow(error_message) << std::endl; errorstream << error_message << std::endl;
} }
#ifdef NDEBUG #ifdef NDEBUG
catch (std::exception &e) { catch (std::exception &e) {
std::string narrow_message = "Some exception: \""; std::string error_message = "Some exception: \"";
narrow_message += e.what(); error_message += e.what();
narrow_message += "\""; error_message += "\"";
errorstream << narrow_message << std::endl; errorstream << error_message << std::endl;
error_message = narrow_to_wide(narrow_message);
} }
#endif #endif
// If no main menu, show error and exit // If no main menu, show error and exit
if (skip_main_menu) { if (skip_main_menu) {
if (error_message != L"") { if (!error_message.empty()) {
verbosestream << "error_message = " verbosestream << "error_message = "
<< wide_to_narrow(error_message) << std::endl; << error_message << std::endl;
retval = false; retval = false;
} }
break; break;
@ -312,7 +311,7 @@ bool ClientLauncher::init_engine(int log_level)
return device != NULL; return device != NULL;
} }
bool ClientLauncher::launch_game(std::wstring *error_message, bool ClientLauncher::launch_game(std::string &error_message,
GameParams &game_params, const Settings &cmd_args) GameParams &game_params, const Settings &cmd_args)
{ {
// Initialize menu data // Initialize menu data
@ -320,9 +319,9 @@ bool ClientLauncher::launch_game(std::wstring *error_message,
menudata.address = address; menudata.address = address;
menudata.name = playername; menudata.name = playername;
menudata.port = itos(game_params.socket_port); menudata.port = itos(game_params.socket_port);
menudata.errormessage = wide_to_narrow(*error_message); menudata.errormessage = error_message;
*error_message = L""; error_message.clear();
if (cmd_args.exists("password")) if (cmd_args.exists("password"))
menudata.password = cmd_args.get("password"); menudata.password = cmd_args.get("password");
@ -367,11 +366,11 @@ bool ClientLauncher::launch_game(std::wstring *error_message,
} }
} }
if (menudata.errormessage != "") { if (!menudata.errormessage.empty()) {
/* The calling function will pass this back into this function upon the /* The calling function will pass this back into this function upon the
* next iteration (if any) causing it to be displayed by the GUI * next iteration (if any) causing it to be displayed by the GUI
*/ */
*error_message = narrow_to_wide(menudata.errormessage); error_message = menudata.errormessage;
return false; return false;
} }
@ -410,25 +409,25 @@ bool ClientLauncher::launch_game(std::wstring *error_message,
if (current_address == "") { // If local game if (current_address == "") { // If local game
if (worldspec.path == "") { if (worldspec.path == "") {
*error_message = wgettext("No world selected and no address " error_message = gettext("No world selected and no address "
"provided. Nothing to do."); "provided. Nothing to do.");
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << error_message << std::endl;
return false; return false;
} }
if (!fs::PathExists(worldspec.path)) { if (!fs::PathExists(worldspec.path)) {
*error_message = wgettext("Provided world path doesn't exist: ") error_message = gettext("Provided world path doesn't exist: ")
+ narrow_to_wide(worldspec.path); + worldspec.path;
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << error_message << std::endl;
return false; return false;
} }
// Load gamespec for required game // Load gamespec for required game
gamespec = findWorldSubgame(worldspec.path); gamespec = findWorldSubgame(worldspec.path);
if (!gamespec.isValid() && !game_params.game_spec.isValid()) { if (!gamespec.isValid() && !game_params.game_spec.isValid()) {
*error_message = wgettext("Could not find or load game \"") error_message = gettext("Could not find or load game \"")
+ narrow_to_wide(worldspec.gameid) + L"\""; + worldspec.gameid + "\"";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << error_message << std::endl;
return false; return false;
} }
@ -444,10 +443,9 @@ bool ClientLauncher::launch_game(std::wstring *error_message,
} }
if (!gamespec.isValid()) { if (!gamespec.isValid()) {
*error_message = wgettext("Invalid gamespec."); error_message = gettext("Invalid gamespec.");
*error_message += L" (world_gameid=" error_message += " (world.gameid=" + worldspec.gameid + ")";
+ narrow_to_wide(worldspec.gameid) + L")"; errorstream << error_message << std::endl;
errorstream << wide_to_narrow(*error_message) << std::endl;
return false; return false;
} }
} }

View File

@ -92,7 +92,7 @@ protected:
void init_args(GameParams &game_params, const Settings &cmd_args); void init_args(GameParams &game_params, const Settings &cmd_args);
bool init_engine(int log_level); bool init_engine(int log_level);
bool launch_game(std::wstring *error_message, GameParams &game_params, bool launch_game(std::string &error_message, GameParams &game_params,
const Settings &cmd_args); const Settings &cmd_args);
void main_menu(MainMenuData *menudata); void main_menu(MainMenuData *menudata);

View File

@ -3,31 +3,24 @@
#ifndef CMAKE_CONFIG_H #ifndef CMAKE_CONFIG_H
#define CMAKE_CONFIG_H #define CMAKE_CONFIG_H
#define CMAKE_PROJECT_NAME "@PROJECT_NAME@" #define PROJECT_NAME "@PROJECT_NAME@"
#define CMAKE_VERSION_STRING "@VERSION_STRING@" #define VERSION_MAJOR @VERSION_MAJOR@
#define CMAKE_PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@" #define VERSION_MINOR @VERSION_MINOR@
#define CMAKE_RUN_IN_PLACE @RUN_IN_PLACE@ #define VERSION_PATCH @VERSION_PATCH@
#define CMAKE_USE_GETTEXT @USE_GETTEXT@ #define VERSION_EXTRA "@VERSION_EXTRA@"
#define CMAKE_USE_CURL @USE_CURL@ #define VERSION_STRING "@VERSION_STRING@"
#define CMAKE_USE_SOUND @USE_SOUND@ #define PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@"
#define CMAKE_USE_FREETYPE @USE_FREETYPE@ #define STATIC_SHAREDIR "@SHAREDIR@"
#define CMAKE_STATIC_SHAREDIR "@SHAREDIR@" #define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#define CMAKE_USE_LEVELDB @USE_LEVELDB@ #cmakedefine01 RUN_IN_PLACE
#define CMAKE_USE_LUAJIT @USE_LUAJIT@ #cmakedefine01 USE_GETTEXT
#define CMAKE_USE_REDIS @USE_REDIS@ #cmakedefine01 USE_CURL
#define CMAKE_VERSION_MAJOR @VERSION_MAJOR@ #cmakedefine01 USE_SOUND
#define CMAKE_VERSION_MINOR @VERSION_MINOR@ #cmakedefine01 USE_FREETYPE
#define CMAKE_VERSION_PATCH @VERSION_PATCH@ #cmakedefine01 USE_LEVELDB
#define CMAKE_VERSION_PATCH_ORIG @VERSION_PATCH_ORIG@ #cmakedefine01 USE_LUAJIT
#define CMAKE_VERSION_EXTRA_STRING "@VERSION_EXTRA@" #cmakedefine01 USE_REDIS
#define CMAKE_HAVE_ENDIAN_H @HAVE_ENDIAN_H@ #cmakedefine01 HAVE_ENDIAN_H
#ifdef NDEBUG
#define CMAKE_BUILD_TYPE "Release"
#else
#define CMAKE_BUILD_TYPE "Debug"
#endif
#define CMAKE_BUILD_INFO "BUILD_TYPE=" CMAKE_BUILD_TYPE " RUN_IN_PLACE=@RUN_IN_PLACE@ USE_GETTEXT=@USE_GETTEXT@ USE_SOUND=@USE_SOUND@ USE_CURL=@USE_CURL@ USE_FREETYPE=@USE_FREETYPE@ USE_LUAJIT=@USE_LUAJIT@ STATIC_SHAREDIR=@SHAREDIR@"
#endif #endif

View File

@ -4,7 +4,7 @@
#ifndef CMAKE_CONFIG_GITHASH_H #ifndef CMAKE_CONFIG_GITHASH_H
#define CMAKE_CONFIG_GITHASH_H #define CMAKE_CONFIG_GITHASH_H
#define CMAKE_VERSION_GITHASH "@VERSION_GITHASH@" #define VERSION_GITHASH "@VERSION_GITHASH@"
#endif #endif

View File

@ -6,82 +6,36 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
#define PROJECT_NAME "Minetest" #define STRINGIFY(x) #x
#define RUN_IN_PLACE 0 #define STR(x) STRINGIFY(x)
#define STATIC_SHAREDIR ""
#define USE_GETTEXT 0
#ifndef USE_SOUND #if defined USE_CMAKE_CONFIG_H
#define USE_SOUND 0
#endif
#ifndef USE_CURL
#define USE_CURL 0
#endif
#ifndef USE_FREETYPE
#define USE_FREETYPE 0
#endif
#ifndef USE_LEVELDB
#define USE_LEVELDB 0
#endif
#ifndef USE_LUAJIT
#define USE_LUAJIT 0
#endif
#ifndef USE_REDIS
#define USE_REDIS 0
#endif
#define HAVE_ENDIAN_H 0
#ifdef USE_CMAKE_CONFIG_H
#include "cmake_config.h" #include "cmake_config.h"
#undef PROJECT_NAME #elif defined (__ANDROID__) || defined (ANDROID)
#define PROJECT_NAME CMAKE_PROJECT_NAME #define PROJECT_NAME "Minetest"
#undef RUN_IN_PLACE #define STATIC_SHAREDIR ""
#define RUN_IN_PLACE CMAKE_RUN_IN_PLACE
#undef USE_GETTEXT
#define USE_GETTEXT CMAKE_USE_GETTEXT
#undef USE_SOUND
#define USE_SOUND CMAKE_USE_SOUND
#undef USE_CURL
#define USE_CURL CMAKE_USE_CURL
#undef USE_FREETYPE
#define USE_FREETYPE CMAKE_USE_FREETYPE
#undef STATIC_SHAREDIR
#define STATIC_SHAREDIR CMAKE_STATIC_SHAREDIR
#undef USE_LEVELDB
#define USE_LEVELDB CMAKE_USE_LEVELDB
#undef USE_LUAJIT
#define USE_LUAJIT CMAKE_USE_LUAJIT
#undef USE_REDIS
#define USE_REDIS CMAKE_USE_REDIS
#undef VERSION_MAJOR
#define VERSION_MAJOR CMAKE_VERSION_MAJOR
#undef VERSION_MINOR
#define VERSION_MINOR CMAKE_VERSION_MINOR
#undef VERSION_PATCH
#define VERSION_PATCH CMAKE_VERSION_PATCH
#undef VERSION_PATCH_ORIG
#define VERSION_PATCH_ORIG CMAKE_VERSION_PATCH_ORIG
#undef VERSION_STRING
#define VERSION_STRING CMAKE_VERSION_STRING
#undef PRODUCT_VERSION_STRING
#define PRODUCT_VERSION_STRING CMAKE_PRODUCT_VERSION_STRING
#undef VERSION_EXTRA_STRING
#define VERSION_EXTRA_STRING CMAKE_VERSION_EXTRA_STRING
#undef HAVE_ENDIAN_H
#define HAVE_ENDIAN_H CMAKE_HAVE_ENDIAN_H
#endif
#ifdef __ANDROID__
#include "android_version.h" #include "android_version.h"
#define VERSION_STRING CMAKE_VERSION_STRING #ifdef NDEBUG
#define BUILD_TYPE "Release"
#else
#define BUILD_TYPE "Debug"
#endif
#else
#ifdef NDEBUG
#define BUILD_TYPE "Release"
#else
#define BUILD_TYPE "Debug"
#endif
#endif #endif
#endif #define BUILD_INFO "BUILD_TYPE=" BUILD_TYPE \
" RUN_IN_PLACE=" STR(RUN_IN_PLACE) \
" USE_GETTEXT=" STR(USE_GETTEXT) \
" USE_SOUND=" STR(USE_SOUND) \
" USE_CURL=" STR(USE_CURL) \
" USE_FREETYPE=" STR(USE_FREETYPE) \
" USE_LUAJIT=" STR(USE_LUAJIT) \
" STATIC_SHAREDIR=" STR(STATIC_SHAREDIR)
#endif

View File

@ -385,9 +385,11 @@ long WINAPI Win32ExceptionHandler(struct _EXCEPTION_POINTERS *pExceptInfo)
MINIDUMP_USER_STREAM_INFORMATION mdusi; MINIDUMP_USER_STREAM_INFORMATION mdusi;
MINIDUMP_USER_STREAM mdus; MINIDUMP_USER_STREAM mdus;
bool minidump_created = false; bool minidump_created = false;
std::string version_str("Minetest ");
std::string dumpfile = porting::path_user + DIR_DELIM "minetest.dmp"; std::string dumpfile = porting::path_user + DIR_DELIM PROJECT_NAME ".dmp";
std::string version_str(PROJECT_NAME " ");
version_str += g_version_hash;
HANDLE hFile = CreateFileA(dumpfile.c_str(), GENERIC_WRITE, HANDLE hFile = CreateFileA(dumpfile.c_str(), GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
@ -401,8 +403,6 @@ long WINAPI Win32ExceptionHandler(struct _EXCEPTION_POINTERS *pExceptInfo)
mdei.ExceptionPointers = pExceptInfo; mdei.ExceptionPointers = pExceptInfo;
mdei.ThreadId = GetCurrentThreadId(); mdei.ThreadId = GetCurrentThreadId();
version_str += minetest_version_hash;
mdus.Type = CommentStreamA; mdus.Type = CommentStreamA;
mdus.BufferSize = version_str.size(); mdus.BufferSize = version_str.size();
mdus.Buffer = (PVOID)version_str.c_str(); mdus.Buffer = (PVOID)version_str.c_str();

View File

@ -319,7 +319,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_particles", "false"); settings->setDefault("enable_particles", "false");
settings->setDefault("video_driver", "ogles1"); settings->setDefault("video_driver", "ogles1");
settings->setDefault("touchtarget", "true"); settings->setDefault("touchtarget", "true");
settings->setDefault("TMPFolder","/sdcard/Minetest/tmp/"); settings->setDefault("TMPFolder","/sdcard/" PROJECT_NAME "/tmp/");
settings->setDefault("touchscreen_threshold","20"); settings->setDefault("touchscreen_threshold","20");
settings->setDefault("smooth_lighting", "false"); settings->setDefault("smooth_lighting", "false");
settings->setDefault("max_simultaneous_block_sends_per_client", "3"); settings->setDefault("max_simultaneous_block_sends_per_client", "3");

View File

@ -519,20 +519,22 @@ void *EmergeThread::Thread()
} }
catch (VersionMismatchException &e) { catch (VersionMismatchException &e) {
std::ostringstream err; std::ostringstream err;
err << "World data version mismatch in MapBlock "<<PP(last_tried_pos)<<std::endl; err << "World data version mismatch in MapBlock " << PP(last_tried_pos) << std::endl
err << "----"<<std::endl; << "----" << std::endl
err << "\""<<e.what()<<"\""<<std::endl; << "\"" << e.what() << "\"" << std::endl
err << "See debug.txt."<<std::endl; << "See debug.txt." << std::endl
err << "World probably saved by a newer version of Minetest."<<std::endl; << "World probably saved by a newer version of " PROJECT_NAME "."
<< std::endl;
m_server->setAsyncFatalError(err.str()); m_server->setAsyncFatalError(err.str());
} }
catch (SerializationError &e) { catch (SerializationError &e) {
std::ostringstream err; std::ostringstream err;
err << "Invalid data in MapBlock "<<PP(last_tried_pos)<<std::endl; err << "Invalid data in MapBlock " << PP(last_tried_pos) << std::endl
err << "----"<<std::endl; << "----" << std::endl
err << "\""<<e.what()<<"\""<<std::endl; << "\"" << e.what() << "\"" << std::endl
err << "See debug.txt."<<std::endl; << "See debug.txt." << std::endl
err << "You can ignore this using [ignore_world_load_errors = true]."<<std::endl; << "You can ignore this using [ignore_world_load_errors = true]."
<< std::endl;
m_server->setAsyncFatalError(err.str()); m_server->setAsyncFatalError(err.str());
} }

View File

@ -1134,8 +1134,8 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;" os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;"
<< wide_to_narrow(wstrgettext("Exit to OS")) << "]" << wide_to_narrow(wstrgettext("Exit to OS")) << "]"
<< "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]" << "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]"
<< "textarea[0.4,0.25;3.5,6;;" << "Minetest\n" << "textarea[0.4,0.25;3.5,6;;" << PROJECT_NAME "\n"
<< minetest_build_info << "\n" << g_build_info << "\n"
<< "path_user = " << wrap_rows(porting::path_user, 20) << "path_user = " << wrap_rows(porting::path_user, 20)
<< "\n;]"; << "\n;]";
@ -1423,7 +1423,7 @@ public:
// If address is "", local server is used and address is updated // If address is "", local server is used and address is updated
std::string *address, std::string *address,
u16 port, u16 port,
std::wstring *error_message, std::string &error_message,
ChatBackend *chat_backend, ChatBackend *chat_backend,
const SubgameSpec &gamespec, // Used for local game const SubgameSpec &gamespec, // Used for local game
bool simple_singleplayer_mode); bool simple_singleplayer_mode);
@ -1445,9 +1445,8 @@ protected:
// Client creation // Client creation
bool createClient(const std::string &playername, bool createClient(const std::string &playername,
const std::string &password, std::string *address, u16 port, const std::string &password, std::string *address, u16 port);
std::wstring *error_message); bool initGui();
bool initGui(std::wstring *error_message);
// Client connection // Client connection
bool connectToServer(const std::string &playername, bool connectToServer(const std::string &playername,
@ -1575,7 +1574,7 @@ private:
video::IVideoDriver *driver; video::IVideoDriver *driver;
scene::ISceneManager *smgr; scene::ISceneManager *smgr;
bool *kill; bool *kill;
std::wstring *error_message; std::string *error_message;
IGameDef *gamedef; // Convenience (same as *client) IGameDef *gamedef; // Convenience (same as *client)
scene::ISceneNode *skybox; scene::ISceneNode *skybox;
@ -1692,7 +1691,7 @@ bool Game::startup(bool *kill,
const std::string &password, const std::string &password,
std::string *address, // can change if simple_singleplayer_mode std::string *address, // can change if simple_singleplayer_mode
u16 port, u16 port,
std::wstring *error_message, std::string &error_message,
ChatBackend *chat_backend, ChatBackend *chat_backend,
const SubgameSpec &gamespec, const SubgameSpec &gamespec,
bool simple_singleplayer_mode) bool simple_singleplayer_mode)
@ -1700,7 +1699,7 @@ bool Game::startup(bool *kill,
// "cache" // "cache"
this->device = device; this->device = device;
this->kill = kill; this->kill = kill;
this->error_message = error_message; this->error_message = &error_message;
this->random_input = random_input; this->random_input = random_input;
this->input = input; this->input = input;
this->chat_backend = chat_backend; this->chat_backend = chat_backend;
@ -1714,7 +1713,7 @@ bool Game::startup(bool *kill,
if (!init(map_dir, address, port, gamespec)) if (!init(map_dir, address, port, gamespec))
return false; return false;
if (!createClient(playername, password, address, port, error_message)) if (!createClient(playername, password, address, port))
return false; return false;
return true; return true;
@ -1934,10 +1933,10 @@ bool Game::createSingleplayerServer(const std::string map_dir,
} }
if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) { if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) {
*error_message = L"Unable to listen on " + *error_message = "Unable to listen on " +
narrow_to_wide(bind_addr.serializeString()) + bind_addr.serializeString() +
L" because IPv6 is disabled"; " because IPv6 is disabled";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
@ -1950,8 +1949,7 @@ bool Game::createSingleplayerServer(const std::string map_dir,
} }
bool Game::createClient(const std::string &playername, bool Game::createClient(const std::string &playername,
const std::string &password, std::string *address, u16 port, const std::string &password, std::string *address, u16 port)
std::wstring *error_message)
{ {
showOverlayMessage(wgettext("Creating client..."), 0, 10); showOverlayMessage(wgettext("Creating client..."), 0, 10);
@ -1966,19 +1964,19 @@ bool Game::createClient(const std::string &playername,
return false; return false;
if (!could_connect) { if (!could_connect) {
if (*error_message == L"" && !connect_aborted) { if (error_message->empty() && !connect_aborted) {
// Should not happen if error messages are set properly // Should not happen if error messages are set properly
*error_message = L"Connection failed for unknown reason"; *error_message = "Connection failed for unknown reason";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
} }
return false; return false;
} }
if (!getServerContent(&connect_aborted)) { if (!getServerContent(&connect_aborted)) {
if (*error_message == L"" && !connect_aborted) { if (error_message->empty() && !connect_aborted) {
// Should not happen if error messages are set properly // Should not happen if error messages are set properly
*error_message = L"Connection failed for unknown reason"; *error_message = "Connection failed for unknown reason";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
} }
return false; return false;
} }
@ -1997,9 +1995,8 @@ bool Game::createClient(const std::string &playername,
if (m_cache_enable_clouds) { if (m_cache_enable_clouds) {
clouds = new Clouds(smgr->getRootSceneNode(), smgr, -1, time(0)); clouds = new Clouds(smgr->getRootSceneNode(), smgr, -1, time(0));
if (!clouds) { if (!clouds) {
*error_message = L"Memory allocation error"; *error_message = "Memory allocation error (clouds)";
*error_message += narrow_to_wide(" (clouds)"); errorstream << *error_message << std::endl;
errorstream << wide_to_narrow(*error_message) << std::endl;
return false; return false;
} }
} }
@ -2012,9 +2009,8 @@ bool Game::createClient(const std::string &playername,
local_inventory = new Inventory(itemdef_manager); local_inventory = new Inventory(itemdef_manager);
if (!(sky && local_inventory)) { if (!(sky && local_inventory)) {
*error_message = L"Memory allocation error"; *error_message = "Memory allocation error (sky or local inventory)";
*error_message += narrow_to_wide(" (sky or local inventory)"); errorstream << *error_message << std::endl;
errorstream << wide_to_narrow(*error_message) << std::endl;
return false; return false;
} }
@ -2028,14 +2024,15 @@ bool Game::createClient(const std::string &playername,
crack_animation_length = 5; crack_animation_length = 5;
} }
if (!initGui(error_message)) if (!initGui())
return false; return false;
/* Set window caption /* Set window caption
*/ */
core::stringw str = L"Minetest ["; std::wstring str = narrow_to_wide(PROJECT_NAME);
str += L" [";
str += driver->getName(); str += driver->getName();
str += "]"; str += L"]";
device->setWindowCaption(str.c_str()); device->setWindowCaption(str.c_str());
LocalPlayer *player = client->getEnv().getLocalPlayer(); LocalPlayer *player = client->getEnv().getLocalPlayer();
@ -2045,19 +2042,19 @@ bool Game::createClient(const std::string &playername,
hud = new Hud(driver, smgr, guienv, gamedef, player, local_inventory); hud = new Hud(driver, smgr, guienv, gamedef, player, local_inventory);
if (!hud) { if (!hud) {
*error_message = L"Memory error: could not create HUD"; *error_message = "Memory error: could not create HUD";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
return true; return true;
} }
bool Game::initGui(std::wstring *error_message) bool Game::initGui()
{ {
// First line of debug text // First line of debug text
guitext = guienv->addStaticText( guitext = guienv->addStaticText(
L"Minetest", narrow_to_wide(PROJECT_NAME).c_str(),
core::rect<s32>(0, 0, 0, 0), core::rect<s32>(0, 0, 0, 0),
false, false, guiroot); false, false, guiroot);
@ -2094,8 +2091,8 @@ bool Game::initGui(std::wstring *error_message)
gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(),
-1, chat_backend, client); -1, chat_backend, client);
if (!gui_chat_console) { if (!gui_chat_console) {
*error_message = L"Could not allocate memory for chat console"; *error_message = "Could not allocate memory for chat console";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
@ -2145,16 +2142,16 @@ bool Game::connectToServer(const std::string &playername,
local_server_mode = true; local_server_mode = true;
} }
} catch (ResolveError &e) { } catch (ResolveError &e) {
*error_message = L"Couldn't resolve address: " + narrow_to_wide(e.what()); *error_message = std::string("Couldn't resolve address: ") + e.what();
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) { if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) {
*error_message = L"Unable to connect to " + *error_message = "Unable to connect to " +
narrow_to_wide(connect_address.serializeString()) + connect_address.serializeString() +
L" because IPv6 is disabled"; " because IPv6 is disabled";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
@ -2204,9 +2201,9 @@ bool Game::connectToServer(const std::string &playername,
// Break conditions // Break conditions
if (client->accessDenied()) { if (client->accessDenied()) {
*error_message = L"Access denied. Reason: " *error_message = "Access denied. Reason: "
+ client->accessDeniedReason(); + client->accessDeniedReason();
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
break; break;
} }
@ -2252,16 +2249,12 @@ bool Game::getServerContent(bool *aborted)
} }
// Error conditions // Error conditions
if (client->accessDenied()) { if (!checkConnection())
*error_message = L"Access denied. Reason: "
+ client->accessDeniedReason();
errorstream << wide_to_narrow(*error_message) << std::endl;
return false; return false;
}
if (client->getState() < LC_Init) { if (client->getState() < LC_Init) {
*error_message = L"Client disconnected"; *error_message = "Client disconnected";
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
@ -2335,9 +2328,9 @@ inline void Game::updateInteractTimers(GameRunData *runData, f32 dtime)
inline bool Game::checkConnection() inline bool Game::checkConnection()
{ {
if (client->accessDenied()) { if (client->accessDenied()) {
*error_message = L"Access denied. Reason: " *error_message = "Access denied. Reason: "
+ client->accessDeniedReason(); + client->accessDeniedReason();
errorstream << wide_to_narrow(*error_message) << std::endl; errorstream << *error_message << std::endl;
return false; return false;
} }
@ -2976,19 +2969,37 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
cam.camera_pitch, cam.camera_pitch,
cam.camera_yaw cam.camera_yaw
); );
u32 keypress_bits =
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_FORWARD]) & 0x1) << 0) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_BACKWARD]) & 0x1) << 1) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_LEFT]) & 0x1) << 2) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_RIGHT]) & 0x1) << 3) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_JUMP]) & 0x1) << 4) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SPECIAL1]) & 0x1) << 5) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK]) & 0x1) << 6) |
( (u32)(input->getLeftState() & 0x1) << 7) |
( (u32)(input->getRightState() & 0x1) << 8
);
#ifdef ANDROID
/* For Android, invert the meaning of holding down the fast button (i.e.
* holding down the fast button -- if there is one -- means walk), unless
* performing an action, sneaking or jumping.
*/
const u32 autofast_exludebits =
(1U << 4) | (1U << 6) // jump, sneak
| (1U << 7) | (1U << 8); // left state, right state
if ((keypress_bits & autofast_exludebits) == 0) {
control.aux1 = control.aux1 ^ true;
keypress_bits ^= ((u32)(1U << 5));
}
#endif
client->setPlayerControl(control); client->setPlayerControl(control);
LocalPlayer *player = client->getEnv().getLocalPlayer(); LocalPlayer *player = client->getEnv().getLocalPlayer();
player->keyPressed = player->keyPressed = keypress_bits;
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_FORWARD]) & 0x1) << 0) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_BACKWARD]) & 0x1) << 1) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_LEFT]) & 0x1) << 2) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_RIGHT]) & 0x1) << 3) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_JUMP]) & 0x1) << 4) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SPECIAL1]) & 0x1) << 5) |
( (u32)(input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK]) & 0x1) << 6) |
( (u32)(input->getLeftState() & 0x1) << 7) |
( (u32)(input->getRightState() & 0x1) << 8
);
//tt.stop(); //tt.stop();
} }
@ -3994,7 +4005,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
std::ostringstream os(std::ios_base::binary); std::ostringstream os(std::ios_base::binary);
os << std::fixed os << std::fixed
<< "Minetest " << minetest_version_hash << PROJECT_NAME " " << g_version_hash
<< " FPS = " << fps << " FPS = " << fps
<< " (R: range_all=" << draw_control->range_all << ")" << " (R: range_all=" << draw_control->range_all << ")"
<< std::setprecision(0) << std::setprecision(0)
@ -4010,7 +4021,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
guitext->setVisible(true); guitext->setVisible(true);
} else if (flags.show_hud || flags.show_chat) { } else if (flags.show_hud || flags.show_chat) {
std::ostringstream os(std::ios_base::binary); std::ostringstream os(std::ios_base::binary);
os << "Minetest " << minetest_version_hash; os << PROJECT_NAME " " << g_version_hash;
guitext->setText(narrow_to_wide(os.str()).c_str()); guitext->setText(narrow_to_wide(os.str()).c_str());
guitext->setVisible(true); guitext->setVisible(true);
} else { } else {
@ -4218,7 +4229,7 @@ void the_game(bool *kill,
const std::string &address, // If empty local server is created const std::string &address, // If empty local server is created
u16 port, u16 port,
std::wstring &error_message, std::string &error_message,
ChatBackend &chat_backend, ChatBackend &chat_backend,
const SubgameSpec &gamespec, // Used for local game const SubgameSpec &gamespec, // Used for local game
bool simple_singleplayer_mode) bool simple_singleplayer_mode)
@ -4234,24 +4245,24 @@ void the_game(bool *kill,
try { try {
if (game.startup(kill, random_input, input, device, map_dir, if (game.startup(kill, random_input, input, device, map_dir,
playername, password, &server_address, port, playername, password, &server_address, port,
&error_message, &chat_backend, gamespec, error_message, &chat_backend, gamespec,
simple_singleplayer_mode)) { simple_singleplayer_mode)) {
game.run(); game.run();
game.shutdown(); game.shutdown();
} }
} catch (SerializationError &e) { } catch (SerializationError &e) {
error_message = L"A serialization error occurred:\n" error_message = std::string("A serialization error occurred:\n")
+ narrow_to_wide(e.what()) + L"\n\nThe server is probably " + e.what() + "\n\nThe server is probably "
L" running a different version of Minetest."; " running a different version of " PROJECT_NAME ".";
errorstream << wide_to_narrow(error_message) << std::endl; errorstream << error_message << std::endl;
} catch (ServerError &e) { } catch (ServerError &e) {
error_message = narrow_to_wide(e.what()); error_message = e.what();
errorstream << "ServerError: " << e.what() << std::endl; errorstream << "ServerError: " << error_message << std::endl;
} catch (ModError &e) { } catch (ModError &e) {
errorstream << "ModError: " << e.what() << std::endl; error_message = e.what() + strgettext("\nCheck debug.txt for details.");
error_message = narrow_to_wide(e.what()) + wstrgettext("\nCheck debug.txt for details."); errorstream << "ModError: " << error_message << std::endl;
} }
} }

View File

@ -145,7 +145,7 @@ void the_game(bool *kill,
const std::string &password, const std::string &password,
const std::string &address, // If "", local server is used const std::string &address, // If "", local server is used
u16 port, u16 port,
std::wstring &error_message, std::string &error_message,
ChatBackend &chat_backend, ChatBackend &chat_backend,
const SubgameSpec &gamespec, // Used for local game const SubgameSpec &gamespec, // Used for local game
bool simple_singleplayer_mode); bool simple_singleplayer_mode);

View File

@ -236,8 +236,9 @@ void init_gettext(const char *path, const std::string &configured_language) {
#endif #endif
#endif #endif
bindtextdomain(PROJECT_NAME, path); static const char *name = lowercase(PROJECT_NAME).c_str();
textdomain(PROJECT_NAME); bindtextdomain(name, path);
textdomain(name);
#if defined(_WIN32) #if defined(_WIN32)
// Set character encoding for Win32 // Set character encoding for Win32

View File

@ -54,8 +54,8 @@ inline std::string getTimestamp()
// This is not really thread-safe but it won't break anything // This is not really thread-safe but it won't break anything
// except its own output, so just go with it. // except its own output, so just go with it.
struct tm *tm = localtime(&t); struct tm *tm = localtime(&t);
char cs[20]; char cs[20]; //YYYY-MM-DD HH:MM:SS + '\0'
strftime(cs, 20, "%H:%M:%S", tm); strftime(cs, 20, "%Y-%m-%d %H:%M:%S", tm);
return cs; return cs;
} }

View File

@ -171,8 +171,8 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
m_sound_manager = &dummySoundManager; m_sound_manager = &dummySoundManager;
//create topleft header //create topleft header
std::wstring t = narrow_to_wide(std::string("Minetest ") + std::wstring t = narrow_to_wide(std::string(PROJECT_NAME " ") +
minetest_version_hash); g_version_hash);
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight()); core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight());
rect += v2s32(4, 0); rect += v2s32(4, 0);
@ -571,8 +571,8 @@ bool GUIEngine::downloadFile(std::string url, std::string target)
/******************************************************************************/ /******************************************************************************/
void GUIEngine::setTopleftText(std::string append) void GUIEngine::setTopleftText(std::string append)
{ {
std::wstring toset = narrow_to_wide( std::string("Minetest ") + std::wstring toset = narrow_to_wide(std::string(PROJECT_NAME " ") +
minetest_version_hash); g_version_hash);
if (append != "") if (append != "")
{ {

View File

@ -48,7 +48,7 @@ HTTPFetchRequest::HTTPFetchRequest()
connect_timeout = timeout; connect_timeout = timeout;
multipart = false; multipart = false;
useragent = std::string("Minetest/") + minetest_version_hash + " (" + porting::get_sysinfo() + ")"; useragent = std::string(PROJECT_NAME "/") + g_version_hash + " (" + porting::get_sysinfo() + ")";
} }

View File

@ -455,9 +455,9 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
} }
} }
mgr->setInventoryModified(from_inv); mgr->setInventoryModified(from_inv, false);
if(inv_from != inv_to) if(inv_from != inv_to)
mgr->setInventoryModified(to_inv); mgr->setInventoryModified(to_inv, false);
} }
void IMoveAction::clientApply(InventoryManager *mgr, IGameDef *gamedef) void IMoveAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
@ -597,7 +597,7 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
if(item2.count != actually_dropped_count) if(item2.count != actually_dropped_count)
errorstream<<"Could not take dropped count of items"<<std::endl; errorstream<<"Could not take dropped count of items"<<std::endl;
mgr->setInventoryModified(from_inv); mgr->setInventoryModified(from_inv, false);
} }
} }

View File

@ -112,7 +112,7 @@ public:
// Get an inventory (server and client) // Get an inventory (server and client)
virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;} virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;}
// Set modified (will be saved and sent over network; only on server) // Set modified (will be saved and sent over network; only on server)
virtual void setInventoryModified(const InventoryLocation &loc){} virtual void setInventoryModified(const InventoryLocation &loc, bool playerSend = true){}
// Send inventory action to server (only on client) // Send inventory action to server (only on client)
virtual void inventoryAction(InventoryAction *a){} virtual void inventoryAction(InventoryAction *a){}
}; };

View File

@ -1,14 +1,4 @@
if( UNIX ) add_library(jsoncpp jsoncpp.cpp)
set(json_SRCS jsoncpp.cpp)
set(json_platform_LIBS "")
else( UNIX )
set(json_SRCS jsoncpp.cpp)
set(json_platform_LIBS "")
endif( UNIX )
add_library(jsoncpp ${json_SRCS}) target_link_libraries(jsoncpp)
target_link_libraries(
jsoncpp
${json_platform_LIBS}
)

View File

@ -1,15 +1,14 @@
if( UNIX ) if(UNIX)
set(JTHREAD_SRCS set(THREAD_SYS_DIR pthread)
${CMAKE_CURRENT_SOURCE_DIR}/pthread/jmutex.cpp else()
${CMAKE_CURRENT_SOURCE_DIR}/pthread/jthread.cpp set(THREAD_SYS_DIR win32)
${CMAKE_CURRENT_SOURCE_DIR}/pthread/jsemaphore.cpp endif()
${CMAKE_CURRENT_SOURCE_DIR}/pthread/jevent.cpp
PARENT_SCOPE) set(SRC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/${THREAD_SYS_DIR})
else( UNIX ) set(JTHREAD_SRCS
set(JTHREAD_SRCS ${SRC_PREFIX}/jmutex.cpp
${CMAKE_CURRENT_SOURCE_DIR}/win32/jmutex.cpp ${SRC_PREFIX}/jthread.cpp
${CMAKE_CURRENT_SOURCE_DIR}/win32/jthread.cpp ${SRC_PREFIX}/jsemaphore.cpp
${CMAKE_CURRENT_SOURCE_DIR}/win32/jsemaphore.cpp ${SRC_PREFIX}/jevent.cpp
${CMAKE_CURRENT_SOURCE_DIR}/win32/jevent.cpp PARENT_SCOPE)
PARENT_SCOPE)
endif( UNIX )

View File

@ -1,10 +1,12 @@
#
# Lua 5.1.x
#
cmake_minimum_required(VERSION 2.4 FATAL_ERROR) cmake_minimum_required(VERSION 2.4 FATAL_ERROR)
project(lua C) project(lua C)
set(LUA_VERSION_MAJOR 5)
set(LUA_VERSION_MINOR 1)
set(LUA_VERSION_PATCH 4)
set(LUA_VERSION "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(COMMON_CFLAGS) set(COMMON_CFLAGS)
@ -16,9 +18,7 @@ if(APPLE)
set(DEFAULT_DLOPEN ON) set(DEFAULT_DLOPEN ON)
# use this on Mac OS X 10.3- # use this on Mac OS X 10.3-
option(LUA_USE_MACOSX "Mac OS X 10.3-" OFF) option(LUA_USE_MACOSX "Mac OS X 10.3-" OFF)
elseif(CYGWIN) elseif(UNIX OR CYGWIN)
set(DEFAULT_POSIX TRUE)
elseif(UNIX)
set(DEFAULT_POSIX TRUE) set(DEFAULT_POSIX TRUE)
elseif(WIN32) elseif(WIN32)
set(LUA_WIN TRUE) set(LUA_WIN TRUE)
@ -32,50 +32,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(DEFAULT_DLOPEN ON) set(DEFAULT_DLOPEN ON)
endif() endif()
if(WIN32)
#set(BUILD_STATIC OFF)
set(BUILD_STATIC ON)
else()
#option(BUILD_STATIC "build static library" ON)
set(BUILD_STATIC ON)
endif()
if(DEFAULT_DLOPEN)
option(LUA_USE_DLOPEN "Enable dlopen support." ON)
else()
option(LUA_USE_DLOPEN "Enable dlopen support." OFF)
endif()
mark_as_advanced(LUA_USE_DLOPEN)
if(DEFAULT_ANSI)
option(LUA_ANSI "Disable non-ansi features." ON)
else()
option(LUA_ANSI "Disable non-ansi features." OFF)
endif()
mark_as_advanced(LUA_ANSI)
#
# Lua version
#
set(LUA_VERSION_MAJOR 5)
set(LUA_VERSION_MINOR 1)
set(LUA_VERSION_PATCH 4)
set(LUA_VERSION
"${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
set(LUA_SOVERSION
"${LUA_VERSION_MAJOR}")
#
# libs & cflags
#
set(COMMON_LDFLAGS "${COMMON_LDFLAGS}")
# For "Mac OS X 10.3-" # For "Mac OS X 10.3-"
if(LUA_USE_MACOSX) if(LUA_USE_MACOSX)
set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_USE_MACOSX") set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_USE_MACOSX")
set(LUA_USE_DLOPEN FALSE) set(LUA_USE_DLOPEN FALSE)
endif(LUA_USE_MACOSX) endif(LUA_USE_MACOSX)
option(LUA_USE_DLOPEN "Enable dlopen support." ${DEFAULT_DLOPEN})
mark_as_advanced(LUA_USE_DLOPEN)
option(LUA_ANSI "Disable non-ANSI features." ${DEFAULT_ANSI})
mark_as_advanced(LUA_ANSI)
if(LUA_USE_DLOPEN) if(LUA_USE_DLOPEN)
set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_USE_DLOPEN") set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_USE_DLOPEN")
if(NOT APPLE) if(NOT APPLE)
@ -91,14 +59,11 @@ if(LUA_ANSI)
set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_ANSI") set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_ANSI")
endif(LUA_ANSI) endif(LUA_ANSI)
#
# COMMON_CFLAGS has no effect without this line # COMMON_CFLAGS has no effect without this line
#
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_CFLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_CFLAGS}")
#
# standard flags to use for each build type. # Standard flags to use for each build type.
#
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -Wall -Wextra -Wshadow -W -pedantic -std=gnu99") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -Wall -Wextra -Wshadow -W -pedantic -std=gnu99")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
@ -107,8 +72,6 @@ if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_WITHDEBINFO} -O2 -g") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_WITHDEBINFO} -O2 -g")
endif(CMAKE_COMPILER_IS_GNUCC) endif(CMAKE_COMPILER_IS_GNUCC)
#
# sub-folders add_subdirectory(src build)
#
ADD_SUBDIRECTORY(src build)

View File

@ -39,11 +39,9 @@ set(LUA_LIB_HEADERS
) )
include_directories(${CMAKE_CURRENT_SOURCE_DIR} include_directories(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}) ${CMAKE_CURRENT_BINARY_DIR})
#
# Lua library. # Lua library.
#
add_library(lua STATIC ${LUA_CORE_SRC}) add_library(lua STATIC ${LUA_CORE_SRC})
target_link_libraries(lua ${LIBS}) target_link_libraries(lua ${LIBS})
set(LUA_STATIC_LIB lua) set(LUA_STATIC_LIB lua)
@ -51,13 +49,6 @@ set(LUA_LIBS lua)
set_target_properties(${LUA_LIBS} PROPERTIES set_target_properties(${LUA_LIBS} PROPERTIES
VERSION ${LUA_VERSION} VERSION ${LUA_VERSION}
SOVERSION ${LUA_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 CLEAN_DIRECT_OUTPUT 1
) )
# Install library
#install(TARGETS ${LUA_LIBS}
# RUNTIME DESTINATION bin
# LIBRARY DESTINATION lib
# ARCHIVE DESTINATION lib)

View File

@ -400,13 +400,11 @@ static void print_allowed_options(const OptionList &allowed_options)
static void print_version() static void print_version()
{ {
#ifdef SERVER dstream << PROJECT_NAME " " << g_version_hash << std::endl;
dstream << "minetestserver " << minetest_version_hash << std::endl; #ifndef SERVER
#else
dstream << "Minetest " << minetest_version_hash << std::endl;
dstream << "Using Irrlicht " << IRRLICHT_SDK_VERSION << std::endl; dstream << "Using Irrlicht " << IRRLICHT_SDK_VERSION << std::endl;
#endif #endif
dstream << "Build info: " << minetest_build_info << std::endl; dstream << "Build info: " << g_build_info << std::endl;
} }
static void list_game_ids() static void list_game_ids()
@ -543,7 +541,7 @@ static void startup_message()
infostream << PROJECT_NAME << " " << _("with") infostream << PROJECT_NAME << " " << _("with")
<< " SER_FMT_VER_HIGHEST_READ=" << " SER_FMT_VER_HIGHEST_READ="
<< (int)SER_FMT_VER_HIGHEST_READ << ", " << (int)SER_FMT_VER_HIGHEST_READ << ", "
<< minetest_build_info << std::endl; << g_build_info << std::endl;
} }
static bool read_config_file(const Settings &cmd_args) static bool read_config_file(const Settings &cmd_args)

View File

@ -12,4 +12,5 @@ if (BUILD_CLIENT)
${CMAKE_CURRENT_SOURCE_DIR}/clientpackethandler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/clientpackethandler.cpp
PARENT_SCOPE PARENT_SCOPE
) )
endif(BUILD_CLIENT) endif()

View File

@ -140,7 +140,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
// to be processed even if the serialisation format has // to be processed even if the serialisation format has
// not been agreed yet, the same as TOCLIENT_INIT. // not been agreed yet, the same as TOCLIENT_INIT.
m_access_denied = true; m_access_denied = true;
m_access_denied_reason = L"Unknown"; m_access_denied_reason = "Unknown";
if (pkt->getCommand() == TOCLIENT_ACCESS_DENIED) { if (pkt->getCommand() == TOCLIENT_ACCESS_DENIED) {
if (pkt->getSize() < 1) if (pkt->getSize() < 1)
@ -149,7 +149,9 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA; u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA;
*pkt >> denyCode; *pkt >> denyCode;
if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
*pkt >> m_access_denied_reason; std::wstring wide_reason;
*pkt >> wide_reason;
m_access_denied_reason = wide_to_narrow(wide_reason);
} }
else if (denyCode < SERVER_ACCESSDENIED_MAX) { else if (denyCode < SERVER_ACCESSDENIED_MAX) {
m_access_denied_reason = accessDeniedStrings[denyCode]; m_access_denied_reason = accessDeniedStrings[denyCode];
@ -159,7 +161,9 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
// for compat with old clients // for compat with old clients
else { else {
if (pkt->getSize() >= 2) { if (pkt->getSize() >= 2) {
*pkt >> m_access_denied_reason; std::wstring wide_reason;
*pkt >> wide_reason;
m_access_denied_reason = wide_to_narrow(wide_reason);
} }
} }
} }

View File

@ -1063,14 +1063,14 @@ void UDPPeer::PutReliableSendCommand(ConnectionCommand &c,
<<" processing reliable command for peer id: " << c.peer_id <<" processing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() << std::endl); <<" data size: " << c.data.getSize() << std::endl);
if (!processReliableSendCommand(c,max_packet_size)) { if (!processReliableSendCommand(c,max_packet_size)) {
channels[c.channelnum].queued_commands.push(c); channels[c.channelnum].queued_commands.push_back(c);
} }
} }
else { else {
LOG(dout_con<<m_connection->getDesc() LOG(dout_con<<m_connection->getDesc()
<<" Queueing reliable command for peer id: " << c.peer_id <<" Queueing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() <<std::endl); <<" data size: " << c.data.getSize() <<std::endl);
channels[c.channelnum].queued_commands.push(c); channels[c.channelnum].queued_commands.push_back(c);
} }
} }
@ -1182,17 +1182,15 @@ void UDPPeer::RunCommandQueues(
unsigned int maxtransfer) unsigned int maxtransfer)
{ {
for (unsigned int i = 0; i < CHANNEL_COUNT; i++) for (unsigned int i = 0; i < CHANNEL_COUNT; i++) {
{
unsigned int commands_processed = 0; unsigned int commands_processed = 0;
if ((channels[i].queued_commands.size() > 0) && if ((channels[i].queued_commands.size() > 0) &&
(channels[i].queued_reliables.size() < maxtransfer) && (channels[i].queued_reliables.size() < maxtransfer) &&
(commands_processed < maxcommands)) (commands_processed < maxcommands)) {
{
try { try {
ConnectionCommand c = channels[i].queued_commands.front(); ConnectionCommand c = channels[i].queued_commands.front();
channels[i].queued_commands.pop(); channels[i].queued_commands.pop_front();
LOG(dout_con<<m_connection->getDesc() LOG(dout_con<<m_connection->getDesc()
<<" processing queued reliable command "<<std::endl); <<" processing queued reliable command "<<std::endl);
if (!processReliableSendCommand(c,max_packet_size)) { if (!processReliableSendCommand(c,max_packet_size)) {
@ -1200,7 +1198,7 @@ void UDPPeer::RunCommandQueues(
<< " Failed to queue packets for peer_id: " << c.peer_id << " Failed to queue packets for peer_id: " << c.peer_id
<< ", delaying sending of " << c.data.getSize() << ", delaying sending of " << c.data.getSize()
<< " bytes" << std::endl); << " bytes" << std::endl);
channels[i].queued_commands.push(c); channels[i].queued_commands.push_front(c);
} }
} }
catch (ItemNotFoundException &e) { catch (ItemNotFoundException &e) {
@ -1328,12 +1326,10 @@ bool ConnectionSendThread::packetsQueued()
if (dynamic_cast<UDPPeer*>(&peer) == 0) if (dynamic_cast<UDPPeer*>(&peer) == 0)
continue; continue;
for(u16 i=0; i<CHANNEL_COUNT; i++) for(u16 i=0; i < CHANNEL_COUNT; i++) {
{
Channel *channel = &(dynamic_cast<UDPPeer*>(&peer))->channels[i]; Channel *channel = &(dynamic_cast<UDPPeer*>(&peer))->channels[i];
if (channel->queued_commands.size() > 0) if (channel->queued_commands.size() > 0) {
{
return true; return true;
} }
} }

View File

@ -501,7 +501,7 @@ public:
std::queue<BufferedPacket> queued_reliables; std::queue<BufferedPacket> queued_reliables;
//queue commands prior splitting to packets //queue commands prior splitting to packets
std::queue<ConnectionCommand> queued_commands; std::deque<ConnectionCommand> queued_commands;
IncomingSplitBuffer incoming_splits; IncomingSplitBuffer incoming_splits;

View File

@ -512,7 +512,7 @@ NetworkPacket& NetworkPacket::operator<<(video::SColor src)
Buffer<u8> NetworkPacket::oldForgePacket() Buffer<u8> NetworkPacket::oldForgePacket()
{ {
SharedBuffer<u8> sb(m_datasize + 2); Buffer<u8> sb(m_datasize + 2);
writeU16(&sb[0], m_command); writeU16(&sb[0], m_command);
u8* datas = getU8Ptr(0); u8* datas = getU8Ptr(0);

View File

@ -861,36 +861,36 @@ enum ToServerCommand
}; };
enum AccessDeniedCode { enum AccessDeniedCode {
SERVER_ACCESSDENIED_WRONG_PASSWORD = 0, SERVER_ACCESSDENIED_WRONG_PASSWORD,
SERVER_ACCESSDENIED_UNEXPECTED_DATA = 1, SERVER_ACCESSDENIED_UNEXPECTED_DATA,
SERVER_ACCESSDENIED_SINGLEPLAYER = 2, SERVER_ACCESSDENIED_SINGLEPLAYER,
SERVER_ACCESSDENIED_WRONG_VERSION = 3, SERVER_ACCESSDENIED_WRONG_VERSION,
SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME = 4, SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME,
SERVER_ACCESSDENIED_WRONG_NAME = 5, SERVER_ACCESSDENIED_WRONG_NAME,
SERVER_ACCESSDENIED_TOO_MANY_USERS = 6, SERVER_ACCESSDENIED_TOO_MANY_USERS,
SERVER_ACCESSDENIED_EMPTY_PASSWORD = 7, SERVER_ACCESSDENIED_EMPTY_PASSWORD,
SERVER_ACCESSDENIED_ALREADY_CONNECTED = 8, SERVER_ACCESSDENIED_ALREADY_CONNECTED,
SERVER_ACCESSDENIED_SERVER_FAIL = 9, SERVER_ACCESSDENIED_SERVER_FAIL,
SERVER_ACCESSDENIED_CUSTOM_STRING = 10, SERVER_ACCESSDENIED_CUSTOM_STRING,
SERVER_ACCESSDENIED_MAX = 11, SERVER_ACCESSDENIED_MAX,
}; };
enum NetProtoCompressionMode { enum NetProtoCompressionMode {
NETPROTO_COMPRESSION_ZLIB = 0, NETPROTO_COMPRESSION_ZLIB = 0,
}; };
const static std::wstring accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = {
L"Invalid password", "Invalid password",
L"Your client sent something server didn't expect. Try reconnecting or updating your client", "Your client sent something the server didn't expect. Try reconnecting or updating your client",
L"The server is running in simple singleplayer mode. You cannot connect.", "The server is running in simple singleplayer mode. You cannot connect.",
L"Your client's version is not supported.\nPlease contact server administrator.", "Your client's version is not supported.\nPlease contact server administrator.",
L"Name contains unallowed characters", "Player name contains disallowed characters.",
L"Name is not allowed", "Player name not allowed.",
L"Too many users.", "Too many users.",
L"Empty passwords are disallowed. Set a password and try again.", "Empty passwords are disallowed. Set a password and try again.",
L"Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.",
L"Server authenticator failed. Maybe the servers has some problems." "Server authention failed. This is likely a server error."
L"", "",
}; };
#endif #endif

View File

@ -388,7 +388,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
DenyAccess_Legacy(pkt->getPeerId(), std::wstring( DenyAccess_Legacy(pkt->getPeerId(), std::wstring(
L"Your client's version is not supported.\n" L"Your client's version is not supported.\n"
L"Server version is ") L"Server version is ")
+ narrow_to_wide(minetest_version_simple) + L"." + narrow_to_wide(g_version_string) + L"."
); );
return; return;
} }
@ -436,7 +436,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
DenyAccess_Legacy(pkt->getPeerId(), std::wstring( DenyAccess_Legacy(pkt->getPeerId(), std::wstring(
L"Your client's version is not supported.\n" L"Your client's version is not supported.\n"
L"Server version is ") L"Server version is ")
+ narrow_to_wide(minetest_version_simple) + L",\n" + narrow_to_wide(g_version_string) + L",\n"
+ L"server's PROTOCOL_VERSION is " + L"server's PROTOCOL_VERSION is "
+ narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN))
+ L"..." + L"..."
@ -456,7 +456,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
DenyAccess_Legacy(pkt->getPeerId(), std::wstring( DenyAccess_Legacy(pkt->getPeerId(), std::wstring(
L"Your client's version is not supported.\n" L"Your client's version is not supported.\n"
L"Server version is ") L"Server version is ")
+ narrow_to_wide(minetest_version_simple) + L",\n" + narrow_to_wide(g_version_string) + L",\n"
+ L"server's PROTOCOL_VERSION (strict) is " + L"server's PROTOCOL_VERSION (strict) is "
+ narrow_to_wide(itos(LATEST_PROTOCOL_VERSION)) + narrow_to_wide(itos(LATEST_PROTOCOL_VERSION))
+ L", client's PROTOCOL_VERSION is " + L", client's PROTOCOL_VERSION is "
@ -952,8 +952,8 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
ma->from_inv.applyCurrentPlayer(player->getName()); ma->from_inv.applyCurrentPlayer(player->getName());
ma->to_inv.applyCurrentPlayer(player->getName()); ma->to_inv.applyCurrentPlayer(player->getName());
setInventoryModified(ma->from_inv); setInventoryModified(ma->from_inv, false);
setInventoryModified(ma->to_inv); setInventoryModified(ma->to_inv, false);
bool from_inv_is_current_player = bool from_inv_is_current_player =
(ma->from_inv.type == InventoryLocation::PLAYER) && (ma->from_inv.type == InventoryLocation::PLAYER) &&
@ -1006,7 +1006,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
da->from_inv.applyCurrentPlayer(player->getName()); da->from_inv.applyCurrentPlayer(player->getName());
setInventoryModified(da->from_inv); setInventoryModified(da->from_inv, false);
/* /*
Disable dropping items out of craftpreview Disable dropping items out of craftpreview
@ -1033,7 +1033,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
ca->craft_inv.applyCurrentPlayer(player->getName()); ca->craft_inv.applyCurrentPlayer(player->getName());
setInventoryModified(ca->craft_inv); setInventoryModified(ca->craft_inv, false);
//bool craft_inv_is_current_player = //bool craft_inv_is_current_player =
// (ca->craft_inv.type == InventoryLocation::PLAYER) && // (ca->craft_inv.type == InventoryLocation::PLAYER) &&
@ -1052,6 +1052,8 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
a->apply(this, playersao, this); a->apply(this, playersao, this);
// Eat the action // Eat the action
delete a; delete a;
SendInventory(playersao);
} }
void Server::handleCommand_ChatMessage(NetworkPacket* pkt) void Server::handleCommand_ChatMessage(NetworkPacket* pkt)

View File

@ -86,6 +86,7 @@ Player::Player(IGameDef *gamedef, const char *name):
movement_liquid_fluidity_smooth = 0.5 * BS; movement_liquid_fluidity_smooth = 0.5 * BS;
movement_liquid_sink = 10 * BS; movement_liquid_sink = 10 * BS;
movement_gravity = 9.81 * BS; movement_gravity = 9.81 * BS;
local_animation_speed = 0.0;
// Movement overrides are multipliers and must be 1 by default // Movement overrides are multipliers and must be 1 by default
physics_override_speed = 1; physics_override_speed = 1;

View File

@ -461,7 +461,7 @@ void initializePaths()
// Use "C:\Documents and Settings\user\Application Data\<PROJECT_NAME>" // Use "C:\Documents and Settings\user\Application Data\<PROJECT_NAME>"
len = GetEnvironmentVariable("APPDATA", buf, buflen); len = GetEnvironmentVariable("APPDATA", buf, buflen);
FATAL_ERROR_IF(len >= buflen, "Overlow"); FATAL_ERROR_IF(len >= buflen, "Overlow");
path_user = std::string(buf) + DIR_DELIM + PROJECT_NAME; path_user = std::string(buf) + DIR_DELIM + lowercase(PROJECT_NAME);
/* /*
Linux Linux
@ -491,7 +491,7 @@ void initializePaths()
if(static_sharedir != "" && static_sharedir != ".") if(static_sharedir != "" && static_sharedir != ".")
trylist.push_back(static_sharedir); trylist.push_back(static_sharedir);
trylist.push_back( trylist.push_back(
bindir + DIR_DELIM + ".." + DIR_DELIM + "share" + DIR_DELIM + PROJECT_NAME); bindir + DIR_DELIM + ".." + DIR_DELIM + "share" + DIR_DELIM + lowercase(PROJECT_NAME));
trylist.push_back(bindir + DIR_DELIM + ".."); trylist.push_back(bindir + DIR_DELIM + "..");
#ifdef __ANDROID__ #ifdef __ANDROID__
trylist.push_back(path_user); trylist.push_back(path_user);
@ -515,7 +515,7 @@ void initializePaths()
break; break;
} }
#ifndef __ANDROID__ #ifndef __ANDROID__
path_user = std::string(getenv("HOME")) + DIR_DELIM + "." + PROJECT_NAME; path_user = std::string(getenv("HOME")) + DIR_DELIM + "." + lowercase(PROJECT_NAME);
#endif #endif
/* /*
@ -532,12 +532,13 @@ void initializePaths()
dstream << "WARNING: Could not determine bundle resource path" << std::endl; dstream << "WARNING: Could not determine bundle resource path" << std::endl;
} }
CFRelease(resources_url); CFRelease(resources_url);
path_user = std::string(getenv("HOME")) + "/Library/Application Support/" + PROJECT_NAME;
path_user = std::string(getenv("HOME")) + "/Library/Application Support/" + lowercase(PROJECT_NAME);
#else // FreeBSD, and probably many other POSIX-like systems. #else // FreeBSD, and probably many other POSIX-like systems.
path_share = STATIC_SHAREDIR; path_share = STATIC_SHAREDIR;
path_user = std::string(getenv("HOME")) + DIR_DELIM + "." + PROJECT_NAME; path_user = std::string(getenv("HOME")) + DIR_DELIM + "." + lowercase(PROJECT_NAME);
#endif #endif
@ -569,16 +570,20 @@ void setXorgClassHint(const video::SExposedVideoData &video_data,
} }
#ifndef SERVER #ifndef SERVER
v2u32 getWindowSize() v2u32 getWindowSize()
{ {
return device->getVideoDriver()->getScreenSize(); return device->getVideoDriver()->getScreenSize();
} }
std::vector<core::vector3d<u32> > getVideoModes() std::vector<core::vector3d<u32> > getSupportedVideoModes()
{ {
IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL);
sanity_check(nulldevice != NULL);
std::vector<core::vector3d<u32> > mlist; std::vector<core::vector3d<u32> > mlist;
video::IVideoModeList *modelist = device->getVideoModeList(); video::IVideoModeList *modelist = nulldevice->getVideoModeList();
u32 num_modes = modelist->getVideoModeCount(); u32 num_modes = modelist->getVideoModeCount();
for (u32 i = 0; i != num_modes; i++) { for (u32 i = 0; i != num_modes; i++) {
@ -587,6 +592,8 @@ std::vector<core::vector3d<u32> > getVideoModes()
mlist.push_back(core::vector3d<u32>(mode_res.Width, mode_res.Height, mode_depth)); mlist.push_back(core::vector3d<u32>(mode_res.Width, mode_res.Height, mode_depth));
} }
nulldevice->drop();
return mlist; return mlist;
} }

View File

@ -371,6 +371,7 @@ float getDisplayDensity();
v2u32 getDisplaySize(); v2u32 getDisplaySize();
v2u32 getWindowSize(); v2u32 getWindowSize();
std::vector<core::vector3d<u32> > getSupportedVideoModes();
std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers(); std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type); const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type);
const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type); const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type);

View File

@ -11,9 +11,10 @@ set(common_SCRIPT_SRCS
PARENT_SCOPE) PARENT_SCOPE)
# Used by client only # Used by client only
set(minetest_SCRIPT_SRCS set(client_SCRIPT_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/scripting_mainmenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/scripting_mainmenu.cpp
${minetest_SCRIPT_COMMON_SRCS} ${client_SCRIPT_COMMON_SRCS}
${minetest_SCRIPT_CPP_API_SRCS} ${client_SCRIPT_CPP_API_SRCS}
${minetest_SCRIPT_LUA_API_SRCS} ${client_SCRIPT_LUA_API_SRCS}
PARENT_SCOPE) PARENT_SCOPE)

View File

@ -1,4 +1,3 @@
# Used by server and client
set(common_SCRIPT_COMMON_SRCS set(common_SCRIPT_COMMON_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/c_content.cpp ${CMAKE_CURRENT_SOURCE_DIR}/c_content.cpp
${CMAKE_CURRENT_SOURCE_DIR}/c_converter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/c_converter.cpp
@ -6,6 +5,6 @@ set(common_SCRIPT_COMMON_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/c_internal.cpp ${CMAKE_CURRENT_SOURCE_DIR}/c_internal.cpp
PARENT_SCOPE) PARENT_SCOPE)
# Used by client only set(client_SCRIPT_COMMON_SRCS
set(minetest_SCRIPT_COMMON_SRCS
PARENT_SCOPE) PARENT_SCOPE)

View File

@ -1,4 +1,3 @@
# Used by server and client
set(common_SCRIPT_CPP_API_SRCS set(common_SCRIPT_CPP_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/s_base.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_base.cpp
${CMAKE_CURRENT_SOURCE_DIR}/s_entity.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_entity.cpp
@ -12,7 +11,7 @@ set(common_SCRIPT_CPP_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/s_async.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_async.cpp
PARENT_SCOPE) PARENT_SCOPE)
# Used by client only set(client_SCRIPT_CPP_API_SRCS
set(minetest_SCRIPT_CPP_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/s_mainmenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_mainmenu.cpp
PARENT_SCOPE) PARENT_SCOPE)

View File

@ -1,4 +1,3 @@
# Used by server and client
set(common_SCRIPT_LUA_API_SRCS set(common_SCRIPT_LUA_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/l_base.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_base.cpp
${CMAKE_CURRENT_SOURCE_DIR}/l_craft.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_craft.cpp
@ -18,7 +17,7 @@ set(common_SCRIPT_LUA_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/l_settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_settings.cpp
PARENT_SCOPE) PARENT_SCOPE)
# Used by client only set(client_SCRIPT_LUA_API_SRCS
set(minetest_SCRIPT_LUA_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/l_mainmenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_mainmenu.cpp
PARENT_SCOPE) PARENT_SCOPE)

View File

@ -840,7 +840,7 @@ int ModApiMainMenu::l_copy_dir(lua_State *L)
int ModApiMainMenu::l_extract_zip(lua_State *L) int ModApiMainMenu::l_extract_zip(lua_State *L)
{ {
GUIEngine* engine = getGuiEngine(L); GUIEngine* engine = getGuiEngine(L);
sanity_check(engine != NULL);(engine != 0); sanity_check(engine);
const char *zipfile = luaL_checkstring(L, 1); const char *zipfile = luaL_checkstring(L, 1);
const char *destination = luaL_checkstring(L, 2); const char *destination = luaL_checkstring(L, 2);
@ -980,7 +980,7 @@ int ModApiMainMenu::l_show_file_open_dialog(lua_State *L)
/******************************************************************************/ /******************************************************************************/
int ModApiMainMenu::l_get_version(lua_State *L) int ModApiMainMenu::l_get_version(lua_State *L)
{ {
lua_pushstring(L, minetest_version_simple); lua_pushstring(L, g_version_string);
return 1; return 1;
} }
@ -1056,6 +1056,28 @@ int ModApiMainMenu::l_get_video_drivers(lua_State *L)
return 1; return 1;
} }
/******************************************************************************/
int ModApiMainMenu::l_get_video_modes(lua_State *L)
{
std::vector<core::vector3d<u32> > videomodes
= porting::getSupportedVideoModes();
lua_newtable(L);
for (u32 i = 0; i != videomodes.size(); i++) {
lua_newtable(L);
lua_pushnumber(L, videomodes[i].X);
lua_setfield(L, -2, "w");
lua_pushnumber(L, videomodes[i].Y);
lua_setfield(L, -2, "h");
lua_pushnumber(L, videomodes[i].Z);
lua_setfield(L, -2, "depth");
lua_rawseti(L, -2, i + 1);
}
return 1;
}
/******************************************************************************/ /******************************************************************************/
int ModApiMainMenu::l_gettext(lua_State *L) int ModApiMainMenu::l_gettext(lua_State *L)
{ {
@ -1164,6 +1186,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(sound_stop); API_FCT(sound_stop);
API_FCT(gettext); API_FCT(gettext);
API_FCT(get_video_drivers); API_FCT(get_video_drivers);
API_FCT(get_video_modes);
API_FCT(get_screen_info); API_FCT(get_screen_info);
API_FCT(get_min_supp_proto); API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto); API_FCT(get_max_supp_proto);

View File

@ -137,6 +137,8 @@ private:
static int l_get_video_drivers(lua_State *L); static int l_get_video_drivers(lua_State *L);
static int l_get_video_modes(lua_State *L);
//version compatibility //version compatibility
static int l_get_min_supp_proto(lua_State *L); static int l_get_min_supp_proto(lua_State *L);

View File

@ -801,10 +801,13 @@ int ModApiMapgen::l_generate_ores(lua_State *L)
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm; mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager(); mg.ndef = getServer(L)->getNodeDefManager();
u32 blockseed = Mapgen::getBlockSeed(mg.vm->m_area.MinEdge, mg.seed); v3s16 pmin = lua_istable(L, 2) ? read_v3s16(L, 2) :
mg.vm->m_area.MinEdge + v3s16(1,1,1) * MAP_BLOCKSIZE;
v3s16 pmax = lua_istable(L, 3) ? read_v3s16(L, 3) :
mg.vm->m_area.MaxEdge - v3s16(1,1,1) * MAP_BLOCKSIZE;
sortBoxVerticies(pmin, pmax);
v3s16 pmin = read_v3s16(L, 2); u32 blockseed = Mapgen::getBlockSeed(pmin, mg.seed);
v3s16 pmax = read_v3s16(L, 3);
emerge->oremgr->placeAllOres(&mg, blockseed, pmin, pmax); emerge->oremgr->placeAllOres(&mg, blockseed, pmin, pmax);
@ -821,10 +824,13 @@ int ModApiMapgen::l_generate_decorations(lua_State *L)
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm; mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager(); mg.ndef = getServer(L)->getNodeDefManager();
u32 blockseed = Mapgen::getBlockSeed(mg.vm->m_area.MinEdge, mg.seed); v3s16 pmin = lua_istable(L, 2) ? read_v3s16(L, 2) :
mg.vm->m_area.MinEdge + v3s16(1,1,1) * MAP_BLOCKSIZE;
v3s16 pmax = lua_istable(L, 3) ? read_v3s16(L, 3) :
mg.vm->m_area.MaxEdge - v3s16(1,1,1) * MAP_BLOCKSIZE;
sortBoxVerticies(pmin, pmax);
v3s16 pmin = read_v3s16(L, 2); u32 blockseed = Mapgen::getBlockSeed(pmin, mg.seed);
v3s16 pmax = read_v3s16(L, 3);
emerge->decomgr->placeAllDecos(&mg, blockseed, pmin, pmax); emerge->decomgr->placeAllDecos(&mg, blockseed, pmin, pmax);

View File

@ -1290,13 +1290,16 @@ Inventory* Server::getInventory(const InventoryLocation &loc)
} }
return NULL; return NULL;
} }
void Server::setInventoryModified(const InventoryLocation &loc) void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend)
{ {
switch(loc.type){ switch(loc.type){
case InventoryLocation::UNDEFINED: case InventoryLocation::UNDEFINED:
break; break;
case InventoryLocation::PLAYER: case InventoryLocation::PLAYER:
{ {
if (!playerSend)
return;
Player *player = m_env->getPlayer(loc.name.c_str()); Player *player = m_env->getPlayer(loc.name.c_str());
if(!player) if(!player)
return; return;
@ -2684,7 +2687,7 @@ std::wstring Server::getStatusString()
std::wostringstream os(std::ios_base::binary); std::wostringstream os(std::ios_base::binary);
os<<L"# Server: "; os<<L"# Server: ";
// Version // Version
os<<L"version="<<narrow_to_wide(minetest_version_simple); os<<L"version="<<narrow_to_wide(g_version_string);
// Uptime // Uptime
os<<L", uptime="<<m_uptime.get(); os<<L", uptime="<<m_uptime.get();
// Max lag estimate // Max lag estimate

View File

@ -237,7 +237,7 @@ public:
Shall be called with the environment and the connection locked. Shall be called with the environment and the connection locked.
*/ */
Inventory* getInventory(const InventoryLocation &loc); Inventory* getInventory(const InventoryLocation &loc);
void setInventoryModified(const InventoryLocation &loc); void setInventoryModified(const InventoryLocation &loc, bool playerSend = true);
// Connection must be locked when called // Connection must be locked when called
std::wstring getStatusString(); std::wstring getStatusString();

View File

@ -212,7 +212,7 @@ void sendAnnounce(const std::string &action,
bool strict_checking = g_settings->getBool("strict_protocol_version_checking"); bool strict_checking = g_settings->getBool("strict_protocol_version_checking");
server["name"] = g_settings->get("server_name"); server["name"] = g_settings->get("server_name");
server["description"] = g_settings->get("server_description"); server["description"] = g_settings->get("server_description");
server["version"] = minetest_version_simple; server["version"] = g_version_string;
server["proto_min"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MIN; server["proto_min"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MIN;
server["proto_max"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MAX; server["proto_max"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MAX;
server["url"] = g_settings->get("server_url"); server["url"] = g_settings->get("server_url");

View File

@ -31,6 +31,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <ISceneCollisionManager.h> #include <ISceneCollisionManager.h>
// Very slow button repeat frequency (in seconds)
#define SLOW_BUTTON_REPEAT (1.0f)
using namespace irr::core; using namespace irr::core;
extern Settings *g_settings; extern Settings *g_settings;
@ -121,6 +124,7 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver)
for (unsigned int i=0; i < after_last_element_id; i++) { for (unsigned int i=0; i < after_last_element_id; i++) {
m_buttons[i].guibutton = 0; m_buttons[i].guibutton = 0;
m_buttons[i].repeatcounter = -1; m_buttons[i].repeatcounter = -1;
m_buttons[i].repeatdelay = BUTTON_REPEAT_DELAY;
} }
m_screensize = m_device->getVideoDriver()->getScreenSize(); m_screensize = m_device->getVideoDriver()->getScreenSize();
@ -141,13 +145,14 @@ void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path)
} }
void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect, void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
std::wstring caption, bool immediate_release ) std::wstring caption, bool immediate_release, float repeat_delay)
{ {
button_info* btn = &m_buttons[id]; button_info* btn = &m_buttons[id];
btn->guibutton = m_guienv->addButton(button_rect, 0, id, caption.c_str()); btn->guibutton = m_guienv->addButton(button_rect, 0, id, caption.c_str());
btn->guibutton->grab(); btn->guibutton->grab();
btn->repeatcounter = -1; btn->repeatcounter = -1;
btn->repeatdelay = repeat_delay;
btn->keycode = id2keycode(id); btn->keycode = id2keycode(id);
btn->immediate_release = immediate_release; btn->immediate_release = immediate_release;
btn->ids.clear(); btn->ids.clear();
@ -240,25 +245,25 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
rect<s32>(m_screensize.X - (0.75*button_size), rect<s32>(m_screensize.X - (0.75*button_size),
m_screensize.Y - (2.25*button_size), m_screensize.Y - (2.25*button_size),
m_screensize.X, m_screensize.Y - (button_size*1.5)), m_screensize.X, m_screensize.Y - (button_size*1.5)),
L"fly", true); L"fly", false, SLOW_BUTTON_REPEAT);
/* init noclip button */ /* init noclip button */
initButton(noclip_id, initButton(noclip_id,
rect<s32>(m_screensize.X - (0.75*button_size), 2.25*button_size, rect<s32>(m_screensize.X - (0.75*button_size), 2.25*button_size,
m_screensize.X, 3*button_size), m_screensize.X, 3*button_size),
L"clip", true); L"clip", false, SLOW_BUTTON_REPEAT);
/* init fast button */ /* init fast button */
initButton(fast_id, initButton(fast_id,
rect<s32>(m_screensize.X - (0.75*button_size), 1.5*button_size, rect<s32>(m_screensize.X - (0.75*button_size), 1.5*button_size,
m_screensize.X, 2.25*button_size), m_screensize.X, 2.25*button_size),
L"fast", true); L"fast", false, SLOW_BUTTON_REPEAT);
/* init debug button */ /* init debug button */
initButton(debug_id, initButton(debug_id,
rect<s32>(m_screensize.X - (0.75*button_size), 0.75*button_size, rect<s32>(m_screensize.X - (0.75*button_size), 0.75*button_size,
m_screensize.X, 1.5*button_size), m_screensize.X, 1.5*button_size),
L"dbg", true); L"dbg", false, SLOW_BUTTON_REPEAT);
/* init chat button */ /* init chat button */
initButton(chat_id, initButton(chat_id,
@ -270,13 +275,13 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
initButton(camera_id, initButton(camera_id,
rect<s32>(m_screensize.X - (1.5*button_size), 0, rect<s32>(m_screensize.X - (1.5*button_size), 0,
m_screensize.X - (0.75*button_size), 0.75*button_size), m_screensize.X - (0.75*button_size), 0.75*button_size),
L"cam", true); L"cam", false, SLOW_BUTTON_REPEAT);
/* init rangeselect button */ /* init rangeselect button */
initButton(range_id, initButton(range_id,
rect<s32>(m_screensize.X - (2.25*button_size), 0, rect<s32>(m_screensize.X - (2.25*button_size), 0,
m_screensize.X - (1.5*button_size), 0.75*button_size), m_screensize.X - (1.5*button_size), 0.75*button_size),
L"far", true); L"far", false, SLOW_BUTTON_REPEAT);
} }
touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y)
@ -687,7 +692,7 @@ void TouchScreenGUI::step(float dtime)
if (m_move_id != -1) if (m_move_id != -1)
m_move_has_really_moved = true; m_move_has_really_moved = true;
if (btn->repeatcounter < 0.2) continue; if (btn->repeatcounter < btn->repeatdelay) continue;
btn->repeatcounter = 0; btn->repeatcounter = 0;
SEvent translated; SEvent translated;

View File

@ -54,6 +54,7 @@ typedef enum {
#define MIN_DIG_TIME_MS 500 #define MIN_DIG_TIME_MS 500
#define MAX_TOUCH_COUNT 64 #define MAX_TOUCH_COUNT 64
#define BUTTON_REPEAT_DELAY 0.2f
extern const char** touchgui_button_imagenames; extern const char** touchgui_button_imagenames;
@ -105,6 +106,7 @@ private:
struct button_info { struct button_info {
float repeatcounter; float repeatcounter;
float repeatdelay;
irr::EKEY_CODE keycode; irr::EKEY_CODE keycode;
std::vector<int> ids; std::vector<int> ids;
IGUIButton* guibutton; IGUIButton* guibutton;
@ -124,7 +126,8 @@ private:
/* initialize a button */ /* initialize a button */
void initButton(touch_gui_button_id id, rect<s32> button_rect, void initButton(touch_gui_button_id id, rect<s32> button_rect,
std::wstring caption, bool immediate_release ); std::wstring caption, bool immediate_release,
float repeat_delay = BUTTON_REPEAT_DELAY);
/* load texture */ /* load texture */
void loadButtonTexture(button_info* btn, const char* path); void loadButtonTexture(button_info* btn, const char* path);

View File

@ -8,3 +8,4 @@ set(UTIL_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/string.cpp ${CMAKE_CURRENT_SOURCE_DIR}/string.cpp
${CMAKE_CURRENT_SOURCE_DIR}/timetaker.cpp ${CMAKE_CURRENT_SOURCE_DIR}/timetaker.cpp
PARENT_SCOPE) PARENT_SCOPE)

View File

@ -20,27 +20,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "version.h" #include "version.h"
#include "config.h" #include "config.h"
#ifdef __ANDROID__ #if defined(__ANDROID__)
#include "android_version.h" #include "android_version.h"
#elif defined(USE_CMAKE_CONFIG_H) #elif defined(USE_CMAKE_CONFIG_H)
#include "cmake_config_githash.h" #include "cmake_config_githash.h"
#endif #endif
#ifdef CMAKE_VERSION_GITHASH #ifndef VERSION_GITHASH
#define VERSION_GITHASH CMAKE_VERSION_GITHASH
#else
#define VERSION_GITHASH VERSION_STRING #define VERSION_GITHASH VERSION_STRING
#endif #endif
const char *minetest_version_simple = VERSION_STRING;
const char *minetest_version_hash = VERSION_GITHASH;
#ifdef USE_CMAKE_CONFIG_H const char *g_version_string = VERSION_STRING;
const char *minetest_build_info = const char *g_version_hash = VERSION_GITHASH;
"VER=" VERSION_GITHASH " " CMAKE_BUILD_INFO; const char *g_build_info = "VER=" VERSION_GITHASH " " BUILD_INFO;
#elif defined(ANDROID)
const char *minetest_build_info = "android jni";
#else
const char *minetest_build_info = "non-cmake";
#endif

View File

@ -20,9 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef VERSION_HEADER #ifndef VERSION_HEADER
#define VERSION_HEADER #define VERSION_HEADER
extern const char *minetest_version_simple; extern const char *g_version_string;
extern const char *minetest_version_hash; extern const char *g_version_hash;
extern const char *minetest_build_info; extern const char *g_build_info;
#endif #endif

View File

@ -1,6 +1,6 @@
#!/bin/bash -e #!/bin/bash -e
if [ $CC = "clang" ]; then if [[ $CC == "clang" ]]; then
export PATH="/usr/bin/:$PATH" export PATH="/usr/bin/:$PATH"
sudo sh -c 'echo "deb http://ppa.launchpad.net/eudoxos/llvm-3.1/ubuntu precise main" >> /etc/apt/sources.list' sudo sh -c 'echo "deb http://ppa.launchpad.net/eudoxos/llvm-3.1/ubuntu precise main" >> /etc/apt/sources.list'
sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys 92DE8183 sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys 92DE8183
@ -9,24 +9,24 @@ if [ $CC = "clang" ]; then
sudo apt-get install clang sudo apt-get install clang
fi fi
sudo apt-get install p7zip-full sudo apt-get install p7zip-full
if [ $WINDOWS = "no" ]; then if [[ $PLATFORM == "Linux" ]]; then
sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \ sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \
libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libhiredis-dev \ libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libogg-dev libvorbis-dev libopenal-dev gettext libhiredis-dev libogg-dev libvorbis-dev libopenal-dev gettext
# Linking to LevelDB is broken, use a custom build # Linking to LevelDB is broken, use a custom build
wget http://sfan5.pf-control.de/libleveldb-1.18-ubuntu12.04.7z wget http://sfan5.pf-control.de/libleveldb-1.18-ubuntu12.04.7z
sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z
else elif [[ $PLATFORM == "Win32" ]]; then
if [ $WINDOWS = "32" ]; then wget http://sfan5.pf-control.de/mingw_w64_i686_ubuntu12.04_4.9.1.7z -O mingw.7z
wget http://sfan5.pf-control.de/mingw_w64_i686_ubuntu12.04_4.9.1.7z -O mingw.7z sed -e "s|%PREFIX%|i686-w64-mingw32|" \
sed -e "s|%PREFIX%|i686-w64-mingw32|" \ -e "s|%ROOTPATH%|/usr/i686-w64-mingw32|" \
-e "s|%ROOTPATH%|/usr/i686-w64-mingw32|" \ < util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw.cmake
< util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw.cmake sudo 7z x -y -o/usr mingw.7z
elif [ $WINDOWS = "64" ]; then elif [[ $PLATFORM == "Win64" ]]; then
wget http://sfan5.pf-control.de/mingw_w64_x86_64_ubuntu12.04_4.9.1.7z -O mingw.7z wget http://sfan5.pf-control.de/mingw_w64_x86_64_ubuntu12.04_4.9.1.7z -O mingw.7z
sed -e "s|%PREFIX%|x86_64-w64-mingw32|" \ sed -e "s|%PREFIX%|x86_64-w64-mingw32|" \
-e "s|%ROOTPATH%|/usr/x86_64-w64-mingw32|" \ -e "s|%ROOTPATH%|/usr/x86_64-w64-mingw32|" \
< util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw64.cmake < util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw64.cmake
fi
sudo 7z x -y -o/usr mingw.7z sudo 7z x -y -o/usr mingw.7z
fi fi

View File

@ -1,16 +1,21 @@
#!/bin/bash -e #!/bin/bash -e
if [ $WINDOWS = "no" ]; then if [[ $PLATFORM == "Linux" ]]; then
mkdir -p travisbuild mkdir -p travisbuild
cd travisbuild cd travisbuild
cmake -DENABLE_GETTEXT=1 -DENABLE_LEVELDB=1 -DENABLE_REDIS=1 -DCMAKE_BUILD_TYPE=Debug .. CMAKE_FLAGS='-DCMAKE_BUILD_TYPE=Debug \
-DRUN_IN_PLACE=TRUE \
-DENABLE_GETTEXT=TRUE'
# Clang builds with FreeType fail on Travis
if [[ $CC == "clang" ]]; then
CMAKE_FLAGS+=' -DENABLE_FREETYPE=FALSE'
fi
cmake $CMAKE_FLAGS ..
make -j2 make -j2
echo "Running unit tests for minetest" echo "Running unit tests."
../bin/minetest --run-unittests ../bin/minetest --run-unittests && exit 0
echo "Running unit tests for minetestserver" elif [[ $PLATFORM == Win* ]]; then
../bin/minetestserver --run-unittests [[ $CC == "clang" ]] && exit 1 # Not supposed to happen
else
[ $CC = "clang" ] && exit 1 # Not supposed to happen
# We need to have our build directory outside of the minetest directory because # We need to have our build directory outside of the minetest directory because
# CMake will otherwise get very very confused with symlinks and complain that # CMake will otherwise get very very confused with symlinks and complain that
# something is not a subdirectory of something even if it actually is. # something is not a subdirectory of something even if it actually is.
@ -21,8 +26,17 @@ else
# \/ \/ \/ # \/ \/ \/
# /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest/travisbuild/minetest # /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest/travisbuild/minetest
# You get the idea. # You get the idea.
OLDDIR=`pwd` OLDDIR=$(pwd)
cd .. cd ..
[ $WINDOWS = "32" ] && EXISTING_MINETEST_DIR=$OLDDIR NO_MINETEST_GAME=1 $OLDDIR/util/buildbot/buildwin32.sh travisbuild && exit 0 export EXISTING_MINETEST_DIR=$OLDDIR
[ $WINDOWS = "64" ] && EXISTING_MINETEST_DIR=$OLDDIR NO_MINETEST_GAME=1 $OLDDIR/util/buildbot/buildwin64.sh travisbuild && exit 0 export NO_MINETEST_GAME=1
if [[ $PLATFORM == "Win32" ]]; then
$OLDDIR/util/buildbot/buildwin32.sh travisbuild && exit 0
elif [[ $PLATFORM == "Win64" ]]; then
$OLDDIR/util/buildbot/buildwin64.sh travisbuild && exit 0
fi
else
echo "Unknown platform \"${PLATFORM}\"."
exit 1
fi fi

View File

@ -1,17 +1,18 @@
# name of the target operating system # Target operating system name
SET(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++ # Compilers to use
SET(CMAKE_C_COMPILER %PREFIX%-gcc) set(CMAKE_C_COMPILER %PREFIX%-gcc)
SET(CMAKE_CXX_COMPILER %PREFIX%-g++) set(CMAKE_CXX_COMPILER %PREFIX%-g++)
SET(CMAKE_RC_COMPILER %PREFIX%-windres) set(CMAKE_RC_COMPILER %PREFIX%-windres)
# here is the target environment located # Location of the target environment
SET(CMAKE_FIND_ROOT_PATH %ROOTPATH%) set(CMAKE_FIND_ROOT_PATH %ROOTPATH%)
# adjust the default behaviour of the FIND_XXX() commands: # Adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search # search for headers and libraries in the target environment,
# programs in the host environment # search for programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)