Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Feb 20, 2009, 5:32:04 PM (16 years ago)
Author:
rgrieder
Message:

Fixed install target:

  • log and config file go a to separate folder each
  • The SignalHandler crash log is now "orxonox_crash.log" to avoid opening the file twice which might result in problems
  • moved tcl scripts to media/tcl8.#/ as a temporary solution. I've also created a ticket to fix this.
  • UPDATE YOUR MEDIA REPOSITORY
  • orxonox.log pre-main gets written to either %TEMP% (windows) or /tmp (Unix) and when the path was set, the content is copied.
  • removed Settings class and moved media path to Core
  • media, log and config path are now all in Core where only the media path can be configured via ini file or command line
  • Core::isDevBuild() tells whether we are running in the build or the installation directory (determined by the presence of "orxonox_dev_build.kepp_me" in the binary dir)
  • renamed Settings::getDataPath to Core::getMediaPath
Location:
code/branches/buildsystem3/src/core
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • code/branches/buildsystem3/src/core/CMakeLists.txt

    r2664 r2685  
    7070IF(GCC_NO_SYSTEM_HEADER_SUPPORT)
    7171  # Get around displaying a few hundred lines of warning code
    72   SET_SOURCE_FILES_PROPERTIES(ArgumentCompletionFunctions.cc PROPERTIES COMPILE_FLAGS "-w")
     72  SET_SOURCE_FILES_PROPERTIES(
     73    ArgumentCompletionFunctions.cc
     74    CommandLine.cc
     75    ConfigFileManager.cc
     76    Language.cc
     77    LuaBind.cc
     78    input/KeyBinder.cc
     79    PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")
    7380ENDIF()
    7481
  • code/branches/buildsystem3/src/core/CommandLine.cc

    r2662 r2685  
    2929#include "CommandLine.h"
    3030
     31#include <boost/filesystem.hpp>
    3132#include "util/String.h"
    3233#include "util/SubString.h"
     34#include "Core.h"
    3335
    3436namespace orxonox
     
    299301        this->_parse(args);
    300302
     303        std::string filename = CommandLine::getValue("optionsFile").getString();
     304        boost::filesystem::path folder(Core::getConfigPath());
     305        boost::filesystem::path filepath(folder/filename);
     306
    301307        // look for additional arguments in given file or start.ini as default
    302308        // They will not overwrite the arguments given directly
    303309        std::ifstream file;
    304         std::string filename = CommandLine::getValue("optionsFile").getString();
    305         file.open(filename.c_str());
     310        file.open(filepath.native_file_string().c_str());
    306311        args.clear();
    307312        if (file)
  • code/branches/buildsystem3/src/core/ConfigFileManager.cc

    r2662 r2685  
    3030
    3131#include <cassert>
     32#include <boost/filesystem.hpp>
     33
    3234#include "util/Convert.h"
    3335#include "util/String.h"
    3436#include "ConsoleCommand.h"
    3537#include "ConfigValueContainer.h"
     38#include "Core.h"
    3639
    3740namespace orxonox
     
    223226        this->clear();
    224227
     228        boost::filesystem::path filepath(Core::getConfigPath() + "/" + this->filename_);
     229
    225230        // This creates the config file if it's not existing
    226231        std::ofstream createFile;
    227         createFile.open(this->filename_.c_str(), std::fstream::app);
     232        createFile.open(filepath.native_file_string().c_str(), std::fstream::app);
    228233        createFile.close();
    229234
    230235        // Open the file
    231236        std::ifstream file;
    232         file.open(this->filename_.c_str(), std::fstream::in);
     237        file.open(filepath.native_file_string().c_str(), std::fstream::in);
    233238
    234239        if (!file.is_open())
     
    337342    void ConfigFile::save() const
    338343    {
     344        boost::filesystem::path filepath(Core::getConfigPath() + "/" + this->filename_);
     345
    339346        std::ofstream file;
    340         file.open(this->filename_.c_str(), std::fstream::out);
     347        file.open(filepath.native_file_string().c_str(), std::fstream::out);
    341348        file.setf(std::ios::fixed, std::ios::floatfield);
    342349        file.precision(6);
  • code/branches/buildsystem3/src/core/Core.cc

    r2662 r2685  
    3737#include "CoreIncludes.h"
    3838#include "ConfigValueIncludes.h"
     39#include "LuaBind.h"
     40#include "CommandLine.h"
    3941
    4042namespace orxonox
     
    4648    bool Core::bIsMaster_s      = false;
    4749
     50    bool Core::isDevBuild_s     = false;
     51    std::string Core::configPath_s(ORXONOX_CONFIG_INSTALL_PATH); // from OrxonoxConfig.h
     52    std::string Core::logPath_s   (ORXONOX_LOG_INSTALL_PATH);    // from OrxonoxConfig.h
     53
    4854    Core* Core::singletonRef_s = 0;
     55
     56    SetCommandLineArgument(mediaPath, "").information("PATH");
    4957
    5058    /**
     
    5866        assert(Core::singletonRef_s == 0);
    5967        Core::singletonRef_s = this;
     68
    6069        this->bInitializeRandomNumberGenerator_ = false;
    61 
    6270        this->setConfigValues();
     71
     72        // Set the correct log path. Before this call, /tmp (Unix) or %TEMP% was used
     73        OutputHandler::getOutStream().setLogPath(Core::logPath_s);
     74
     75        // Possible media path override by the command line
     76        if (!CommandLine::getArgument("mediaPath")->hasDefaultValue())
     77        {
     78            std::string mediaPath = CommandLine::getValue("mediaPath");
     79            Core::tsetMediaPath(mediaPath);
     80        }
    6381    }
    6482
     
    7795    void Core::setConfigValues()
    7896    {
    79         SetConfigValue(softDebugLevelConsole_, 3).description("The maximal level of debug output shown in the console").callback(this, &Core::debugLevelChanged);
    80         SetConfigValue(softDebugLevelLogfile_, 3).description("The maximal level of debug output shown in the logfile").callback(this, &Core::debugLevelChanged);
    81         SetConfigValue(softDebugLevelShell_, 1).description("The maximal level of debug output shown in the ingame shell").callback(this, &Core::debugLevelChanged);
     97#ifdef NDEBUG
     98        const unsigned int defaultLevelConsole = 1;
     99        const unsigned int defaultLevelLogfile = 3;
     100        const unsigned int defaultLevelShell   = 1;
     101#else
     102        const unsigned int defaultLevelConsole = 3;
     103        const unsigned int defaultLevelLogfile = 4;
     104        const unsigned int defaultLevelShell   = 3;
     105#endif
     106        SetConfigValue(softDebugLevelConsole_, defaultLevelConsole)
     107            .description("The maximal level of debug output shown in the console").callback(this, &Core::debugLevelChanged);
     108        SetConfigValue(softDebugLevelLogfile_, defaultLevelLogfile)
     109            .description("The maximal level of debug output shown in the logfile").callback(this, &Core::debugLevelChanged);
     110        SetConfigValue(softDebugLevelShell_, defaultLevelShell)
     111            .description("The maximal level of debug output shown in the ingame shell").callback(this, &Core::debugLevelChanged);
     112
    82113        SetConfigValue(language_, Language::getLanguage().defaultLanguage_).description("The language of the ingame text").callback(this, &Core::languageChanged);
    83114        SetConfigValue(bInitializeRandomNumberGenerator_, true).description("If true, all random actions are different each time you start the game").callback(this, &Core::initializeRandomNumberGenerator);
     115
     116        // Media path (towards config and log path) is ini-configurable
     117        const char* defaultMediaPath = ORXONOX_MEDIA_INSTALL_PATH;
     118        if (Core::isDevBuild())
     119            defaultMediaPath = ORXONOX_MEDIA_DEV_PATH;
     120
     121        SetConfigValue(mediaPath_, defaultMediaPath)
     122            .description("Relative path to the game data.").callback(this, &Core::mediaPathChanged);
     123
    84124    }
    85125
     
    109149        // Read the translation file after the language was configured
    110150        Language::getLanguage().readTranslatedLanguageFile();
     151    }
     152
     153    /**
     154    @brief
     155        Callback function if the media path has changed.
     156    */
     157    void Core::mediaPathChanged()
     158    {
     159        if (mediaPath_ != "" && mediaPath_[mediaPath_.size() - 1] != '/')
     160        {
     161            ModifyConfigValue(mediaPath_, set, mediaPath_ + "/");
     162        }
     163
     164        if (mediaPath_ == "")
     165        {
     166            ModifyConfigValue(mediaPath_, set, "/");
     167            COUT(2) << "Warning: Data path set to \"/\", is that really correct?" << std::endl;
     168        }
    111169    }
    112170
     
    177235    }
    178236
     237    /**
     238    @brief
     239        Temporary sets the media path
     240    @param path
     241        The new media path
     242    */
     243    void Core::_tsetMediaPath(const std::string& path)
     244    {
     245        if (*path.end() != '/' && *path.end() != '\\')
     246        {
     247            ModifyConfigValue(mediaPath_, tset, path + "/");
     248        }
     249        else
     250        {
     251            ModifyConfigValue(mediaPath_, tset, path);
     252        }
     253    }
     254
    179255    void Core::initializeRandomNumberGenerator()
    180256    {
     
    187263        }
    188264    }
     265
     266    /*static*/ void Core::setDevBuild()
     267    {
     268        // Be careful never to call this function before main()!
     269
     270        Core::isDevBuild_s = true;
     271        // Constants taken from OrxonoxConfig.h
     272        Core::configPath_s = ORXONOX_CONFIG_DEV_PATH;
     273        Core::logPath_s    = ORXONOX_LOG_DEV_PATH;
     274    }
    189275}
  • code/branches/buildsystem3/src/core/Core.h

    r2662 r2685  
    4444#include "util/OutputHandler.h"
    4545
     46// Only allow main to access setDevBuild, so we need a forward declaration
     47int main(int, char**);
     48
    4649namespace orxonox
    4750{
     
    4952    class _CoreExport Core : public OrxonoxClass
    5053    {
     54        friend int ::main(int, char**); // sets isDevBuild_s
     55
    5156        public:
    5257            Core();
    5358            ~Core();
    5459            void setConfigValues();
    55             void debugLevelChanged();
    56             void languageChanged();
    5760
    5861            static Core& getInstance() { assert(Core::singletonRef_s); return *Core::singletonRef_s; }
     
    6265            static const std::string& getLanguage();
    6366            static void  resetLanguage();
     67
     68            static bool isDevBuild() { return Core::isDevBuild_s; }
     69
     70            static const std::string& getMediaPath()
     71            { assert(singletonRef_s); return singletonRef_s->mediaPath_; }
     72            static void tsetMediaPath(const std::string& path)
     73            { assert(singletonRef_s); singletonRef_s->_tsetMediaPath(path); }
     74            static const std::string& getConfigPath() { return configPath_s; }
     75            static const std::string& getLogPath()    { return logPath_s; }
    6476
    6577            // fast access global variables.
     
    7991            void resetLanguageIntern();
    8092            void initializeRandomNumberGenerator();
     93            void debugLevelChanged();
     94            void languageChanged();
     95            void mediaPathChanged();
     96            void _tsetMediaPath(const std::string& path);
     97
     98            static void setDevBuild();
    8199
    82100            int softDebugLevel_;                            //!< The debug level
     
    85103            int softDebugLevelShell_;                       //!< The debug level for the ingame shell
    86104            std::string language_;                          //!< The language
    87             bool bInitializeRandomNumberGenerator_;          //!< If true, srand(time(0)) is called
     105            bool bInitializeRandomNumberGenerator_;         //!< If true, srand(time(0)) is called
     106            std::string mediaPath_;                         //!< Path to the data/media file folder
    88107
    89108            static bool bShowsGraphics_s;                   //!< global variable that tells whether to show graphics
     
    93112            static bool bIsMaster_s;
    94113
     114            static bool isDevBuild_s;                       //!< True for builds in the build directory (not installed)
     115            static std::string configPath_s;                //!< Path to the config file folder
     116            static std::string logPath_s;                   //!< Path to the log file folder
     117
    95118            static Core* singletonRef_s;
    96119    };
  • code/branches/buildsystem3/src/core/Language.cc

    r2662 r2685  
    3535
    3636#include <fstream>
     37#include <boost/filesystem.hpp>
    3738
    3839#include "Core.h"
     
    205206        COUT(4) << "Read default language file." << std::endl;
    206207
     208        boost::filesystem::path folder(Core::getConfigPath());
     209        boost::filesystem::path filepath(folder/getFilename(this->defaultLanguage_));
     210
    207211        // This creates the file if it's not existing
    208212        std::ofstream createFile;
    209         createFile.open(getFilename(this->defaultLanguage_).c_str(), std::fstream::app);
     213        createFile.open(filepath.native_file_string().c_str(), std::fstream::app);
    210214        createFile.close();
    211215
    212216        // Open the file
    213217        std::ifstream file;
    214         file.open(getFilename(this->defaultLanguage_).c_str(), std::fstream::in);
     218        file.open(filepath.native_file_string().c_str(), std::fstream::in);
    215219
    216220        if (!file.is_open())
     
    254258        COUT(4) << "Read translated language file (" << Core::getLanguage() << ")." << std::endl;
    255259
     260        boost::filesystem::path folder(Core::getConfigPath());
     261        boost::filesystem::path filepath(folder/getFilename(Core::getLanguage()));
     262
    256263        // Open the file
    257264        std::ifstream file;
    258         file.open(getFilename(Core::getLanguage()).c_str(), std::fstream::in);
     265        file.open(filepath.native_file_string().c_str(), std::fstream::in);
    259266
    260267        if (!file.is_open())
     
    308315        COUT(4) << "Language: Write default language file." << std::endl;
    309316
     317        boost::filesystem::path folder(Core::getConfigPath());
     318        boost::filesystem::path filepath(folder/getFilename(this->defaultLanguage_));
     319
    310320        // Open the file
    311321        std::ofstream file;
    312         file.open(getFilename(this->defaultLanguage_).c_str(), std::fstream::out);
     322        file.open(filepath.native_file_string().c_str(), std::fstream::out);
    313323
    314324        if (!file.is_open())
  • code/branches/buildsystem3/src/core/LuaBind.cc

    r2664 r2685  
    3737}
    3838#include <tolua/tolua++.h>
    39 
     39#include <boost/filesystem.hpp>
     40
     41#include "util/String.h"
     42#include "util/Debug.h"
    4043#include "ToluaBindCore.h"
    41 #include "util/String.h"
    42 #include "CoreIncludes.h"
     44#include "Core.h"
    4345
    4446namespace orxonox
     
    5052    assert(LuaBind::singletonRef_s == 0);
    5153    LuaBind::singletonRef_s = this;
     54
     55    this->includePath_ = Core::getMediaPath();
    5256
    5357    luaState_ = lua_open();
     
    8286  void LuaBind::loadFile(std::string filename, bool luaTags)
    8387  {
     88    boost::filesystem::path filepath(filename);
     89
    8490    output_ = "";
    8591    std::ifstream file;
    86     file.open(filename.c_str(), std::fstream::in);
     92    file.open(filepath.native_file_string().c_str(), std::fstream::in);
    8793
    8894    if (!file.is_open())
  • code/branches/buildsystem3/src/core/input/KeyBinder.cc

    r2662 r2685  
    3636#include <fstream>
    3737#include <string>
     38#include <boost/filesystem.hpp>
    3839
    3940#include "util/Convert.h"
     
    4243#include "core/CoreIncludes.h"
    4344#include "core/ConfigFileManager.h"
     45#include "core/Core.h"
    4446#include "InputCommands.h"
    4547#include "InputManager.h"
     
    253255            return;
    254256
     257        boost::filesystem::path folder(Core::getConfigPath());
     258        boost::filesystem::path filepath(folder/filename);
     259
    255260        // get bindings from default file if filename doesn't exist.
    256261        std::ifstream infile;
    257         infile.open(filename.c_str());
     262        infile.open(filepath.native_file_string().c_str());
    258263        if (!infile)
    259264        {
Note: See TracChangeset for help on using the changeset viewer.