X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=73bfaff137f726c0b9854d9516d552ebf8d7e958;hb=07112b55e0bb7ceb9e5c05ab4df167ecaf7edd9b;hp=465d07bddc86d93f9783334a00315e44fc1e86b8;hpb=0abcfb16ba203be43fcb2d2cd0b740da85679e7a;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 465d07bddc..73bfaff137 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Tim Mayberry + Copyright (C) 2007 Tim Mayberry This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,45 +16,122 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include +#include -#include +#include "pbd/error.h" +#include "pbd/compose.h" #include +#include -#include -#include +#include "ardour/directory_names.h" +#include "ardour/filesystem_paths.h" + +#include "i18n.h" + +using namespace PBD; namespace ARDOUR { using std::string; -sys::path +std::string user_config_directory () { - const string home_dir = Glib::get_home_dir (); + static std::string p; - if (home_dir.empty ()) - { - const string error_msg = "Unable to determine home directory"; + if (!p.empty()) return p; - // log the error - error << error_msg << endmsg; +#ifdef __APPLE__ + p = Glib::build_filename (Glib::get_home_dir(), "Library/Preferences"); +#else + const char* c = 0; - throw sys::filesystem_error(error_msg); - } + /* adopt freedesktop standards, and put .ardour3 into $XDG_CONFIG_HOME or ~/.config + */ - sys::path p(home_dir); - p /= user_config_dir_name; + if ((c = getenv ("XDG_CONFIG_HOME")) != 0) { + p = c; + } else { + const string home_dir = Glib::get_home_dir(); + + if (home_dir.empty ()) { + error << "Unable to determine home directory" << endmsg; + exit (1); + } + + p = home_dir; + p = Glib::build_filename (p, ".config"); + } +#endif + + p = Glib::build_filename (p, user_config_dir_name); + + if (!Glib::file_test (p, Glib::FILE_TEST_EXISTS)) { + if (g_mkdir_with_parents (p.c_str(), 0755)) { + error << string_compose (_("Cannot create Configuration directory %1 - cannot run"), + p) << endmsg; + exit (1); + } + } else if (!Glib::file_test (p, Glib::FILE_TEST_IS_DIR)) { + error << string_compose (_("Configuration directory %1 already exists and is not a directory/folder - cannot run"), + p) << endmsg; + exit (1); + } return p; } -sys::path -system_module_directory () +std::string +ardour_dll_directory () { - sys::path module_directory(MODULE_DIR); - module_directory /= "ardour2"; - return module_directory; + std::string s = Glib::getenv("ARDOUR_DLL_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n"); + ::exit (1); + } + return s; +} + +SearchPath +ardour_config_search_path () +{ + static SearchPath search_path; + + if (search_path.empty()) { + search_path += user_config_directory(); + + std::string s = Glib::getenv("ARDOUR_CONFIG_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_CONFIG_PATH not set in environment - exiting\n"); + ::exit (1); + } + + search_path += SearchPath (s); + } + + return search_path; +} + +SearchPath +ardour_data_search_path () +{ + static SearchPath search_path; + + if (search_path.empty()) { + search_path += user_config_directory(); + + std::string s = Glib::getenv("ARDOUR_DATA_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_DATA_PATH not set in environment - exiting\n"); + ::exit (1); + } + + search_path += SearchPath (s); + } + + return search_path; } } // namespace ARDOUR