]> git.saurik.com Git - wxWidgets.git/commitdiff
Add a WX_APPNAME_DATA_DIR hack for wxStandardPaths::GetDataDir().
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 8 Oct 2009 22:38:03 +0000 (22:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 8 Oct 2009 22:38:03 +0000 (22:38 +0000)
Applications using wxStandardPaths::GetDataDir() to find their files under
Unix can't be ran without being installed as they look for their data files
under $prefix/share/appname. Make it possible to override this location by
setting WX_APPNAME_DATA_DIR environment variable to allow running them without
installation.

Notice that this shouldn't present any security risk unless the application is
SUID (which would be a very bad idea anyhow).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62337 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
interface/wx/stdpaths.h
src/unix/stdpaths.cpp

index b853af9f334bad4e698f8d34d1b4acbdec54b16f..a93b1946c996bd4df45cd14dcbc1d02cefde10df 100644 (file)
@@ -405,6 +405,11 @@ All:
 - wxDateTime timezone functions now dynamic (no caching).
 - Added wxHttp::GetCookie and wxHttp::HasCookies (dodge).
 
+Unix:
+
+- Allow to use WX_APPNAME_DATA_DIR environment var to override the return value
+  of wxStandardPaths::GetDataDir().
+
 All (GUI):
 
 - Added support for showing bitmaps in wxButton.
index 22a36bdb308bbc8dbd94e593bc004babecf484d2..d443cd773cb91d886452d59862f4d6968ffcfeca 100644 (file)
@@ -103,11 +103,20 @@ public:
     /**
         Return the location of the applications global, i.e. not user-specific,
         data files.
+
         Example return values:
         - Unix: @c prefix/share/appinfo
         - Windows: the directory where the executable file is located
         - Mac: @c appinfo.app/Contents/SharedSupport bundle subdirectory
 
+        Under Unix (only) it is possible to override the default value returned
+        from this function by setting the value of @c WX_APPNAME_DATA_DIR
+        environment variable to the directory to use (where @c APPNAME is the
+        upper-cased value of wxApp::GetAppName()). This is useful in order to
+        be able to run applications using this function without installing them
+        as you can simply set this environment variable to the source directory
+        location to allow the application to find its files there.
+
         @see GetLocalDataDir()
     */
     virtual wxString GetDataDir() const;
index a3ff34dff4eb46c2c1f6a6207fe65e4badabf9c3..c127fc3d665611b43b1fd5b83b959b467a14dec4 100644 (file)
@@ -191,6 +191,16 @@ wxString wxStandardPaths::GetConfigDir() const
 
 wxString wxStandardPaths::GetDataDir() const
 {
+    // allow to override the location of the data directory by setting
+    // WX_APPNAME_DATA_DIR environment variable: this is very useful in
+    // practice for running well-written (and so using wxStandardPaths to find
+    // their files) wx applications without installing them
+    static const wxString
+      envOverride(getenv("WX_" + wxTheApp->GetAppName().Upper() + "_DATA_DIR"));
+
+    if ( !envOverride.empty() )
+        return envOverride;
+
    return AppendAppInfo(GetInstallPrefix() + wxT("/share"));
 }