X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=11ddc885025d79010c36003eb4aa2883b9580d23;hb=204baa31d842d4c2f833d319b6fa55e402a1bfb8;hp=a13b7fc45f32fc81206a8f28723109001e442476;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index a13b7fc45f..11ddc88502 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,17 +16,24 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include "pbd/error.h" +#include "pbd/compose.h" #include "pbd/filesystem_paths.h" #include +#include #include "ardour/directory_names.h" #include "ardour/filesystem_paths.h" +#include "i18n.h" + #define WITH_STATIC_PATHS 1 +using namespace PBD; + namespace ARDOUR { using std::string; @@ -34,21 +41,53 @@ using std::string; sys::path user_config_directory () { - const string home_dir = Glib::get_home_dir (); + sys::path p; + +#ifdef __APPLE__ + p = Glib::get_home_dir(); + p /= "Library/Preferences"; + +#else + const char* c = 0; - if (home_dir.empty ()) - { - const string error_msg = "Unable to determine home directory"; + /* adopt freedesktop standards, and put .ardour3 into $XDG_CONFIG_HOME or ~/.config + */ - // log the error - error << error_msg << endmsg; + if ((c = getenv ("XDG_CONFIG_HOME")) != 0) { + p = c; + } else { + const string home_dir = Glib::get_home_dir(); - throw sys::filesystem_error(error_msg); + if (home_dir.empty ()) { + const string error_msg = "Unable to determine home directory"; + + // log the error + error << error_msg << endmsg; + + throw sys::filesystem_error(error_msg); + } + + p = home_dir; + p /= ".config"; } +#endif - sys::path p(home_dir); p /= user_config_dir_name; + std::string ps (p.to_string()); + + if (!Glib::file_test (ps, Glib::FILE_TEST_EXISTS)) { + if (g_mkdir_with_parents (ps.c_str(), 0755)) { + error << string_compose (_("Cannot create Configuration directory %1 - cannot run"), + ps) << endmsg; + exit (1); + } + } else if (!Glib::file_test (ps, Glib::FILE_TEST_IS_DIR)) { + error << string_compose (_("Configuration directory %1 already exists and is not a directory/folder - cannot run"), + ps) << endmsg; + exit (1); + } + return p; } @@ -71,13 +110,9 @@ SearchPath system_config_search_path () { #ifdef WITH_STATIC_PATHS - SearchPath config_path(string(CONFIG_DIR)); - #else - SearchPath config_path(system_config_directories()); - #endif config_path.add_subdirectory_to_paths("ardour3"); @@ -89,13 +124,9 @@ SearchPath system_data_search_path () { #ifdef WITH_STATIC_PATHS - SearchPath data_path(string(DATA_DIR)); - #else - SearchPath data_path(system_data_directories()); - #endif data_path.add_subdirectory_to_paths("ardour3");