~ubuntu-branches/ubuntu/utopic/ardour3/utopic

« back to all changes in this revision

Viewing changes to libs/ardour/filesystem_paths.cc

  • Committer: Package Import Robot
  • Author(s): Felipe Sateler
  • Date: 2013-09-21 19:05:02 UTC
  • Revision ID: package-import@ubuntu.com-20130921190502-8gsftrku6jnzhd7v
Tags: upstream-3.4~dfsg
ImportĀ upstreamĀ versionĀ 3.4~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    Copyright (C) 2007 Tim Mayberry
 
3
 
 
4
    This program is free software; you can redistribute it and/or modify
 
5
    it under the terms of the GNU General Public License as published by
 
6
    the Free Software Foundation; either version 2 of the License, or
 
7
    (at your option) any later version.
 
8
 
 
9
    This program is distributed in the hope that it will be useful,
 
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
    GNU General Public License for more details.
 
13
 
 
14
    You should have received a copy of the GNU General Public License
 
15
    along with this program; if not, write to the Free Software
 
16
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
17
 
 
18
*/
 
19
#include <cstdlib>
 
20
#include <iostream>
 
21
 
 
22
#include "pbd/error.h"
 
23
#include "pbd/compose.h"
 
24
 
 
25
#include <glibmm/miscutils.h>
 
26
#include <glibmm/fileutils.h>
 
27
 
 
28
#include "ardour/directory_names.h"
 
29
#include "ardour/filesystem_paths.h"
 
30
 
 
31
#include "i18n.h"
 
32
 
 
33
using namespace PBD;
 
34
 
 
35
namespace ARDOUR {
 
36
 
 
37
using std::string;
 
38
 
 
39
std::string
 
40
user_config_directory ()
 
41
{
 
42
        static std::string p;
 
43
 
 
44
        if (!p.empty()) return p;
 
45
 
 
46
#ifdef __APPLE__
 
47
        p = Glib::build_filename (Glib::get_home_dir(), "Library/Preferences");
 
48
#else
 
49
        const char* c = 0;
 
50
 
 
51
        /* adopt freedesktop standards, and put .ardour3 into $XDG_CONFIG_HOME or ~/.config
 
52
         */
 
53
 
 
54
        if ((c = getenv ("XDG_CONFIG_HOME")) != 0) {
 
55
                p = c;
 
56
        } else {
 
57
                const string home_dir = Glib::get_home_dir();
 
58
 
 
59
                if (home_dir.empty ()) {
 
60
                        error << "Unable to determine home directory" << endmsg;
 
61
                        exit (1);
 
62
                }
 
63
 
 
64
                p = home_dir;
 
65
                p = Glib::build_filename (p, ".config");
 
66
        }
 
67
#endif
 
68
 
 
69
        p = Glib::build_filename (p, user_config_dir_name);
 
70
 
 
71
        if (!Glib::file_test (p, Glib::FILE_TEST_EXISTS)) {
 
72
                if (g_mkdir_with_parents (p.c_str(), 0755)) {
 
73
                        error << string_compose (_("Cannot create Configuration directory %1 - cannot run"),
 
74
                                                   p) << endmsg;
 
75
                        exit (1);
 
76
                }
 
77
        } else if (!Glib::file_test (p, Glib::FILE_TEST_IS_DIR)) {
 
78
                error << string_compose (_("Configuration directory %1 already exists and is not a directory/folder - cannot run"),
 
79
                                           p) << endmsg;
 
80
                exit (1);
 
81
        }
 
82
 
 
83
        return p;
 
84
}
 
85
 
 
86
std::string
 
87
ardour_dll_directory ()
 
88
{
 
89
        std::string s = Glib::getenv("ARDOUR_DLL_PATH");
 
90
        if (s.empty()) {
 
91
                std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n");
 
92
                ::exit (1);
 
93
        }       
 
94
        return s;
 
95
}
 
96
 
 
97
SearchPath
 
98
ardour_config_search_path ()
 
99
{
 
100
        static SearchPath search_path;
 
101
 
 
102
        if (search_path.empty()) {
 
103
                search_path += user_config_directory();
 
104
                
 
105
                std::string s = Glib::getenv("ARDOUR_CONFIG_PATH");
 
106
                if (s.empty()) {
 
107
                        std::cerr << _("ARDOUR_CONFIG_PATH not set in environment - exiting\n");
 
108
                        ::exit (1);
 
109
                }
 
110
                
 
111
                search_path += SearchPath (s);
 
112
        }
 
113
 
 
114
        return search_path;
 
115
}
 
116
 
 
117
SearchPath
 
118
ardour_data_search_path ()
 
119
{
 
120
        static SearchPath search_path;
 
121
 
 
122
        if (search_path.empty()) {
 
123
                search_path += user_config_directory();
 
124
                
 
125
                std::string s = Glib::getenv("ARDOUR_DATA_PATH");
 
126
                if (s.empty()) {
 
127
                        std::cerr << _("ARDOUR_DATA_PATH not set in environment - exiting\n");
 
128
                        ::exit (1);
 
129
                }
 
130
                
 
131
                search_path += SearchPath (s);
 
132
        }
 
133
 
 
134
        return search_path;
 
135
}
 
136
 
 
137
} // namespace ARDOUR