move path_expand() and search_path_expand() into libpbd, and use them to expand searc...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 20 Mar 2013 11:43:19 +0000 (07:43 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 20 Mar 2013 11:43:19 +0000 (07:43 -0400)
libs/ardour/ardour/session_configuration_vars.h
libs/ardour/ardour/utils.h
libs/ardour/session_configuration.cc
libs/ardour/utils.cc
libs/pbd/pathscanner.cc
libs/pbd/pbd/basename.h
libs/pbd/wscript

index 1f8b2356d123d30b314712d5739f34f167a72eae..cce4bf86d7965f44088273467f00d07c7e4fdb5f 100644 (file)
@@ -38,9 +38,9 @@ CONFIG_VARIABLE (bool, punch_in, "punch-in", false)
 CONFIG_VARIABLE (bool, punch_out, "punch-out", false)
 CONFIG_VARIABLE (uint32_t, subframes_per_frame, "subframes-per-frame", 100)
 CONFIG_VARIABLE (Timecode::TimecodeFormat, timecode_format, "timecode-format", Timecode::timecode_30)
-CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", path_expand)
-CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", search_path_expand)
-CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", search_path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", PBD::path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", PBD::search_path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", PBD::search_path_expand)
 CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true)
 CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false)
 CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
index 7223d1f8ec9900f7236a43b5c003ce08ceea1111..0aa419339451dcd4b3a362cd2c61dc97c0343c82 100644 (file)
@@ -60,8 +60,6 @@ int cmp_nocase (const std::string& s, const std::string& s2);
 
 int touch_file(std::string path);
 
-std::string path_expand (std::string);        /* single file path */
-std::string search_path_expand (std::string); /* colon-separated search path */
 std::string region_name_from_path (std::string path, bool strip_channels, bool add_channel_suffix = false, uint32_t total = 0, uint32_t this_one = 0);
 bool path_is_paired (std::string path, std::string& pair_base);
 
index cfb6fb86686408734a3777e99390cd4260e99aad..0cfdb52872ed37946d975fd3682d1120e8972c2a 100644 (file)
@@ -17,8 +17,9 @@
 
 */
 
+#include "pbd/pathexpand.h"
+
 #include "ardour/types.h"
-#include "ardour/utils.h"
 #include "ardour/session_configuration.h"
 #include "i18n.h"
 
index ad0823ddaf1947848fc0f3ab1336503716b99af6..aedc78988fb293a137536ad7e01a48d66ea15c5e 100644 (file)
@@ -307,112 +307,6 @@ path_is_paired (string path, string& pair_base)
        return false;
 }
 
-string
-path_expand (string path)
-{
-        if (path.empty()) {
-                return path;
-        }
-
-        /* tilde expansion */
-
-        if (path[0] == '~') {
-                if (path.length() == 1) {
-                        return Glib::get_home_dir();
-                }
-
-                if (path[1] == '/') {
-                        path.replace (0, 1, Glib::get_home_dir());
-                } else {
-                        /* can't handle ~roger, so just leave it */
-                }
-        }
-
-       /* now do $VAR substitution, since wordexp isn't reliable */
-
-       regex_t compiled_pattern;
-       const int nmatches = 100;
-       regmatch_t matches[nmatches];
-       
-       if (regcomp (&compiled_pattern, "\\$([a-zA-Z_][a-zA-Z0-9_]*|\\{[a-zA-Z_][a-zA-Z0-9_]*\\})", REG_EXTENDED)) {
-                cerr << "bad regcomp\n";
-                return path;
-        }
-
-       while (true) { 
-
-               if (regexec (&compiled_pattern, path.c_str(), nmatches, matches, 0)) {
-                       break;
-               }
-               
-               /* matches[0] gives the entire match */
-               
-               string match = path.substr (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so);
-               
-               /* try to get match from the environment */
-
-                if (match[1] == '{') {
-                        /* ${FOO} form */
-                        match = match.substr (2, match.length() - 3);
-                }
-
-               char* matched_value = getenv (match.c_str());
-
-               if (matched_value) {
-                       path.replace (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so, matched_value);
-               } else {
-                       path.replace (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so, string());
-                }
-
-               /* go back and do it again with whatever remains after the
-                * substitution 
-                */
-       }
-
-       regfree (&compiled_pattern);
-
-       /* canonicalize */
-
-       char buf[PATH_MAX+1];
-
-       if (realpath (path.c_str(), buf)) {
-               return buf;
-       } else {
-               return string();
-       }
-}
-
-string
-search_path_expand (string path)
-{
-        if (path.empty()) {
-                return path;
-        }
-
-       vector<string> s;
-       vector<string> n;
-
-       split (path, s, ':');
-
-       for (vector<string>::iterator i = s.begin(); i != s.end(); ++i) {
-               string exp = path_expand (*i);
-               if (!exp.empty()) {
-                       n.push_back (exp);
-               }
-       }
-
-       string r;
-
-       for (vector<string>::iterator i = n.begin(); i != n.end(); ++i) {
-               if (!r.empty()) {
-                       r += ':';
-               }
-               r += *i;
-       }
-
-       return r;
-}
-
 #if __APPLE__
 string
 CFStringRefToStdString(CFStringRef stringRef)
index 8f57726c7f65206b42ea3bbd65507a59a0496c04..fac2dcfd965258debf26a13a3d65cd4839e76548 100644 (file)
@@ -29,6 +29,7 @@
 #include <glibmm/miscutils.h>
 
 #include "pbd/error.h"
+#include "pbd/pathexpand.h"
 #include "pbd/pathscanner.h"
 #include "pbd/stl_delete.h"
 
@@ -90,7 +91,7 @@ PathScanner::run_scan_internal (vector<string *> *result,
 {
        DIR *dir;
        struct dirent *finfo;
-       char *pathcopy = strdup (dirpath.c_str());
+       char *pathcopy = strdup (search_path_expand (dirpath).c_str());
        char *thisdir;
        string fullpath;
        string search_str;
index f13c3840dc38aab393b9546d9cf4e19b45dbe33f..290af2e4bf7dad1fb0ed71ff8d5c48696c8b4d95 100644 (file)
 
 */
 
-#ifndef __stupid_basename_h__
-#define __stupid_basename_h__
+#ifndef __libpbd_basename_h__
+#define __libdpbd_basename_h__
 
 #include <glibmm/ustring.h>
 
-namespace PBD
-{
-       
-Glib::ustring basename_nosuffix (Glib::ustring);
-
+namespace PBD {
+       Glib::ustring basename_nosuffix (Glib::ustring);
 } 
 
-#endif  // __stupid_basename_h__
+#endif  /* __libdpbd_basename_h__ */
index eb88809f532b6fc66d928f04ebbb21b752fbcf89..0ec2747cb3e506fa2f14c59588c47ff3a97e3380 100644 (file)
@@ -86,6 +86,7 @@ def build(bld):
             malign.cc
             mountpoint.cc
             openuri.cc
+            pathexpand.cc
             pathscanner.cc
             pool.cc
             property_list.cc