From 16d97f91212c1b1b4cd775ab9808afb66b648267 Mon Sep 17 00:00:00 2001 From: Didier Raboud Date: Sun, 30 Dec 2012 12:16:43 +0100 Subject: [PATCH 1/5] Revert "Minor cmake grammar fix" It appears I was really wrong. Damn. This reverts commit 277629f9fec069afce32a21fd6baeb4f24d5784c. --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 399ae965..fbdd7cc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,11 +209,11 @@ if(${TESTS}) endif() # Installation paths defined before compiling sources -set(COLOBOT_INSTALL_BIN_DIR games CACHE PATH "Colobot binary directory") -set(COLOBOT_INSTALL_DATA_DIR share/games/colobot CACHE PATH "Colobot shared data directory") -set(COLOBOT_INSTALL_LIB_DIR lib/colobot CACHE PATH "Colobot libraries directory") -set(COLOBOT_INSTALL_DOC_DIR share/doc/colobot CACHE PATH "Colobot documentation directory") -set(COLOBOT_INSTALL_I18N_DIR share/locale CACHE PATH "Colobot translations directory") +set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory") +set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory") +set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory") +set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory") +set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE PATH "Colobot translations directory") # Subdirectory with sources add_subdirectory(src bin) From 3fa5e9c9cc965f8077b0322ff7e4142f2d57f5a4 Mon Sep 17 00:00:00 2001 From: Didier Raboud Date: Wed, 2 Jan 2013 12:24:26 +0100 Subject: [PATCH 2/5] In levels' lists, fallback to english - Implemented in a naive way: Take the English version if found, but continue until the translated version is found. This has the drawback of letting the loop reach its end if the level has no translation. --- src/ui/maindialog.cpp | 51 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp index 68e78546..bbba825f 100644 --- a/src/ui/maindialog.cpp +++ b/src/ui/maindialog.cpp @@ -4277,6 +4277,7 @@ void CMainDialog::IOReadName() CEdit* pe; std::string filename; char op[100]; + char op_i18n[100]; char line[500]; char resume[100]; char name[100]; @@ -4290,6 +4291,9 @@ void CMainDialog::IOReadName() sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1); BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100); + sprintf(op, "Title.E"); + sprintf(op_i18n, "Title.%c", m_app->GetLanguageChar() ); + file = fopen(filename.c_str(), "r"); if ( file != NULL ) { @@ -4305,9 +4309,11 @@ void CMainDialog::IOReadName() } } - // TODO: Fallback to an non-localized entry - sprintf(op, "Title.%c", m_app->GetLanguageChar() ); if ( Cmd(line, op) ) + { + OpString(line, "resume", resume); + } + if ( Cmd(line, op_i18n) ) { OpString(line, "resume", resume); break; @@ -4648,12 +4654,14 @@ void CMainDialog::UpdateSceneChap(int &chap) //struct _finddata_t fileBuffer; std::string fileName; char op[100]; + char op_i18n[100]; char line[500]; char name[100]; int i, j; bool bPassed; memset(op, 0, 100); + memset(op_i18n, 0, 100); memset(line, 0, 500); memset(name, 0, 100); @@ -4689,6 +4697,9 @@ void CMainDialog::UpdateSceneChap(int &chap) else { BuildResumeName(name, m_sceneName, j+1); // default name + sprintf(op, "Title.E"); + sprintf(op_i18n, "Title.%c", m_app->GetLanguageChar()); + while ( fgets(line, 500, file) != NULL ) { for ( i=0 ; i<500 ; i++ ) @@ -4701,9 +4712,11 @@ void CMainDialog::UpdateSceneChap(int &chap) } } - // TODO: Fallback to an non-localized entry - sprintf(op, "Title.%c", m_app->GetLanguageChar()); if ( Cmd(line, op) ) + { + OpString(line, "text", name); + } + if ( Cmd(line, op_i18n) ) { OpString(line, "text", name); break; @@ -4736,6 +4749,9 @@ void CMainDialog::UpdateSceneChap(int &chap) if ( file == NULL ) break; BuildResumeName(name, m_sceneName, j+1); // default name + sprintf(op, "Title.E"); + sprintf(op_i18n, "Title.%c", m_app->GetLanguageChar()); + while ( fgets(line, 500, file) != NULL ) { for ( i=0 ; i<500 ; i++ ) @@ -4748,9 +4764,11 @@ void CMainDialog::UpdateSceneChap(int &chap) } } - // TODO: Fallback to an non-localized entry - sprintf(op, "Title.%c", m_app->GetLanguageChar()); if ( Cmd(line, op) ) + { + OpString(line, "text", name); + } + if ( Cmd(line, op_i18n) ) { OpString(line, "text", name); break; @@ -4801,12 +4819,14 @@ void CMainDialog::UpdateSceneList(int chap, int &sel) CList* pl; std::string fileName; char op[100]; + char op_i18n[100]; char line[500]; char name[100]; int i, j; bool bPassed; memset(op, 0, 100); + memset(op_i18n, 0, 100); memset(line, 0, 500); memset(name, 0, 100); @@ -4839,6 +4859,9 @@ void CMainDialog::UpdateSceneList(int chap, int &sel) if ( file == NULL ) break; BuildResumeName(name, m_sceneName, j+1); // default name + sprintf(op, "Title.E"); + sprintf(op_i18n, "Title.%c", m_app->GetLanguageChar()); + while ( fgets(line, 500, file) != NULL ) { for ( i=0 ; i<500 ; i++ ) @@ -4851,9 +4874,11 @@ void CMainDialog::UpdateSceneList(int chap, int &sel) } } - // TODO: Fallback to an non-localized entry - sprintf(op, "Title.%c", m_app->GetLanguageChar()); if ( Cmd(line, op) ) + { + OpString(line, "text", name); + } + if ( Cmd(line, op_i18n) ) { OpString(line, "text", name); break; @@ -4950,6 +4975,7 @@ void CMainDialog::UpdateSceneResume(int rank) CCheck* pc; std::string fileName; char op[100]; + char op_i18n[100]; char line[500]; char name[500]; int i, numTry; @@ -4980,6 +5006,9 @@ void CMainDialog::UpdateSceneResume(int rank) } BuildSceneName(fileName, m_sceneName, rank); + sprintf(op, "Resume.E"); + sprintf(op_i18n, "Resume.%c", m_app->GetLanguageChar()); + file = fopen(fileName.c_str(), "r"); if ( file == NULL ) return; @@ -4996,9 +5025,11 @@ void CMainDialog::UpdateSceneResume(int rank) } } - // TODO: Fallback to an non-localized entry - sprintf(op, "Resume.%c", m_app->GetLanguageChar()); if ( Cmd(line, op) ) + { + OpString(line, "text", name); + } + if ( Cmd(line, op_i18n) ) { OpString(line, "text", name); break; From ffb4d9ff4fbee5c96ff7828044e9002d85843b6a Mon Sep 17 00:00:00 2001 From: Didier Raboud Date: Wed, 2 Jan 2013 14:23:17 +0100 Subject: [PATCH 3/5] Let CMake rely on data's CMakeLists.txt if it exists - Also update data to latest 'dev', where the CMakeLists exists --- CMakeLists.txt | 11 +++++++---- data | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fbdd7cc1..8640832a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -223,10 +223,13 @@ add_subdirectory(src bin) # Installation ## -file(GLOB DATA_FILES "data/*") - -# Data -install(DIRECTORY data/ DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) +# Data: check if the submodule handles its own installation +if(EXISTS "${CMAKE_SOURCE_DIR}/data/CMakeLists.txt") + message(STATUS "Data directory will install itself.") + add_subdirectory(data) +else() + message(WARNING "Data directory is not available; make sure colobot-data is installed in ${COLOBOT_INSTALL_DATA_DIR}.") +endif() # Documentation if(INSTALL_DOCS AND DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND) diff --git a/data b/data index 6b6e5a0a..5a991a77 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 6b6e5a0ab56bf42f17d969c1bd4c09185605cad6 +Subproject commit 5a991a77eb5f476d29b4d4f976be48fdf74a053f From 1285712aa22382a1a0d943aa29b310ecf6ebd365 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Tue, 8 Jan 2013 22:12:09 +0100 Subject: [PATCH 4/5] CMakeLists enhancements - compiler detection (clang and gcc version check) - compile flags only for src/ subdir - system and local include paths - fix for clang compilation --- CMakeLists.txt | 25 +++++++++++++++++++++---- lib/gmock/CMakeLists.txt | 2 ++ src/CMakeLists.txt | 16 ++++++++++++++-- src/graphics/engine/modelmanager.cpp | 4 ++-- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 339e633a..7e19ba06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,10 +47,27 @@ if(NOT CMAKE_BUILD_TYPE) endif() # Global compile flags -# These are specific to GCC/MinGW; for other compilers, change as necessary -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=c++11") -set(CMAKE_CXX_FLAGS_RELEASE "-O2") -set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") +# These are specific to GCC/MinGW/clang; for other compilers, change as necessary +# The flags are used throughout src/ subdir +set(COLOBOT_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=c++11") +set(COLOBOT_CXX_FLAGS_RELEASE "-O2") +set(COLOBOT_CXX_FLAGS_DEBUG "-g -O0") + +# Compiler detection +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + execute_process( + COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + if (NOT (GCC_VERSION VERSION_GREATER 4.6 OR GCC_VERSION VERSION_EQUAL 4.6)) + message(FATAL_ERROR "${PROJECT_NAME} requires GCC 4.6 or greater.") + else() + message(STATUS "Detected GCC version 4.6+") + endif() +elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + message(STATUS "Detected Clang compiler") +else() + message(FATAL_ERROR "Your C++ compiler doesn't seem to support C++11.\n" + "Supported compilers at this time are GCC 4.6+ and clang.") +endif() # Asserts can be enabled/disabled regardless of build type option(ASSERTS "Enable assert()s" ON) diff --git a/lib/gmock/CMakeLists.txt b/lib/gmock/CMakeLists.txt index 3fec0d35..e7ff8035 100644 --- a/lib/gmock/CMakeLists.txt +++ b/lib/gmock/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 2.8) +set(CMAKE_CXX_FLAGS "${${ORIGINAL_CXX_FLAGS}}") + include_directories(. include ${GTEST_INCLUDE_DIR}) # gmock-all.cc includes all other sources diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c00d347a..a90b7351 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,13 @@ -# CBot library is built separately +# Compile flags as defined in global CMakeLists +set(CMAKE_CXX_FLAGS ${COLOBOT_CXX_FLAGS}) +set(CMAKE_CXX_FLAGS_RELEASE ${COLOBOT_CXX_FLAGS_RELEASE}) +set(CMAKE_CXX_FLAGS_DEBUG ${COLOBOT_CXX_FLAGS_DEBUG}) + + +# Subdirectories + add_subdirectory(CBot) -# Tools directory is built separately add_subdirectory(tools) add_subdirectory(po) @@ -196,10 +202,16 @@ ${OPTIONAL_LIBS} ${PLATFORM_LIBS} ) +# Local include_directories( . .. ${CMAKE_CURRENT_BINARY_DIR} +) + +# System +include_directories( +SYSTEM ${SDL_INCLUDE_DIR} ${SDLIMAGE_INCLUDE_DIR} ${SDLTTF_INCLUDE_DIR} diff --git a/src/graphics/engine/modelmanager.cpp b/src/graphics/engine/modelmanager.cpp index afaa7180..5b177692 100644 --- a/src/graphics/engine/modelmanager.cpp +++ b/src/graphics/engine/modelmanager.cpp @@ -8,9 +8,9 @@ #include -namespace Gfx { +template<> Gfx::CModelManager* CSingleton::mInstance = nullptr; -template<> CModelManager* CSingleton::mInstance = nullptr; +namespace Gfx { CModelManager::CModelManager(CEngine* engine) { From cf722462438707871e53bd96235b767e77dce6d3 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Wed, 9 Jan 2013 21:55:34 +0100 Subject: [PATCH 5/5] Disabled travis e-mail notifications --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 660a2f59..6763668c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,3 +6,5 @@ before_install: - git submodule update --init --recursive - sudo apt-get update -qq - sudo apt-get install -qq --no-install-recommends libgl1-mesa-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libpng12-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev google-mock libgtest-dev doxygen graphviz po4a librsvg2-bin +notifications: + email: false