Clean up and tweak build system

* Combine client and server man pages.
  * Update unit test options and available databases in man page.
  * Add `--worldname` to man page.
  * Fix a bunch of places where `"Minetest"` was used directly instead of `PROJECT_NAME`.
  * Disable server build by default on all operating systems.
  * Make `ENABLE_FREETYPE` not fail if FreeType isn't found.
  * Enable LevelDB, Redis, and FreeType detection by default.
  * Remove the `VERSION_PATCH_ORIG` hack.
  * Add option to search for and use system JSONCPP.
  * Remove broken LuaJIT version detection.
  * Rename `DISABLE_LUAJIT` to `ENABLE_LUAJIT`.
  * Rename `minetest_*` variables in `version.{h,cpp}` to `g_*`.
  * Clean up style of CMake files.
This commit is contained in:
ShadowNinja 2015-02-27 18:05:29 -05:00
parent 284fefb0c3
commit 93fcab952b
50 changed files with 749 additions and 1068 deletions

@ -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

@ -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()

@ -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

@ -732,14 +732,11 @@ $(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; >> ${ROOT}/jni/src/android_version.h;

@ -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}")

@ -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()

@ -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)

@ -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)

@ -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()

@ -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"
else()
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()

@ -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)

@ -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)

@ -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)

@ -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)

@ -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

@ -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

@ -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
) )

@ -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);
} }

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

@ -94,7 +94,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.
@ -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

@ -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

@ -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

@ -6,82 +6,43 @@
#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
#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 #ifdef USE_CMAKE_CONFIG_H
#include "cmake_config.h" #include "cmake_config.h"
#undef PROJECT_NAME #else
#define PROJECT_NAME CMAKE_PROJECT_NAME #define PROJECT_NAME "Minetest"
#undef RUN_IN_PLACE #define RUN_IN_PLACE 0
#define RUN_IN_PLACE CMAKE_RUN_IN_PLACE #define USE_CURL 0
#undef USE_GETTEXT #define USE_FREETYPE 0
#define USE_GETTEXT CMAKE_USE_GETTEXT #define USE_GETTEXT 0
#undef USE_SOUND #define USE_LEVELDB 0
#define USE_SOUND CMAKE_USE_SOUND #define USE_LUAJIT 0
#undef USE_CURL #define USE_REDIS 0
#define USE_CURL CMAKE_USE_CURL #define USE_SOUND 0
#undef USE_FREETYPE #define HAVE_ENDIAN_H 0
#define USE_FREETYPE CMAKE_USE_FREETYPE #define STATIC_SHAREDIR ""
#undef STATIC_SHAREDIR #ifdef NDEBUG
#define STATIC_SHAREDIR CMAKE_STATIC_SHAREDIR #define BUILD_TYPE "Release"
#undef USE_LEVELDB #else
#define USE_LEVELDB CMAKE_USE_LEVELDB #define BUILD_TYPE "Debug"
#undef USE_LUAJIT #endif
#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 #endif
#ifdef __ANDROID__ #ifdef __ANDROID__
#include "android_version.h" #include "android_version.h"
#define VERSION_STRING CMAKE_VERSION_STRING
#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 #endif

@ -385,9 +385,8 @@ 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";
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,7 +400,8 @@ long WINAPI Win32ExceptionHandler(struct _EXCEPTION_POINTERS *pExceptInfo)
mdei.ExceptionPointers = pExceptInfo; mdei.ExceptionPointers = pExceptInfo;
mdei.ThreadId = GetCurrentThreadId(); mdei.ThreadId = GetCurrentThreadId();
version_str += minetest_version_hash; std::string version_str(PROJECT_NAME " ");
version_str += g_version_hash;
mdus.Type = CommentStreamA; mdus.Type = CommentStreamA;
mdus.BufferSize = version_str.size(); mdus.BufferSize = version_str.size();

@ -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");

@ -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());
} }

@ -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;]";
@ -2033,9 +2033,10 @@ bool Game::createClient(const std::string &playername,
/* 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();
@ -2057,7 +2058,7 @@ bool Game::initGui(std::wstring *error_message)
{ {
// 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);
@ -3994,7 +3995,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 +4011,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 {
@ -4245,7 +4246,7 @@ void the_game(bool *kill,
} catch (SerializationError &e) { } catch (SerializationError &e) {
error_message = L"A serialization error occurred:\n" error_message = L"A serialization error occurred:\n"
+ narrow_to_wide(e.what()) + L"\n\nThe server is probably " + narrow_to_wide(e.what()) + L"\n\nThe server is probably "
L" running a different version of Minetest."; L" running a different version of " PROJECT_NAME ".";
errorstream << wide_to_narrow(error_message) << std::endl; errorstream << wide_to_narrow(error_message) << std::endl;
} catch (ServerError &e) { } catch (ServerError &e) {
error_message = narrow_to_wide(e.what()); error_message = narrow_to_wide(e.what());

@ -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 != "")
{ {

@ -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() + ")";
} }

@ -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}
)

@ -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 )

@ -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)

@ -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)

@ -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)

@ -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()

@ -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 "

@ -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

@ -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)

@ -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)

@ -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)

@ -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)

@ -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;
} }

@ -2687,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

@ -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");

@ -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)

@ -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

@ -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

@ -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

@ -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

@ -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)