diff --git a/src/Intrinsic.c b/src/Intrinsic.c --- a/src/Intrinsic.c +++ b/src/Intrinsic.c @@ -1345,21 +1345,99 @@ FillInLangSubs(Substitution subs, XtPerDisplay pd) } /* - * default path used if environment variable XFILESEARCHPATH - * is not defined. Also substitued for %D. - * The exact value should be documented in the implementation - * notes for any Xt implementation. + Return the default search path for the function + XtResolvePathname to use if XFILESEARCHPATH is + not defined. + + It returns the combination the set of values which are the 6 "stems" below, + prepended with "/run/current-system/profile", and $GUIX_PROFILE and + "$HOME/.guix-profile" + + These values provide the default paths where Guix/GuixSD can expect + to find resources for installed packages. */ static const char * -implementation_default_path(void) +guix_default_path(void) { -#if defined(WIN32) - static char xfilesearchpath[] = ""; + static const char *search_path_default_stem[] = { + "/lib/X11/%L/%T/%N%C%S", + "/lib/X11/%l/%T/%N%C%S", + "/lib/X11/%T/%N%C%S", + "/lib/X11/%L/%T/%N%S", + "/lib/X11/%l/%T/%N%S", + "/lib/X11/%T/%N%S" + }; + +#define SIZEOF_STEMS (strlen (search_path_default_stem[0]) \ + + strlen (search_path_default_stem[1]) \ + + strlen (search_path_default_stem[2]) \ + + strlen (search_path_default_stem[3]) \ + + strlen (search_path_default_stem[4]) \ + + strlen (search_path_default_stem[5])) + + + int i; + const char *current_profile = "/run/current-system/profile"; + char *home = getenv ("HOME"); + char *guix_profile = getenv ("GUIX_PROFILE"); + + size_t bytesAllocd = SIZEOF_STEMS + 1; + + /* This function is evaluated multiple times and the calling + code assumes that it is idempotent. So we must not allow + (say) a changed environment variable to cause it to return + something different. */ + static char *path = NULL; + if (path) + return path; + + bytesAllocd += 6 * (1 + strlen (current_profile)); + + if (guix_profile != NULL) + { + bytesAllocd += SIZEOF_STEMS; + bytesAllocd += 6 * (1 + strlen (guix_profile)); + } - return xfilesearchpath; -#else - return XFILESEARCHPATHDEFAULT; -#endif + if (home != NULL) + { + bytesAllocd += SIZEOF_STEMS; + bytesAllocd += 6 * (1 + strlen(home) + strlen ("/.guix-profile")); + } + + path = XtMalloc(bytesAllocd); + if (path == NULL) _XtAllocError(NULL); + + memset (path, 0, bytesAllocd); + + for (i = 0 ; i < 6 ; ++i) + { + strcat (path, current_profile); + strcat (path, search_path_default_stem[i]); + strcat (path, ":"); + } + + if (guix_profile != NULL) + for (i = 0 ; i < 6 ; ++i) + { + strcat (path, guix_profile); + strcat (path, search_path_default_stem[i]); + strcat (path, ":"); + } + + if (home != NULL) + for (i = 0 ; i < 6 ; ++i) + { + strcat (path, home); + strcat (path, "/.guix-profile"); + strcat (path, search_path_default_stem[i]); + strcat (path, ":"); + } + + /* Remove final : */ + path[strlen(path) - 1] = '\0'; + + return path; } @@ -1388,7 +1466,7 @@ XtResolvePathname(Display *dpy, { XtPerDisplay pd; static const char *defaultPath = NULL; - const char *impl_default = implementation_default_path(); + const char *impl_default = guix_default_path(); int idef_len = (int) strlen(impl_default); char *massagedPath; int bytesAllocd, bytesLeft; ommit info' class='commit-info'> authorRicardo Wurmus <rekado@elephly.net>2024-07-02 14:58:50 +0200 committerRicardo Wurmus <rekado@elephly.net>2024-07-17 22:38:32 +0200 commit1954141ee72a7dd0077046cce488281530db7211 (patch) tree8a3cb9a032d207971f659c46ff84f727a5fdc842 /gnu parent55343948ae2f5af8cd727bef5b8144b8289a404d (diff)downloadguix-1954141ee72a7dd0077046cce488281530db7211.tar.gz
guix-1954141ee72a7dd0077046cce488281530db7211.zip
gnu: r-readods: Update to 2.3.0.
* gnu/packages/cran.scm (r-readods): Update to 2.3.0. [propagated-inputs]: Remove r-cpp11 and r-readr; add r-minty. Change-Id: Ie9779184397ee32b68189c3401100b7992158cc5
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/cran.scm7
1 files changed, 3 insertions, 4 deletions
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 11611954e7..2804345847 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm