From d8f1e1cdea913cf78b2f3fbdd8ff9bcface1950f Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 17 Jul 2010 18:03:13 +0200 Subject: [PATCH] Changed: #1023 Use a standard application path for writing files --- code/ryzom/CMakeLists.txt | 7 +++- code/ryzom/CMakeModules/nel.cmake | 43 ++++++++++--------------- code/ryzom/client/src/CMakeLists.txt | 2 +- code/ryzom/client/src/client.cpp | 12 ++++--- code/ryzom/client/src/client_cfg.cpp | 48 +++++++++++++++++++++------- code/ryzom/client/src/init.cpp | 5 ++- code/ryzom/config.h.cmake | 10 ++++++ 7 files changed, 81 insertions(+), 46 deletions(-) diff --git a/code/ryzom/CMakeLists.txt b/code/ryzom/CMakeLists.txt index 11ab235b1..db44a106a 100644 --- a/code/ryzom/CMakeLists.txt +++ b/code/ryzom/CMakeLists.txt @@ -65,7 +65,7 @@ ENDIF(COMMAND cmake_policy) # Set default config options NL_SETUP_DEFAULT_OPTIONS() -NL_SETUP_PREFIX_PATHS() +RYZOM_SETUP_PREFIX_PATHS() #----------------------------------------------------------------------------- # Override default options @@ -114,6 +114,11 @@ IF(FINAL_VERSION) ADD_DEFINITIONS(-DFINAL_VERSION=1) ENDIF(FINAL_VERSION) +# config.h configuration and use by projects +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h) +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) +ADD_DEFINITIONS(-DHAVE_CONFIG_H=1) + ADD_SUBDIRECTORY(common) IF(WITH_CLIENT) diff --git a/code/ryzom/CMakeModules/nel.cmake b/code/ryzom/CMakeModules/nel.cmake index 25ecef21e..105f09bcd 100644 --- a/code/ryzom/CMakeModules/nel.cmake +++ b/code/ryzom/CMakeModules/nel.cmake @@ -131,50 +131,41 @@ MACRO(NL_SETUP_BUILD_FLAGS) SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${NL_RELEASEDEBUG_CFLAGS} ${PLATFORM_CFLAGS} ") ENDMACRO(NL_SETUP_BUILD_FLAGS) -MACRO(NL_SETUP_PREFIX_PATHS) +MACRO(RYZOM_SETUP_PREFIX_PATHS) ## Allow override of install_prefix/etc path. - IF(NOT NL_ETC_PREFIX) + IF(NOT RYZOM_ETC_PREFIX) IF(WIN32) - SET(NL_ETC_PREFIX "../etc" CACHE PATH "Installation path for configurations") + SET(RYZOM_ETC_PREFIX "." CACHE PATH "Installation path for configurations") ELSE(WIN32) - SET(NL_ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc" CACHE PATH "Installation path for configurations") + SET(RYZOM_ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc/ryzom" CACHE PATH "Installation path for configurations") ENDIF(WIN32) - ENDIF(NOT NL_ETC_PREFIX) + ENDIF(NOT RYZOM_ETC_PREFIX) ## Allow override of install_prefix/share path. - IF(NOT NL_SHARE_PREFIX) + IF(NOT RYZOM_SHARE_PREFIX) IF(WIN32) - SET(NL_SHARE_PREFIX "../share" CACHE PATH "Installation path for data.") + SET(RYZOM_SHARE_PREFIX "." CACHE PATH "Installation path for data.") ELSE(WIN32) - SET(NL_SHARE_PREFIX "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Installation path for data.") + SET(RYZOM_SHARE_PREFIX "${CMAKE_INSTALL_PREFIX}/share/ryzom" CACHE PATH "Installation path for data.") ENDIF(WIN32) ENDIF(NOT NL_SHARE_PREFIX) ## Allow override of install_prefix/sbin path. - IF(NOT NL_SBIN_PREFIX) + IF(NOT RYZOM_SBIN_PREFIX) IF(WIN32) - SET(NL_SBIN_PREFIX "../sbin" CACHE PATH "Installation path for admin tools and services.") + SET(RYZOM_SBIN_PREFIX "." CACHE PATH "Installation path for admin tools and services.") ELSE(WIN32) - SET(NL_SBIN_PREFIX "${CMAKE_INSTALL_PREFIX}/sbin" CACHE PATH "Installation path for admin tools and services.") + SET(RYZOM_SBIN_PREFIX "${CMAKE_INSTALL_PREFIX}/sbin" CACHE PATH "Installation path for admin tools and services.") ENDIF(WIN32) - ENDIF(NOT NL_SBIN_PREFIX) + ENDIF(NOT RYZOM_SBIN_PREFIX) ## Allow override of install_prefix/bin path. - IF(NOT NL_BIN_PREFIX) + IF(NOT RYZOM_BIN_PREFIX) IF(WIN32) - SET(NL_BIN_PREFIX "../bin" CACHE PATH "Installation path for tools and applications.") + SET(RYZOM_BIN_PREFIX "." CACHE PATH "Installation path for tools and applications.") ELSE(WIN32) - SET(NL_BIN_PREFIX "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation path for tools and applications.") + SET(RYZOM_BIN_PREFIX "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation path for client and tools.") ENDIF(WIN32) - ENDIF(NOT NL_BIN_PREFIX) + ENDIF(NOT RYZOM_BIN_PREFIX) - ## Allow override of install_prefix/bin path. - IF(NOT NL_LOG_PREFIX) - IF(WIN32) - SET(NL_LOG_PREFIX "../var/log" CACHE PATH "Installation path for tools and applications.") - ELSE(WIN32) - SET(NL_LOG_PREFIX "${CMAKE_INSTALL_PREFIX}/var/log" CACHE PATH "Installation path for tools and applications.") - ENDIF(WIN32) - ENDIF(NOT NL_LOG_PREFIX) - -ENDMACRO(NL_SETUP_PREFIX_PATHS) +ENDMACRO(RYZOM_SETUP_PREFIX_PATHS) diff --git a/code/ryzom/client/src/CMakeLists.txt b/code/ryzom/client/src/CMakeLists.txt index 273b09022..1d9c8a7bd 100644 --- a/code/ryzom/client/src/CMakeLists.txt +++ b/code/ryzom/client/src/CMakeLists.txt @@ -99,4 +99,4 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(ryzom_client ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS ryzom_client RUNTIME DESTINATION bin COMPONENT client BUNDLE DESTINATION /Applications) +INSTALL(TARGETS ryzom_client RUNTIME DESTINATION ${RYZOM_BIN_PREFIX} COMPONENT client BUNDLE DESTINATION /Applications) diff --git a/code/ryzom/client/src/client.cpp b/code/ryzom/client/src/client.cpp index cf0c621b3..a7a4de917 100644 --- a/code/ryzom/client/src/client.cpp +++ b/code/ryzom/client/src/client.cpp @@ -345,13 +345,15 @@ int main(int argc, char **argv) // init the Nel context CApplicationContext *appContext = new CApplicationContext; -#ifdef CHANGE_CURRENT_PATH - std::string currentPath = CFile::getApplicationDirectory("Ryzom"); + // if client_default.cfg is not in current directory, use application default directory + if (!CFile::isExists("client_default.cfg")) + { + std::string currentPath = CFile::getApplicationDirectory("Ryzom"); - if (!CFile::isExists(currentPath)) CFile::createDirectory(currentPath); + if (!CFile::isExists(currentPath)) CFile::createDirectory(currentPath); - CPath::setCurrentPath(currentPath); -#endif // CHANGE_CURRENT_PATH + CPath::setCurrentPath(currentPath); + } // temporary buffer to store Ryzom full path char filename[1024]; diff --git a/code/ryzom/client/src/client_cfg.cpp b/code/ryzom/client/src/client_cfg.cpp index 2bfec308e..5fff82a73 100644 --- a/code/ryzom/client/src/client_cfg.cpp +++ b/code/ryzom/client/src/client_cfg.cpp @@ -39,6 +39,10 @@ #include "game_share/time_weather_season/time_and_season.h" #include "game_share/ryzom_version.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif // HAVE_CONFIG_H + /////////// // MACRO // /////////// @@ -1967,21 +1971,41 @@ void CClientConfig::init(const string &configFileName) { if(!CFile::fileExists(configFileName)) { -#if defined(NL_ETC_PREFIX) && defined(NL_SHARE_PREFIX) - nlwarning("CFG::init: creating '%s' with default values", configFileName.c_str ()); + std::string defaultConfigFileName = "client_default.cfg"; + bool found = false; + + if (CFile::isExists(defaultConfigFileName)) found = true; - // create the basic .cfg that link the default one - FILE *fp = fopen(configFileName.c_str(), "w"); - if (fp == NULL) +#ifdef RYZOM_ETC_PREFIX + if (!found) + { + defaultConfigFileName = std::string(RYZOM_ETC_PREFIX"/") + defaultConfigFileName; + if (CFile::isExists(defaultConfigFileName)) found = true; + } +#endif // RYZOM_ETC_PREFIX + + if (found) { - nlerror ("CFG::init: Can't create config file '%s'", configFileName.c_str()); + // create the basic .cfg that link the default one + FILE *fp = fopen(configFileName.c_str(), "w"); + if (fp == NULL) + { + nlerror ("CFG::init: Can't create config file '%s'", configFileName.c_str()); + } + else + { + nlwarning("CFG::init: creating '%s' with default values", configFileName.c_str ()); + } + fprintf(fp, "RootConfigFilename = \"%s\";\n", defaultConfigFileName.c_str()); +#ifdef RYZOM_SHARE_PREFIX + fprintf(fp, "PreDataPath = { \"%s/data\" };\n", RYZOM_SHARE_PREFIX); +#endif // RYZOM_SHARE_PREFIX + fclose(fp); + } + else + { + nlwarning("CFG::init: '%s' Not Found !!!", cfgFile.c_str()); } - fprintf(fp, "RootConfigFilename = \"%s/client_default.cfg\";\n", NL_ETC_PREFIX); - fprintf(fp, "DataPath = { \"%s/data\" };\n", NL_SHARE_PREFIX); - fclose(fp); -#else - nlwarning("CFG::init: '%s' Not Found !!!", configFileName.c_str ()); -#endif } // if the config file will be modified, it calls automatically the function setValuesOnFileChange() diff --git a/code/ryzom/client/src/init.cpp b/code/ryzom/client/src/init.cpp index ca2dcd9fe..157cc9f86 100644 --- a/code/ryzom/client/src/init.cpp +++ b/code/ryzom/client/src/init.cpp @@ -727,12 +727,15 @@ void prelogInit() setReportEmailFunction ((void*)sendEmail); setDefaultEmailParams ("smtp.nevrax.com", "", "ryzombug@nevrax.com"); - // create the save dir. + // create the data dir. if (!CFile::isExists("data")) CFile::createDirectory("data"); // create the save dir. if (!CFile::isExists("save")) CFile::createDirectory("save"); + // create the user dir. + if (!CFile::isExists("user")) CFile::createDirectory("user"); + #if !FINAL_VERSION // if we're not in final version then start the file access logger to keep track of the files that we read as we play //ICommand::execute("iFileAccessLogStart",*NLMISC::InfoLog); diff --git a/code/ryzom/config.h.cmake b/code/ryzom/config.h.cmake index ac0caa3e0..68b81f02b 100644 --- a/code/ryzom/config.h.cmake +++ b/code/ryzom/config.h.cmake @@ -1,3 +1,6 @@ +#ifndef CONFIG_H +#define CONFIG_H + #cmakedefine HAVE_DL_H 1 #cmakedefine HAVE_EXECINFO_H 1 #cmakedefine HAVE_ICONV 1 @@ -30,3 +33,10 @@ #cmakedefine HAVE_STRTOULL 1 #cmakedefine HAVE_STATVFS 1 #cmakedefine HAVE_STAT64 1 + +#cmakedefine RYZOM_PREFIX "${RYZOM_PREFIX}" +#cmakedefine RYZOM_BIN_PREFIX "${RYZOM_BIN_PREFIX}" +#cmakedefine RYZOM_ETC_PREFIX "${RYZOM_ETC_PREFIX}" +#cmakedefine RYZOM_SHARE_PREFIX "${RYZOM_SHARE_PREFIX}" + +#endif // CONFIG_H