Minetest for C++11 (CMakeLists + Travis)

* Move GCC to GCC 6 & GCC 7
* Move Clang to Clang 3.6 & Clang 4.0
* LINT moves from Clang 3.9 to Clang 4.0
* Move XCode 7.3 to 8.0
* Use more travis tricks to install compilers instead of adding complexity to our build script
* Clang format fixes on checked files (compat Cpp11 instead of Cpp03)
* Mingw GCC update from 4.8.4 to 5.3 (Ubuntu Xenial)
* Drop mingw cmake generated files and add them to gitignore
This commit is contained in:
Loic Blot 2017-05-26 17:03:46 +02:00 committed by Loïc Blot
parent 0e58168fe5
commit bf6569b570
16 changed files with 149 additions and 77 deletions

@ -2,7 +2,7 @@ BasedOnStyle: LLVM
IndentWidth: 8 IndentWidth: 8
UseTab: Always UseTab: Always
BreakBeforeBraces: Custom BreakBeforeBraces: Custom
Standard: Cpp03 Standard: Cpp11
BraceWrapping: BraceWrapping:
AfterClass: true AfterClass: true
AfterControlStatement: false AfterControlStatement: false

@ -2,6 +2,7 @@ language: cpp
before_install: ./util/travis/before_install.sh before_install: ./util/travis/before_install.sh
script: ./util/travis/script.sh script: ./util/travis/script.sh
sudo: required sudo: required
dist: trusty
notifications: notifications:
email: false email: false
matrix: matrix:
@ -10,30 +11,81 @@ matrix:
- env: PLATFORM=Win32 - env: PLATFORM=Win32
compiler: gcc compiler: gcc
os: linux os: linux
addons:
apt:
packages: ['gcc-mingw-w64-i686', 'g++-mingw-w64-i686', 'binutils-mingw-w64-i686']
sources: &sources
- ubuntu-toolchain-r-test
- sourceline: 'deb http://mirrors.kernel.org/ubuntu xenial main universe'
- env: PLATFORM=Win64 - env: PLATFORM=Win64
compiler: gcc compiler: gcc
os: linux os: linux
- env: PLATFORM=Unix COMPILER=clang addons:
apt:
packages: ['gcc-mingw-w64-x86-64', 'g++-mingw-w64-x86-64', 'binutils-mingw-w64-x86-64']
sources: &sources
- ubuntu-toolchain-r-test
- sourceline: 'deb http://mirrors.kernel.org/ubuntu xenial main universe'
- env: PLATFORM=Unix
compiler: clang compiler: clang
os: osx os: osx
- env: PLATFORM=Unix COMPILER=g++ osx_image: xcode8
- env: PLATFORM=Unix COMPILER=gcc-6
compiler: gcc compiler: gcc
os: linux os: linux
- env: PLATFORM=Unix COMPILER=clang addons:
compiler: clang apt:
os: linux packages: ['gcc-6', 'g++-6']
- env: PLATFORM=Unix COMPILER=clang VALGRIND=1 sources: &sources
compiler: clang - ubuntu-toolchain-r-test
os: linux
dist: trusty - env: PLATFORM=Unix COMPILER=gcc-7
- env: COMPILER=none LINT=1
compiler: clang
os: linux
dist: trusty
- env: PLATFORM=Unix COMPILER=g++-6
compiler: gcc compiler: gcc
os: linux os: linux
addons: addons:
apt: apt:
sources: &sources packages: ['gcc-7', 'g++-7']
- ubuntu-toolchain-r-test sources: &sources
- ubuntu-toolchain-r-test
- env: PLATFORM=Unix COMPILER=clang-3.6
compiler: clang
os: linux
addons:
apt:
packages: ['clang-3.6', 'clang++-3.6']
sources: &sources
- llvm-toolchain-trusty-3.6
- env: PLATFORM=Unix COMPILER=clang-4.0
compiler: clang
os: linux
addons:
apt:
packages: ['clang-4.0', 'clang++-4.0']
sources: &sources
- llvm-toolchain-trusty-4.0
- env: PLATFORM=Unix COMPILER=clang-4.0 VALGRIND=1
compiler: clang
os: linux
addons:
apt:
packages: ['valgrind', 'clang-4.0', 'clang++-4.0']
sources: &sources
- llvm-toolchain-trusty-4.0
- env: LINT=1
compiler: clang
os: linux
addons:
apt:
packages: ['clang-format-4.0']
sources: &sources
- llvm-toolchain-trusty-4.0

@ -9,6 +9,8 @@ endif()
project(minetest) project(minetest)
set(PROJECT_NAME_CAPITALIZED "Minetest") set(PROJECT_NAME_CAPITALIZED "Minetest")
# Works only for cmake 3.1 and greater
set(CMAKE_CXX_STANDARD 11)
# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 0) set(VERSION_MAJOR 0)

@ -708,7 +708,7 @@ include(CheckCXXCompilerFlag)
if(MSVC) if(MSVC)
# Visual Studio # Visual Studio
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11")
# EHa enables SEH exceptions (used for catching segfaults) # EHa enables SEH exceptions (used for catching segfaults)
set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /GL /FD /MT /GS- /Zi /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP") set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /GL /FD /MT /GS- /Zi /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
#set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"") #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
@ -728,9 +728,10 @@ if(MSVC)
# /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")
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# Probably GCC # Probably GCC
if(APPLE) if(APPLE)
SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" ) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" )
endif() endif()
if(WARN_ALL) if(WARN_ALL)
set(RELEASE_WARNING_FLAGS "-Wall") set(RELEASE_WARNING_FLAGS "-Wall")

@ -40,6 +40,7 @@ public:
void beginSave() {} void beginSave() {}
void endSave() {} void endSave() {}
private: private:
std::map<s64, std::string> m_database; std::map<s64, std::string> m_database;
}; };

@ -41,6 +41,7 @@ public:
void beginSave() {} void beginSave() {}
void endSave() {} void endSave() {}
private: private:
leveldb::DB *m_database; leveldb::DB *m_database;
}; };

@ -79,6 +79,7 @@ public:
u32 m_added_objects; u32 m_added_objects;
IGameDef *getGameDef() { return m_gamedef; } IGameDef *getGameDef() { return m_gamedef; }
protected: protected:
GenericAtomic<float> m_time_of_day_speed; GenericAtomic<float> m_time_of_day_speed;

@ -80,6 +80,7 @@ public:
return true; return true;
} }
u16 size() const { return m_id_to_name.size(); } u16 size() const { return m_id_to_name.size(); }
private: private:
UNORDERED_MAP<u16, std::string> m_id_to_name; UNORDERED_MAP<u16, std::string> m_id_to_name;
UNORDERED_MAP<std::string, u16> m_name_to_id; UNORDERED_MAP<std::string, u16> m_name_to_id;

@ -32,6 +32,7 @@ class MetaDataRef : public ModApiBase
{ {
public: public:
virtual ~MetaDataRef() {} virtual ~MetaDataRef() {}
protected: protected:
static MetaDataRef *checkobject(lua_State *L, int narg); static MetaDataRef *checkobject(lua_State *L, int narg);

@ -172,7 +172,7 @@ private:
IEventReceiver *m_receiver; IEventReceiver *m_receiver;
ISimpleTextureSource *m_texturesource; ISimpleTextureSource *m_texturesource;
v2u32 m_screensize; v2u32 m_screensize;
std::map<int, rect<s32> > m_hud_rects; std::map<int, rect<s32>> m_hud_rects;
std::map<int, irr::EKEY_CODE> m_hud_ids; std::map<int, irr::EKEY_CODE> m_hud_ids;
bool m_visible; // is the gui visible bool m_visible; // is the gui visible

@ -16,13 +16,13 @@ toolchain_file=$dir/toolchain_mingw.cmake
irrlicht_version=1.8.4 irrlicht_version=1.8.4
ogg_version=1.3.2 ogg_version=1.3.2
vorbis_version=1.3.5 vorbis_version=1.3.5
curl_version=7.50.3 curl_version=7.54.0
gettext_version=0.19.8.1 gettext_version=0.19.8.1
freetype_version=2.7 freetype_version=2.8
sqlite3_version=3.14.2 sqlite3_version=3.19.2
luajit_version=2.1.0-beta2 luajit_version=2.1.0-beta3
leveldb_version=1.18 leveldb_version=1.19
zlib_version=1.2.8 zlib_version=1.2.11
mkdir -p $packagedir mkdir -p $packagedir
mkdir -p $libdir mkdir -p $libdir

@ -16,13 +16,13 @@ toolchain_file=$dir/toolchain_mingw64.cmake
irrlicht_version=1.8.4 irrlicht_version=1.8.4
ogg_version=1.3.2 ogg_version=1.3.2
vorbis_version=1.3.5 vorbis_version=1.3.5
curl_version=7.50.3 curl_version=7.54.0
gettext_version=0.19.8.1 gettext_version=0.19.8.1
freetype_version=2.7 freetype_version=2.8
sqlite3_version=3.14.2 sqlite3_version=3.19.2
luajit_version=2.1.0-beta2 luajit_version=2.1.0-beta3
leveldb_version=1.18 leveldb_version=1.19
zlib_version=1.2.8 zlib_version=1.2.11
mkdir -p $packagedir mkdir -p $packagedir
mkdir -p $libdir mkdir -p $libdir

@ -1,49 +1,33 @@
#!/bin/bash -e #!/bin/bash -e
echo "Preparing for $TRAVIS_COMMIT_RANGE" echo "Preparing for $TRAVIS_COMMIT_RANGE"
if [[ "$LINT" == "1" ]]; then . util/travis/common.sh
curl http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-3.9 main" if [[ "${LINT}" == "1" ]]; then
sudo apt-get -yq update
sudo apt-get install clang-format-3.9
exit 0 exit 0
fi fi
. util/travis/common.sh
needs_compile || exit 0 needs_compile || exit 0
if [[ $TRAVIS_OS_NAME == "linux" ]]; then
sudo apt-get update
sudo apt-get install p7zip-full $COMPILER
fi
if [[ $PLATFORM == "Unix" ]]; then if [[ $PLATFORM == "Unix" ]]; then
if [[ $TRAVIS_OS_NAME == "linux" ]]; then if [[ $TRAVIS_OS_NAME == "linux" ]]; then
sudo apt-get update install_linux_deps
sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \
libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
gettext libpq-dev postgresql-server-dev-all
# Linking to LevelDB is broken, use a custom build
wget http://minetest.kitsunemimi.pw/libleveldb-1.18-ubuntu12.04.7z
sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z
if [[ "$VALGRIND" == "1" ]]; then
sudo apt-get install valgrind
fi
else else
brew update install_macosx_deps
brew install freetype gettext hiredis irrlicht jpeg leveldb libogg libvorbis luajit
#brew upgrade postgresql
fi fi
elif [[ $PLATFORM == "Win32" ]]; then elif [[ $PLATFORM == "Win32" ]]; then
wget http://minetest.kitsunemimi.pw/mingw_w64_i686_ubuntu12.04_4.9.1.7z -O mingw.7z sudo apt-get update
sudo apt-get install p7zip-full
wget http://minetest.kitsunemimi.pw/mingw-w64-i686_7.1.1_ubuntu14.04.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 sudo 7z x -y -o/usr mingw.7z
elif [[ $PLATFORM == "Win64" ]]; then elif [[ $PLATFORM == "Win64" ]]; then
wget http://minetest.kitsunemimi.pw/mingw_w64_x86_64_ubuntu12.04_4.9.1.7z -O mingw.7z sudo apt-get update
sudo apt-get install p7zip-full
wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_7.1.1_ubuntu14.04.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

@ -1,5 +1,40 @@
#!/bin/bash -e #!/bin/bash -e
set_linux_compiler_env() {
if [[ "${COMPILER}" == "gcc-5.1" ]]; then
export CC=gcc-5.1
export CXX=g++-5.1
elif [[ "${COMPILER}" == "gcc-6" ]]; then
export CC=gcc-6
export CXX=g++-6
elif [[ "${COMPILER}" == "gcc-7" ]]; then
export CC=gcc-7
export CXX=g++-7
elif [[ "${COMPILER}" == "clang-3.6" ]]; then
export CC=clang-3.6
export CXX=clang++-3.6
elif [[ "${COMPILER}" == "clang-4.0" ]]; then
export CC=clang-4.0
export CXX=clang++-4.0
fi
}
# Linux build only
install_linux_deps() {
sudo apt-get update
sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \
libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
gettext libpq-dev libleveldb-dev
}
# Mac OSX build only
install_macosx_deps() {
brew update
brew install freetype gettext hiredis irrlicht jpeg leveldb libogg libvorbis luajit
#brew upgrade postgresql
}
# Relative to git-repository root: # Relative to git-repository root:
TRIGGER_COMPILE_PATHS="src/.*\.(c|cpp|h)|CMakeLists.txt|cmake/Modules/|util/travis/|util/buildbot/" TRIGGER_COMPILE_PATHS="src/.*\.(c|cpp|h)|CMakeLists.txt|cmake/Modules/|util/travis/|util/buildbot/"

@ -1,8 +1,8 @@
#! /bin/bash #! /bin/bash
function perform_lint() { function perform_lint() {
echo "Performing LINT..." echo "Performing LINT..."
if hash clang-format-3.9 2>/dev/null; then if hash clang-format-4.0 2>/dev/null; then
CLANG_FORMAT=clang-format-3.9 CLANG_FORMAT=clang-format-4.0
else else
CLANG_FORMAT=clang-format CLANG_FORMAT=clang-format
fi fi

@ -10,22 +10,15 @@ if [[ "$LINT" == "1" ]]; then
exit 0 exit 0
fi fi
if [[ $PLATFORM == "Unix" ]]; then set_linux_compiler_env
if [[ ${PLATFORM} == "Unix" ]]; then
mkdir -p travisbuild mkdir -p travisbuild
cd travisbuild || exit 1 cd travisbuild || exit 1
CMAKE_FLAGS='' CMAKE_FLAGS=''
if [[ $COMPILER == "g++-6" ]]; then
export CC=gcc-6
export CXX=g++-6
fi
# Clang builds with FreeType fail on Travis if [[ ${TRAVIS_OS_NAME} == "osx" ]]; then
if [[ $CC == "clang" ]]; then
CMAKE_FLAGS+=' -DENABLE_FREETYPE=FALSE'
fi
if [[ $TRAVIS_OS_NAME == "osx" ]]; then
CMAKE_FLAGS+=' -DCUSTOM_GETTEXT_PATH=/usr/local/opt/gettext' CMAKE_FLAGS+=' -DCUSTOM_GETTEXT_PATH=/usr/local/opt/gettext'
fi fi
@ -33,12 +26,12 @@ if [[ $PLATFORM == "Unix" ]]; then
-DRUN_IN_PLACE=TRUE \ -DRUN_IN_PLACE=TRUE \
-DENABLE_GETTEXT=TRUE \ -DENABLE_GETTEXT=TRUE \
-DBUILD_SERVER=TRUE \ -DBUILD_SERVER=TRUE \
$CMAKE_FLAGS .. ${CMAKE_FLAGS} ..
make -j2 make -j2
echo "Running unit tests." echo "Running unit tests."
CMD="../bin/minetest --run-unittests" CMD="../bin/minetest --run-unittests"
if [[ "$VALGRIND" == "1" ]]; then if [[ "${VALGRIND}" == "1" ]]; then
valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ${CMD} && exit 0 valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ${CMD} && exit 0
else else
${CMD} && exit 0 ${CMD} && exit 0