[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41478] trunk/blender: patch [#28947] Patches for #28943 (Support for XDG Base Directory Specification)

Campbell Barton ideasman42 at gmail.com
Wed Nov 2 23:00:23 CET 2011


Revision: 41478
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41478
Author:   campbellbarton
Date:     2011-11-02 22:00:22 +0000 (Wed, 02 Nov 2011)
Log Message:
-----------
patch [#28947] Patches for #28943 (Support for XDG Base Directory Specification)
from Cosme

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/intern/ghost/CMakeLists.txt
    trunk/blender/intern/ghost/intern/GHOST_SystemPathsX11.cpp
    trunk/blender/source/blender/blenlib/CMakeLists.txt
    trunk/blender/source/blender/blenlib/intern/path_util.c

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2011-11-02 21:35:00 UTC (rev 41477)
+++ trunk/blender/CMakeLists.txt	2011-11-02 22:00:22 UTC (rev 41478)
@@ -157,6 +157,8 @@
 if(UNIX AND NOT APPLE)
 	option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)"	ON)
 	option(WITH_BUILTIN_GLEW "Use GLEW OpenGL wrapper library bundled with blender" ON)
+	option(WITH_XDG_USER_DIRS    "Build with XDG Base Directory Specification (only config and documents for now)" OFF)
+	mark_as_advanced(WITH_XDG_USER_DIRS)
 else()
 	# not an option for other OS's
 	set(WITH_BUILTIN_GLEW ON)

Modified: trunk/blender/intern/ghost/CMakeLists.txt
===================================================================
--- trunk/blender/intern/ghost/CMakeLists.txt	2011-11-02 21:35:00 UTC (rev 41477)
+++ trunk/blender/intern/ghost/CMakeLists.txt	2011-11-02 22:00:22 UTC (rev 41478)
@@ -108,6 +108,10 @@
 	)
 endif()
 
+if(WITH_XDG_USER_DIRS)
+	add_definitions(-DWITH_XDG_USER_DIRS)
+endif()
+
 if(WITH_HEADLESS OR WITH_GHOST_SDL)
 	if(WITH_HEADLESS)
 		list(APPEND SRC

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemPathsX11.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemPathsX11.cpp	2011-11-02 21:35:00 UTC (rev 41477)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemPathsX11.cpp	2011-11-02 22:00:22 UTC (rev 41478)
@@ -41,6 +41,11 @@
 #include <stdio.h> // for fprintf only
 #include <cstdlib> // for exit
 
+#ifdef WITH_XDG_USER_DIRS
+#  include <pwd.h> // for get home without use getenv()
+#  include <limits.h> // for PATH_MAX
+#endif
+
 #ifdef PREFIX
 static const char *static_path= PREFIX "/share" ;
 #else
@@ -63,7 +68,27 @@
 
 const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
 {
+#ifndef WITH_XDG_USER_DIRS
 	return (const GHOST_TUns8 *)getenv("HOME");
+#else /* WITH_XDG_USER_DIRS */
+	const char *home= getenv("XDG_CONFIG_HOME");
+
+	if (home) {
+		return (const GHOST_TUns8 *)home;
+	}
+	else {
+		static char user_path[PATH_MAX];
+
+		home= getenv("HOME");
+
+		if (home == NULL) {
+			home= getpwuid(getuid())->pw_dir;
+		}
+
+		snprintf(user_path, sizeof(user_path), "%s/.config", home);
+		return (const GHOST_TUns8 *)user_path;
+	}
+#endif /* WITH_XDG_USER_DIRS */
 }
 
 const GHOST_TUns8* GHOST_SystemPathsX11::getBinaryDir() const

Modified: trunk/blender/source/blender/blenlib/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenlib/CMakeLists.txt	2011-11-02 21:35:00 UTC (rev 41477)
+++ trunk/blender/source/blender/blenlib/CMakeLists.txt	2011-11-02 22:00:22 UTC (rev 41478)
@@ -148,4 +148,8 @@
 	add_definitions(-DPARALLEL=1)
 endif()
 
+if(WITH_XDG_USER_DIRS)
+	add_definitions(-DWITH_XDG_USER_DIRS)
+endif()
+
 blender_add_lib(bf_blenlib "${SRC}" "${INC}" "${INC_SYS}")

Modified: trunk/blender/source/blender/blenlib/intern/path_util.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/path_util.c	2011-11-02 21:35:00 UTC (rev 41477)
+++ trunk/blender/source/blender/blenlib/intern/path_util.c	2011-11-02 22:00:22 UTC (rev 41478)
@@ -52,7 +52,7 @@
 #include "GHOST_Path-api.h"
 
 #if defined WIN32 && !defined _LIBC
-# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */
+#  include "BLI_fnmatch.h" /* use fnmatch included in blenlib */
 #else
 #  ifndef _GNU_SOURCE
 #    define _GNU_SOURCE
@@ -61,35 +61,34 @@
 #endif
 
 #ifdef WIN32
-#include <io.h>
-
-#ifdef _WIN32_IE
-#undef _WIN32_IE
-#endif
-#define _WIN32_IE 0x0501
-#include <windows.h>
-#include <shlobj.h>
-
-#include "BLI_winstuff.h"
-
+#  include <io.h>
+#  ifdef _WIN32_IE
+#    undef _WIN32_IE
+#  endif
+#  define _WIN32_IE 0x0501
+#  include <windows.h>
+#  include <shlobj.h>
+#  include "BLI_winstuff.h"
 #else /* non windows */
-
-#ifdef WITH_BINRELOC
-#include "binreloc.h"
-#endif
-
+#  ifdef WITH_BINRELOC
+#    include "binreloc.h"
+#  endif
 #endif /* WIN32 */
 
 /* standard paths */
 #ifdef WIN32
-#define BLENDER_USER_FORMAT		"%s\\Blender Foundation\\Blender\\%s"
-#define BLENDER_SYSTEM_FORMAT		"%s\\Blender Foundation\\Blender\\%s"
+#  define BLENDER_USER_FORMAT		"%s\\Blender Foundation\\Blender\\%s"
+#  define BLENDER_SYSTEM_FORMAT		"%s\\Blender Foundation\\Blender\\%s"
 #elif defined(__APPLE__)
-#define BLENDER_USER_FORMAT			"%s/Blender/%s"
-#define BLENDER_SYSTEM_FORMAT			"%s/Blender/%s"
-#else
-#define BLENDER_USER_FORMAT			"%s/.blender/%s"
-#define BLENDER_SYSTEM_FORMAT			"%s/blender/%s"
+#  define BLENDER_USER_FORMAT			"%s/Blender/%s"
+#  define BLENDER_SYSTEM_FORMAT			"%s/Blender/%s"
+#else /* UNIX */
+#  ifndef WITH_XDG_USER_DIRS /* oldschool unix ~/.blender/ */
+#    define BLENDER_USER_FORMAT			"%s/.blender/%s"
+#  else /* new XDG ~/blender/.config/ */
+#    define BLENDER_USER_FORMAT			"%s/blender/%s"
+#  endif // WITH_XDG_USER_DIRS
+#  define BLENDER_SYSTEM_FORMAT			"%s/blender/%s"
 #endif
 
 /* local */
@@ -797,10 +796,18 @@
    as default location to save documents */
 const char *BLI_getDefaultDocumentFolder(void)
 {
-	#if !defined(WIN32)
+#ifndef WIN32
+
+#ifdef WITH_XDG_USER_DIRS
+		const char *xdg_documents_dir= getenv("XDG_DOCUMENTS_DIR");
+		if (xdg_documents_dir) {
+			return xdg_documents_dir;
+		}
+#endif
+
 		return getenv("HOME");
 
-	#else /* Windows */
+#else /* Windows */
 		const char * ret;
 		static char documentfolder[MAXPATHLEN];
 		HRESULT hResult;
@@ -825,7 +832,7 @@
 		}
 		
 		return NULL;
-	#endif
+#endif /* WIN32 */
 }
 
 /* NEW stuff, to be cleaned up when fully migrated */




More information about the Bf-blender-cvs mailing list