Improve locale directory detection
authorest31 <MTest31@outlook.com>
Tue, 8 Sep 2015 21:57:28 +0000 (23:57 +0200)
committerest31 <MTest31@outlook.com>
Thu, 10 Sep 2015 06:32:58 +0000 (08:32 +0200)
Use in-place locale directory if that exists, and
static one (RUN_IN_PLACE or CUSTOM_LOCALEDIR) doesn't exist.
Report to errorstream if neither static nor in-place locale
dirs exist, and report successfully found paths to infostreem.

Fixes two bugs:

-> Regression of commit [1] where if we use RUN_IN_PLACE=false,
but don't make install, locales aren't found. One might
think this is no regression, as its no bug, but all other
paths (mainmenu, etc.) are detected properly.
-> Regression of commit [1] where locales don't work on windows.

References:
[1]: Commit 645e2086734e3d2d1ec95f50faa39f0f24304761 "Use CUSTOM_LOCALEDIR if specified" by @ShadowNinja

src/porting.cpp

index 5fea1d9cf4dc259ae2fd50a542ddcf1123d57f77..d0dfc801fcbd5e47957a52f163f66f0ff1cf73b2 100644 (file)
@@ -512,14 +512,35 @@ void initializePaths()
                errorstream << "Failed to get one or more system-wide path" << std::endl;
 
 #endif
+
+       infostream << "Detected share path: " << path_share << std::endl;
+       infostream << "Detected user path: " << path_user << std::endl;
+
+       bool found_localedir = false;
 #ifdef STATIC_LOCALEDIR
-       path_locale = STATIC_LOCALEDIR[0] ? STATIC_LOCALEDIR : getDataPath("locale");
+       if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) {
+               found_localedir = true;
+               path_locale = STATIC_LOCALEDIR;
+               infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl;
+       } else {
+               path_locale = getDataPath("locale");
+               if (fs::PathExists(path_locale)) {
+                       found_localedir = true;
+                       infostream << "Using in-place locale directory " << path_locale
+                               << " even though a static one was provided "
+                               << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl;
+               }
+       }
 #else
        path_locale = getDataPath("locale");
+       if (fs::PathExists(path_locale)) {
+               found_localedir = true;
+       }
 #endif
+       if (!found_localedir) {
+               errorstream << "Couldn't find a locale directory!" << std::endl;
+       }
 
-       infostream << "Detected share path: " << path_share << std::endl;
-       infostream << "Detected user path: " << path_user << std::endl;
 }