Changeset 2702 for code/branches/buildsystem3/src
- Timestamp:
- Feb 27, 2009, 2:13:29 PM (16 years ago)
- Location:
- code/branches/buildsystem3/src
- Files:
-
- 17 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/buildsystem3/src/CMakeLists.txt
r2690 r2702 62 62 CHECK_CXX_SOURCE_COMPILES("${_source}" HAVE_FORCEINLINE) 63 63 64 # Check ciso646 include ( operators in words)64 # Check ciso646 include (literal operators) 65 65 INCLUDE(CheckIncludeFileCXX) 66 66 CHECK_INCLUDE_FILE_CXX(iso646.h HAVE_ISO646_H) … … 78 78 # Copy and configure OrxonoxConfig which gets included in every file 79 79 CONFIGURE_FILE(OrxonoxConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/OrxonoxConfig.h) 80 # This file only gets included by very few classes to avoid a large recompilation 81 CONFIGURE_FILE(SpecialConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/SpecialConfig.h) 80 82 81 83 -
code/branches/buildsystem3/src/OrxonoxConfig.h.in
r2688 r2702 180 180 * Various Settings 181 181 *-------------------------------*/ 182 /* Set whether we must suffix "ceguilua/" for the CEGUILua.h include */ 183 #cmakedefine CEGUILUA_USE_INTERNAL_LIBRARY 184 185 /* Defined if a precompiled depdency package was used. We then copy all libraries 186 too when installing. */ 187 #cmakedefine DEPENDENCY_PACKAGE_ENABLE 188 189 /* Using MSVC or XCode IDE */ 190 #cmakedefine CMAKE_CONFIGURATION_TYPES 191 192 /* Macros used in the next section */ 193 #define MACRO_CONCATENATE(str1, str2) str1##str2 194 #define MACRO_QUOTEME_AUX(x) #x 195 #define MACRO_QUOTEME(x) MACRO_QUOTEME_AUX(x) 196 197 /* Handle default ConfigValues */ 182 /* Define a platform independent directory separator */ 198 183 namespace orxonox 199 184 { 200 const char* const ORXONOX_MEDIA_INSTALL_PATH ("@ORXONOX_MEDIA_INSTALL_PATH_EXEC@/"); 201 const char* const ORXONOX_CONFIG_INSTALL_PATH("@ORXONOX_CONFIG_INSTALL_PATH_EXEC@/"); 202 const char* const ORXONOX_LOG_INSTALL_PATH ("@ORXONOX_LOG_INSTALL_PATH_EXEC@/"); 203 204 const char* const ORXONOX_MEDIA_DEV_PATH ("@ORXONOX_MEDIA_DEV_PATH@/"); 205 #ifdef CMAKE_CONFIGURATION_TYPES 206 const char* const ORXONOX_CONFIG_DEV_PATH ("@ORXONOX_CONFIG_DEV_PATH@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE) "/"); 207 const char* const ORXONOX_LOG_DEV_PATH ("@ORXONOX_LOG_DEV_PATH@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE) "/"); 185 #ifdef ORXONOX_PLATFORM_WINDOWS 186 const char CP_SLASH('\\'); 208 187 #else 209 const char* const ORXONOX_CONFIG_DEV_PATH ("@ORXONOX_CONFIG_DEV_PATH@/"); 210 const char* const ORXONOX_LOG_DEV_PATH ("@ORXONOX_LOG_DEV_PATH@/"); 211 #endif 212 213 /* OGRE Plugins */ 214 #ifdef NDEBUG 215 const char* const ORXONOX_OGRE_PLUGINS("@OGRE_PLUGINS_RELEASE@"); 216 # ifdef DEPENDENCY_PACKAGE_ENABLE 217 const char* const ORXONOX_OGRE_PLUGINS_FOLDER("."); 218 # else 219 const char* const ORXONOX_OGRE_PLUGINS_FOLDER("@OGRE_PLUGINS_FOLDER_RELEASE@"); 220 # endif 221 #else 222 const char* const ORXONOX_OGRE_PLUGINS("@OGRE_PLUGINS_DEBUG@"); 223 # ifdef DEPENDENCY_PACKAGE_ENABLE 224 const char* const ORXONOX_OGRE_PLUGINS_FOLDER("."); 225 # else 226 const char* const ORXONOX_OGRE_PLUGINS_FOLDER("@OGRE_PLUGINS_FOLDER_DEBUG@"); 227 # endif 188 const char CP_SLASH('/') 228 189 #endif 229 190 } 230 191 192 231 193 #endif /* _OrxonoxConfig_H__ */ -
code/branches/buildsystem3/src/SpecialConfig.h.in
r2699 r2702 25 25 * ... 26 26 * 27 * Original code: OgrePlatform.h, licensed under the LGPL. The code28 * has changed almost completely though.29 *30 * Caution: Do not configure this file CMake configuration (Debug, Release, etc.)31 * dependent! XCode and Visual Studio have the same file for all.32 *33 27 */ 34 28 … … 36 30 @file 37 31 @brief 38 Various constants for compiler, architecture and platform. 32 Various constants and options that only affect very little code. 33 @note 34 This is merely to avoid recompiling everything when only a path changes. 39 35 40 36 @GENERATED_FILE_COMMENT@ 41 37 */ 42 38 43 #ifndef _ OrxonoxConfig_H__44 #define _ OrxonoxConfig_H__39 #ifndef _SpecialConfig_H__ 40 #define _SpecialConfig_H__ 45 41 46 /*---------------------------------47 * Platform and compiler related options48 *-------------------------------*/49 #cmakedefine ORXONOX_PLATFORM_WINDOWS50 #cmakedefine ORXONOX_PLATFORM_LINUX51 #cmakedefine ORXONOX_PLATFORM_APPLE52 #cmakedefine ORXONOX_PLATFORM_UNIX /* Apple and Linux */53 54 /* Determine compiler and set ORXONOX_COMP_VER */55 #if defined( _MSC_VER )56 # define ORXONOX_COMPILER_MSVC57 # define ORXONOX_COMP_VER _MSC_VER58 59 #elif defined( __GNUC__ )60 # define ORXONOX_COMPILER_GCC61 # define ORXONOX_COMP_VER (((__GNUC__)*100) + \62 (__GNUC_MINOR__*10) + \63 __GNUC_PATCHLEVEL__)64 # if defined(__MINGW32__)65 # define ORXONOX_COMPILER_MINGW66 # endif67 68 #elif defined( __BORLANDC__ )69 # define ORXONOX_COMPILER_BORLAND70 # define ORXONOX_COMP_VER __BCPLUSPLUS__71 72 #else73 # pragma error "No known compiler. Abort!"74 75 #endif76 77 /* Endianness */78 #cmakedefine ORXONOX_BIG_ENDIAN79 #cmakedefine ORXONOX_LITTLE_ENDIAN80 81 /* Architecture */82 #cmakedefine ORXONOX_ARCH_3283 #cmakedefine ORXONOX_ARCH_6484 85 /* See if we can use __forceinline or if we need to use __inline instead */86 #cmakedefine HAVE_FORCEINLINE87 #ifdef HAVE_FORCEINLINE88 # define FORCEINLINE __forceinline89 #else90 # define FORCEINLINE __inline91 #endif92 93 /* Try to define function information */94 #ifndef __FUNCTIONNAME__95 # ifdef ORXONOX_COMPILER_BORLAND96 # define __FUNCTIONNAME__ __FUNC__97 # elif defined(ORXONOX_COMPILER_GCC)98 # define __FUNCTIONNAME__ __PRETTY_FUNCTION__99 # elif defined(ORXONOX_COMPILER_MSVC)100 # define __FUNCTIONNAME__ __FUNCTION__101 # else102 # define __FUNCTIONNAME__103 # endif104 #endif105 106 107 /*---------------------------------108 * Version information109 *-------------------------------*/110 #define ORXONOX_VERSION_MAJOR @ORXONOX_VERSION_MAJOR@111 #define ORXONOX_VERSION_MINOR @ORXONOX_VERSION_MINOR@112 #define ORXONOX_VERSION_PATCH @ORXONOX_VERSION_PATCH@113 #define ORXONOX_VERSION_NAME "@ORXONOX_VERSION_NAME@"114 115 #define ORXONOX_VERSION ((ORXONOX_VERSION_MAJOR << 16) | (ORXONOX_VERSION_MINOR << 8) | ORXONOX_VERSION_PATCH)116 117 118 /*---------------------------------119 * Unix settings120 *-------------------------------*/121 #ifdef ORXONOX_PLATFORM_UNIX122 123 /* TODO: Check what this actually is and whether we need it or not */124 #if 0125 # ifdef ORXONOX_PLATFORM_APPLE126 # define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"127 # else128 /* ORXONOX_PLATFORM_LINUX */129 # define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"130 # endif131 #endif132 133 #endif /* Patform Unix */134 135 136 /*---------------------------------137 * Apple Settings138 *-------------------------------*/139 140 141 /*---------------------------------142 * Includes143 *-------------------------------*/144 /* Define the english written operators like and, or, xor145 * This is C++ standard, but the Microsoft compiler doesn't define them. */146 #cmakedefine HAVE_ISO646_H147 #ifdef HAVE_ISO646_H148 # include <iso646.h>149 #endif150 151 #cmakedefine HAVE_STDINT_H152 #ifdef HAVE_STDINT_H153 # include <stdint.h>154 #elif defined(ORXONOX_COMPILER_MSVC)155 typedef __int8 int8_t;156 typedef __int16 int16_t;157 typedef __int32 int32_t;158 typedef __int64 int64_t;159 typedef unsigned __int8 uint8_t;160 typedef unsigned __int16 uint16_t;161 typedef unsigned __int32 uint32_t;162 typedef unsigned __int64 uint64_t;163 #endif164 165 #cmakedefine HAVE_STDDEF_H166 /* Quite large, do not include unless necessary167 #ifdef HAVE_STDDEF_H168 # include <stddef.h>169 #endif170 */171 172 /* Visual Leak Detector looks for memory leaks */173 #cmakedefine VISUAL_LEAK_DETECTOR_ENABLE174 #ifdef VISUAL_LEAK_DETECTOR_ENABLE175 # include <vld.h>176 #endif177 178 179 /*---------------------------------180 * Various Settings181 *-------------------------------*/182 42 /* Set whether we must suffix "ceguilua/" for the CEGUILua.h include */ 183 43 #cmakedefine CEGUILUA_USE_INTERNAL_LIBRARY … … 186 46 too when installing. */ 187 47 #cmakedefine DEPENDENCY_PACKAGE_ENABLE 48 49 /* Orxonox either gets installed to the system or just into a folder. 50 The latter uses relative paths. */ 51 #cmakedefine INSTALL_COPYABLE 188 52 189 53 /* Using MSVC or XCode IDE */ … … 198 62 namespace orxonox 199 63 { 200 const char* const ORXONOX_MEDIA_INSTALL_PATH ("@ORXONOX_MEDIA_INSTALL_PATH_EXEC@/"); 201 const char* const ORXONOX_CONFIG_INSTALL_PATH("@ORXONOX_CONFIG_INSTALL_PATH_EXEC@/"); 202 const char* const ORXONOX_LOG_INSTALL_PATH ("@ORXONOX_LOG_INSTALL_PATH_EXEC@/"); 64 const char* const ORXONOX_RUNTIME_INSTALL_PATH("@ORXONOX_RUNTIME_INSTALL_PATH@"); 65 const char* const ORXONOX_MEDIA_INSTALL_PATH ("@ORXONOX_MEDIA_INSTALL_PATH@"); 66 /* Config and Log path might be relative because they could be user and therefore runtime dependent */ 67 const char* const ORXONOX_CONFIG_INSTALL_PATH ("@ORXONOX_CONFIG_INSTALL_PATH@"); 68 const char* const ORXONOX_LOG_INSTALL_PATH ("@ORXONOX_LOG_INSTALL_PATH@"); 203 69 204 const char* const ORXONOX_MEDIA_DEV_PATH ("@ORXONOX_MEDIA_DEV_PATH@/");70 const char* const ORXONOX_MEDIA_DEV_PATH ("@CMAKE_MEDIA_OUTPUT_DIRECTORY@"); 205 71 #ifdef CMAKE_CONFIGURATION_TYPES 206 const char* const ORXONOX_CONFIG_DEV_PATH ("@ORXONOX_CONFIG_DEV_PATH@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE) "/");207 const char* const ORXONOX_LOG_DEV_PATH ("@ORXONOX_LOG_DEV_PATH@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE) "/");72 const char* const ORXONOX_CONFIG_DEV_PATH ("@CMAKE_CONFIG_OUTPUT_DIRECTORY@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE)); 73 const char* const ORXONOX_LOG_DEV_PATH ("@CMAKE_LOG_OUTPUT_DIRECTORY@/" MACRO_QUOTEME(CMAKE_BUILD_TYPE)); 208 74 #else 209 const char* const ORXONOX_CONFIG_DEV_PATH ("@ORXONOX_CONFIG_DEV_PATH@/");210 const char* const ORXONOX_LOG_DEV_PATH ("@ORXONOX_LOG_DEV_PATH@/");75 const char* const ORXONOX_CONFIG_DEV_PATH ("@CMAKE_CONFIG_OUTPUT_DIRECTORY@"); 76 const char* const ORXONOX_LOG_DEV_PATH ("@CMAKE_LOG_OUTPUT_DIRECTORY@"); 211 77 #endif 212 78 … … 229 95 } 230 96 231 #endif /* _ OrxonoxConfig_H__ */97 #endif /* _SpecialConfig_H__ */ -
code/branches/buildsystem3/src/core/ArgumentCompletionFunctions.cc
r2664 r2702 27 27 */ 28 28 29 #include "ArgumentCompletionFunctions.h" 30 29 31 #include <iostream> 30 32 #include <map> 31 32 33 #include <boost/filesystem.hpp> 33 34 34 #include "ArgumentCompletionFunctions.h"35 35 #include "CoreIncludes.h" 36 36 #include "Identifier.h" … … 68 68 std::string dir = startdirectory.string(); 69 69 if (dir.size() > 0 && dir[dir.size() - 1] == ':') 70 startdirectory = dir + "/";70 startdirectory = dir + CP_SLASH; 71 71 } 72 72 #endif … … 78 78 { 79 79 if (boost::filesystem::is_directory(*file)) 80 dirlist.push_back(ArgumentCompletionListElement((*file).string() + "/", getLowercase((*file).string()) + "/", (*file).leaf() + "/"));80 dirlist.push_back(ArgumentCompletionListElement((*file).string() + CP_SLASH, getLowercase((*file).string()) + "/", (*file).leaf() + "/")); 81 81 else 82 82 filelist.push_back(ArgumentCompletionListElement((*file).string(), getLowercase((*file).string()), (*file).leaf())); -
code/branches/buildsystem3/src/core/CommandLine.cc
r2687 r2702 302 302 303 303 std::string filename = CommandLine::getValue("optionsFile").getString(); 304 boost::filesystem::path folder(Core::getConfigPath()); 305 boost::filesystem::path filepath(folder/filename); 304 boost::filesystem::path filepath(Core::getConfigPath() / filename); 306 305 307 306 // look for additional arguments in given file or start.ini as default -
code/branches/buildsystem3/src/core/ConfigFileManager.cc
r2690 r2702 227 227 228 228 // Get default file if necessary and available 229 boost::filesystem::path filepath(Core::getConfigPath()); 230 filepath /= this->filename_; 229 boost::filesystem::path filepath(Core::getConfigPath() / this->filename_); 231 230 if (!boost::filesystem::exists(filepath)) 232 231 { 233 232 // Try to get default one from the media folder 234 boost::filesystem::path defaultFilepath(Core::getMediaPath()); 235 defaultFilepath = defaultFilepath / "defaultConfig" / this->filename_; 233 boost::filesystem::path defaultFilepath(Core::getMediaPath() / "defaultConfig" / this->filename_); 236 234 if (boost::filesystem::exists(defaultFilepath)) 237 235 { … … 345 343 void ConfigFile::save() const 346 344 { 347 boost::filesystem::path filepath(Core::getConfigPath()); 348 filepath /= this->filename_; 345 boost::filesystem::path filepath(Core::getConfigPath() / this->filename_); 349 346 350 347 std::ofstream file; -
code/branches/buildsystem3/src/core/Core.cc
r2692 r2702 33 33 34 34 #include "Core.h" 35 35 36 #include <cassert> 36 37 #include <fstream> 38 #include <cstdlib> 39 #include <cstdio> 37 40 #include <boost/filesystem.hpp> 38 41 42 #ifdef ORXONOX_PLATFORM_WINDOWS 43 # include <windows.h> 44 #elif defined(ORXONOX_PLATFORM_APPLE) 45 # include <sys/param.h> 46 # include <mach-o/dyld.h> 47 #else /* Linux */ 48 # include <sys/types.h> 49 # include <unistd.h> 50 #endif 51 52 #include "SpecialConfig.h" 39 53 #include "util/Exception.h" 40 54 #include "Language.h" … … 46 60 namespace orxonox 47 61 { 62 //! Path to the parent directory of the ones above if program was installed with relativ pahts 63 static boost::filesystem::path rootPath_g; 64 static boost::filesystem::path executablePath_g; //!< Path to the executable 65 static boost::filesystem::path mediaPath_g; //!< Path to the media file folder 66 static boost::filesystem::path configPath_g; //!< Path to the config file folder 67 static boost::filesystem::path logPath_g; //!< Path to the log file folder 68 48 69 bool Core::bShowsGraphics_s = false; 49 70 bool Core::bHasServer_s = false; … … 53 74 54 75 bool Core::isDevBuild_s = false; 55 std::string Core::configPath_s(ORXONOX_CONFIG_INSTALL_PATH); // from OrxonoxConfig.h 56 std::string Core::logPath_s (ORXONOX_LOG_INSTALL_PATH); // from OrxonoxConfig.h 57 std::string Core::mediaPath_s (ORXONOX_MEDIA_INSTALL_PATH); // from OrxonoxConfig.h 58 59 Core* Core::singletonRef_s = 0; 76 Core* Core::singletonRef_s = 0; 60 77 61 78 SetCommandLineArgument(mediaPath, "").information("PATH"); … … 76 93 77 94 // Set the correct log path. Before this call, /tmp (Unix) or %TEMP% was used 78 OutputHandler::getOutStream().setLogPath(Core:: logPath_s);95 OutputHandler::getOutStream().setLogPath(Core::getLogPathString()); 79 96 80 97 // Possible media path override by the command line 81 98 if (!CommandLine::getArgument("mediaPath")->hasDefaultValue()) 82 99 { 83 std::string mediaPath = CommandLine::getValue("mediaPath");84 Core::tsetMediaPath( mediaPath);100 //std::string mediaPath = CommandLine::getValue("mediaPath"); 101 Core::tsetMediaPath(CommandLine::getValue("mediaPath")); 85 102 } 86 103 } … … 119 136 SetConfigValue(bInitializeRandomNumberGenerator_, true).description("If true, all random actions are different each time you start the game").callback(this, &Core::initializeRandomNumberGenerator); 120 137 121 // Media path (towards config and log path) is ini-configurable 122 const char* defaultMediaPath = ORXONOX_MEDIA_INSTALL_PATH; 123 if (Core::isDevBuild()) 124 defaultMediaPath = ORXONOX_MEDIA_DEV_PATH; 125 126 SetConfigValue(mediaPath_s, defaultMediaPath) 138 SetConfigValue(mediaPathString_, Core::getMediaPathPOSIXString()) 127 139 .description("Relative path to the game data.").callback(this, &Core::mediaPathChanged); 128 129 140 } 130 141 … … 162 173 void Core::mediaPathChanged() 163 174 { 164 if (mediaPath_s != "" && mediaPath_s[mediaPath_s.size() - 1] != '/') 165 { 166 ModifyConfigValue(mediaPath_s, set, mediaPath_s + "/"); 167 } 168 169 if (mediaPath_s == "") 170 { 171 ModifyConfigValue(mediaPath_s, set, "/"); 172 COUT(2) << "Warning: Data path set to \"/\", is that really correct?" << std::endl; 173 } 175 mediaPath_g = boost::filesystem::path(this->mediaPathString_); 174 176 } 175 177 … … 248 250 void Core::_tsetMediaPath(const std::string& path) 249 251 { 250 if (*path.end() != '/' && *path.end() != '\\') 251 { 252 ModifyConfigValue(mediaPath_s, tset, path + "/"); 253 } 254 else 255 { 256 ModifyConfigValue(mediaPath_s, tset, path); 257 } 252 ModifyConfigValue(mediaPathString_, tset, path); 253 } 254 255 /*static*/ const boost::filesystem::path& Core::getMediaPath() 256 { 257 return mediaPath_g; 258 } 259 /*static*/ std::string Core::getMediaPathString() 260 { 261 return mediaPath_g.directory_string() + CP_SLASH; 262 } 263 /*static*/ std::string Core::getMediaPathPOSIXString() 264 { 265 return mediaPath_g.string() + '/'; 266 267 } 268 269 /*static*/ const boost::filesystem::path& Core::getConfigPath() 270 { 271 return configPath_g; 272 } 273 /*static*/ std::string Core::getConfigPathString() 274 { 275 return configPath_g.directory_string() + CP_SLASH; 276 } 277 /*static*/ std::string Core::getConfigPathPOSIXString() 278 { 279 return configPath_g.string() + '/'; 280 } 281 282 /*static*/ const boost::filesystem::path& Core::getLogPath() 283 { 284 return logPath_g; 285 } 286 /*static*/ std::string Core::getLogPathString() 287 { 288 return logPath_g.directory_string() + CP_SLASH; 289 } 290 /*static*/ std::string Core::getLogPathPOSIXString() 291 { 292 return logPath_g.string() + '/'; 258 293 } 259 294 … … 271 306 /** 272 307 @brief 273 Checks for "orxonox_dev_build.keep_me" in the working diretory. 308 Performs the rather lower level operations just after 309 int main() has been called. 310 @remarks 311 This gets called AFTER pre-main stuff like AddFactory, 312 SetConsoleCommand, etc. 313 */ 314 /*static*/ void Core::postMainInitialisation() 315 { 316 // set location of the executable 317 Core::setExecutablePath(); 318 319 // Determine whether we have an installed or a binary dir run 320 // The latter occurs when simply running from the build directory 321 Core::checkDevBuild(); 322 323 // Make sure the directories we write in exist or else make them 324 Core::createDirectories(); 325 } 326 327 /** 328 @brief 329 Compares the executable path with the working directory 330 */ 331 /*static*/ void Core::setExecutablePath() 332 { 333 #ifdef ORXONOX_PLATFORM_WINDOWS 334 // get executable module 335 TCHAR buffer[1024]; 336 if (GetModuleFileName(NULL, buffer, 1024) == 0) 337 ThrowException(General, "Could not retrieve executable path."); 338 339 #elif defined(ORXONOX_PLATFORM_APPLE) 340 char buffer[1024]; 341 unsigned long path_len = 1023; 342 if (_NSGetExecutablePath(buffer, &path_len)) 343 ThrowException(General, "Could not retrieve executable path."); 344 345 #else /* Linux */ 346 /* written by Nicolai Haehnle <prefect_@gmx.net> */ 347 348 /* Get our PID and build the name of the link in /proc */ 349 char linkname[64]; /* /proc/<pid>/exe */ 350 if (snprintf(linkname, sizeof(linkname), "/proc/%i/exe", getpid()) < 0) 351 { 352 /* This should only happen on large word systems. I'm not sure 353 what the proper response is here. 354 Since it really is an assert-like condition, aborting the 355 program seems to be in order. */ 356 assert(false); 357 } 358 359 /* Now read the symbolic link */ 360 char buffer[1024]; 361 int ret; 362 ret = readlink(linkname, buffer, 1024); 363 /* In case of an error, leave the handling up to the caller */ 364 if (ret == -1) 365 ThrowException(General, "Could not retrieve executable path."); 366 367 /* Ensure proper NUL termination */ 368 buf[ret] = 0; 369 #endif 370 371 executablePath_g = boost::filesystem::path(buffer); 372 #ifndef ORXONOX_PLATFORM_APPLE 373 executablePath_g = executablePath_g.branch_path(); // remove executable name 374 #endif 375 } 376 377 /** 378 @brief 379 Checks for "orxonox_dev_build.keep_me" in the executable diretory. 274 380 If found it means that this is not an installed run, hence we 275 381 don't write the logs and config files to ~/.orxonox … … 277 383 /*static*/ void Core::checkDevBuild() 278 384 { 279 std::ifstream probe; 280 probe.open("orxonox_dev_build.keep_me"); 281 if (probe) 282 { 385 if (boost::filesystem::exists(executablePath_g / "orxonox_dev_build.keep_me")) 386 { 387 COUT(1) << "Running from the build tree." << std::endl; 283 388 Core::isDevBuild_s = true; 284 // Constants are taken from OrxonoxConfig.h 285 Core::configPath_s = ORXONOX_CONFIG_DEV_PATH; 286 Core::logPath_s = ORXONOX_LOG_DEV_PATH; 287 Core::mediaPath_s = ORXONOX_MEDIA_DEV_PATH; 288 probe.close(); 389 mediaPath_g = ORXONOX_MEDIA_DEV_PATH; 390 configPath_g = ORXONOX_CONFIG_DEV_PATH; 391 logPath_g = ORXONOX_LOG_DEV_PATH; 392 } 393 else 394 { 395 #ifdef INSTALL_COPYABLE // --> relative paths 396 // Also set the root path 397 boost::filesystem::path relativeExecutablePath(ORXONOX_RUNTIME_INSTALL_PATH); 398 rootPath_g = executablePath_g; 399 while (!boost::filesystem::equivalent(rootPath_g / relativeExecutablePath, executablePath_g) || rootPath_g.empty()) 400 rootPath_g = rootPath_g.branch_path(); 401 if (rootPath_g.empty()) 402 ThrowException(General, "Could not derive a root directory. Might the binary installation directory contain '..' when taken relative to the installation prefix path?"); 403 404 // Using paths relative to the install prefix, complete them 405 mediaPath_g = rootPath_g / ORXONOX_MEDIA_INSTALL_PATH; 406 configPath_g = rootPath_g / ORXONOX_CONFIG_INSTALL_PATH; 407 logPath_g = rootPath_g / ORXONOX_LOG_INSTALL_PATH; 408 #else 409 // There is no root path, so don't set it at all 410 411 mediaPath_g = ORXONOX_MEDIA_INSTALL_PATH; 412 413 // Get user directory 414 # ifdef ORXONOX_PLATFORM_UNIX /* Apple? */ 415 char* userDataPathPtr(getenv("HOME")); 416 # else 417 char* userDataPathPtr(getenv("APPDATA")); 418 # endif 419 if (userDataPathPtr == NULL) 420 ThrowException(General, "Could not retrieve user data path."); 421 boost::filesystem::path userDataPath(userDataPathPtr); 422 userDataPath /= ".orxonox"; 423 424 configPath_g = userDataPath / ORXONOX_CONFIG_INSTALL_PATH; 425 logPath_g = userDataPath / ORXONOX_LOG_INSTALL_PATH; 426 #endif 289 427 } 290 428 } … … 299 437 std::vector<std::pair<boost::filesystem::path, std::string> > directories; 300 438 directories.push_back(std::pair<boost::filesystem::path, std::string> 301 (boost::filesystem::path( Core::configPath_s), "config"));439 (boost::filesystem::path(configPath_g), "config")); 302 440 directories.push_back(std::pair<boost::filesystem::path, std::string> 303 (boost::filesystem::path( Core::logPath_s), "log"));441 (boost::filesystem::path(logPath_g), "log")); 304 442 305 443 for (std::vector<std::pair<boost::filesystem::path, std::string> >::iterator it = directories.begin(); -
code/branches/buildsystem3/src/core/Core.h
r2690 r2702 44 44 #include "util/OutputHandler.h" 45 45 46 // Only allow main to access setDevBuild, so we need a forward declaration46 // Only allow main to access postMainInitialisation, so we need a forward declaration 47 47 int main(int, char**); 48 // boost::filesystem header has quite a large tail, use forward declaration 49 namespace boost { namespace filesystem 50 { 51 struct path_traits; 52 template<class String, class Traits> class basic_path; 53 typedef basic_path< std::string, path_traits> path; 54 } } 48 55 49 56 namespace orxonox … … 70 77 static void tsetMediaPath(const std::string& path) 71 78 { assert(singletonRef_s); singletonRef_s->_tsetMediaPath(path); } 72 static const std::string& getMediaPath() { return mediaPath_s; } 73 static const std::string& getConfigPath() { return configPath_s; } 74 static const std::string& getLogPath() { return logPath_s; } 79 static const boost::filesystem::path& getMediaPath(); 80 static const boost::filesystem::path& getConfigPath(); 81 static const boost::filesystem::path& getLogPath(); 82 static std::string getMediaPathString(); 83 static std::string getConfigPathString(); 84 static std::string getLogPathString(); 85 static std::string getMediaPathPOSIXString(); 86 static std::string getConfigPathPOSIXString(); 87 static std::string getLogPathPOSIXString(); 75 88 76 89 // fast access global variables. … … 95 108 void _tsetMediaPath(const std::string& path); 96 109 110 static void postMainInitialisation(); 111 static void checkDevBuild(); 112 static void setExecutablePath(); 97 113 static void createDirectories(); 98 static void checkDevBuild();99 114 100 115 int softDebugLevel_; //!< The debug level … … 104 119 std::string language_; //!< The language 105 120 bool bInitializeRandomNumberGenerator_; //!< If true, srand(time(0)) is called 121 std::string mediaPathString_; //!< Path to the data/media file folder as string 106 122 107 123 static bool bShowsGraphics_s; //!< global variable that tells whether to show graphics … … 112 128 113 129 static bool isDevBuild_s; //!< True for builds in the build directory (not installed) 114 static std::string configPath_s; //!< Path to the config file folder115 static std::string logPath_s; //!< Path to the log file folder116 static std::string mediaPath_s; //!< Path to the data/media file folder117 130 118 131 static Core* singletonRef_s; -
code/branches/buildsystem3/src/core/Language.cc
r2687 r2702 206 206 COUT(4) << "Read default language file." << std::endl; 207 207 208 boost::filesystem::path folder(Core::getConfigPath()); 209 boost::filesystem::path filepath(folder/getFilename(this->defaultLanguage_)); 208 boost::filesystem::path filepath(Core::getConfigPath() / getFilename(this->defaultLanguage_)); 210 209 211 210 // This creates the file if it's not existing … … 258 257 COUT(4) << "Read translated language file (" << Core::getLanguage() << ")." << std::endl; 259 258 260 boost::filesystem::path folder(Core::getConfigPath()); 261 boost::filesystem::path filepath(folder/getFilename(Core::getLanguage())); 259 boost::filesystem::path filepath(Core::getConfigPath() / getFilename(Core::getLanguage())); 262 260 263 261 // Open the file … … 315 313 COUT(4) << "Language: Write default language file." << std::endl; 316 314 317 boost::filesystem::path folder(Core::getConfigPath()); 318 boost::filesystem::path filepath(folder/getFilename(this->defaultLanguage_)); 315 boost::filesystem::path filepath(Core::getConfigPath() / getFilename(this->defaultLanguage_)); 319 316 320 317 // Open the file -
code/branches/buildsystem3/src/core/LuaBind.cc
r2687 r2702 53 53 LuaBind::singletonRef_s = this; 54 54 55 this->includePath_ = Core::getMediaPath ();55 this->includePath_ = Core::getMediaPathPOSIXString(); 56 56 57 57 luaState_ = lua_open(); -
code/branches/buildsystem3/src/core/TclBind.cc
r1792 r2702 62 62 void TclBind::setDataPath(const std::string& datapath) 63 63 { 64 this->tclLibPath_ = datapath + "/tcl" + TCL_VERSION + "/"; 64 // String has POSIX slashes 65 this->tclLibPath_ = datapath + "tcl" + TCL_VERSION + '/'; 65 66 this->bSetTclLibPath_ = true; 66 67 -
code/branches/buildsystem3/src/orxonox/Main.cc
r2690 r2702 92 92 using namespace orxonox; 93 93 94 // First, determine whether we have an installed or a binary dir run 95 // The latter occurs when simply running from the build directory 96 Core::checkDevBuild(); 97 98 // Make sure the directories we write in exist or else make them 99 Core::createDirectories(); 94 Core::postMainInitialisation(); 100 95 101 96 // create a signal handler (only active for linux) 102 97 SignalHandler signalHandler; 103 signalHandler.doCatch(argv[0], Core::getLogPath () + "orxonox_crash.log");98 signalHandler.doCatch(argv[0], Core::getLogPathString() + "orxonox_crash.log"); 104 99 105 100 // Parse command line arguments -
code/branches/buildsystem3/src/orxonox/gamestates/GSGraphics.cc
r2699 r2702 45 45 #include <OgreWindowEventUtilities.h> 46 46 47 #include "SpecialConfig.h" 47 48 #include "util/Debug.h" 48 49 #include "util/Exception.h" … … 135 136 // load debug overlay 136 137 COUT(3) << "Loading Debug Overlay..." << std::endl; 137 this->debugOverlay_ = new XMLFile( Core::getMediaPath() + "overlay/debug.oxo");138 this->debugOverlay_ = new XMLFile((Core::getMediaPath() / "overlay" / "debug.oxo").file_string()); 138 139 Loader::open(debugOverlay_); 139 140 … … 293 294 } 294 295 295 boost::filesystem::path ogreConfigFilepath(Core::getConfigPath()); 296 ogreConfigFilepath /= this->ogreConfigFile_; 297 boost::filesystem::path ogreLogFilepath(Core::getLogPath()); 298 ogreLogFilepath /= this->ogreLogFile_; 296 boost::filesystem::path ogreConfigFilepath(Core::getConfigPath() / this->ogreConfigFile_); 297 boost::filesystem::path ogreLogFilepath(Core::getLogPath() / this->ogreLogFile_); 299 298 300 299 // create a new logManager … … 357 356 try 358 357 { 359 cf.load( Core::getMediaPath() + resourceFile_);358 cf.load((Core::getMediaPath() / resourceFile_).file_string()); 360 359 } 361 360 catch (...) … … 383 382 384 383 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( 385 std::string(Core::getMediaPath() + archName), typeName, secName);384 (Core::getMediaPath() / archName).directory_string(), typeName, secName); 386 385 } 387 386 } -
code/branches/buildsystem3/src/orxonox/gamestates/GSLevel.cc
r2690 r2702 202 202 std::string levelName; 203 203 CommandLine::getValue("level", &levelName); 204 startFile_ = new XMLFile(Core::getMediaPath () + std::string("levels/")+ levelName);204 startFile_ = new XMLFile(Core::getMediaPathString() + "levels" + CP_SLASH + levelName); 205 205 Loader::open(startFile_); 206 206 } -
code/branches/buildsystem3/src/orxonox/gamestates/GSRoot.cc
r2693 r2702 111 111 112 112 // initialise TCL 113 this->tclBind_ = new TclBind(Core::getMediaPath ());113 this->tclBind_ = new TclBind(Core::getMediaPathPOSIXString()); 114 114 this->tclThreadManager_ = new TclThreadManager(tclBind_->getTclInterpreter()); 115 115 -
code/branches/buildsystem3/src/orxonox/gui/GUIManager.cc
r2687 r2702 42 42 #include <CEGUIDefaultLogger.h> 43 43 #include <ogreceguirenderer/OgreCEGUIRenderer.h> 44 #include "SpecialConfig.h" // Configures the macro below 44 45 #ifdef CEGUILUA_USE_INTERNAL_LIBRARY 45 46 # include <ceguilua/CEGUILua.h> … … 151 152 152 153 // Create our own logger to specify the filepath 153 boost::filesystem::path ceguiLogFilepath(Core::getLogPath() +"cegui.log");154 boost::filesystem::path ceguiLogFilepath(Core::getLogPath() / "cegui.log"); 154 155 this->ceguiLogger_ = new DefaultLogger(); 155 156 this->ceguiLogger_->setLogFilename(ceguiLogFilepath.file_string()); -
code/branches/buildsystem3/src/orxonox/objects/Level.cc
r2685 r2702 55 55 this->xmlfilename_ = this->getFilename(); 56 56 57 if (this->xmlfilename_.length() >= Core::getMediaPath ().length())58 this->xmlfilename_ = this->xmlfilename_.substr(Core::getMediaPath ().length());57 if (this->xmlfilename_.length() >= Core::getMediaPathString().length()) 58 this->xmlfilename_ = this->xmlfilename_.substr(Core::getMediaPathString().length()); 59 59 } 60 60 … … 97 97 mask.include(Class(OverlayGroup)); // HACK to include the ChatOverlay 98 98 99 this->xmlfile_ = new XMLFile(Core::getMediaPath () + this->xmlfilename_, mask);99 this->xmlfile_ = new XMLFile(Core::getMediaPathString() + this->xmlfilename_, mask); 100 100 101 101 Loader::open(this->xmlfile_); -
code/branches/buildsystem3/src/util/CMakeLists.txt
r2664 r2702 57 57 ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h 58 58 ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in 59 ${CMAKE_BINARY_DIR}/src/SpecialConfig.h 60 ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in 59 61 ) 60 62 SOURCE_GROUP("" FILES 61 63 ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h 62 64 ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in 65 ${CMAKE_BINARY_DIR}/src/SpecialConfig.h 66 ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in 63 67 ) 64 68
Note: See TracChangeset
for help on using the changeset viewer.