Description: Handle the G_HOME environment variable to override the passwd entry This will allow to fix various kinds of build failures due to restricted build environments. Author: Josselin Mouette <joss@debian.org> Origin: vendor --- a/docs/reference/glib/running.sgml +++ b/docs/reference/glib/running.sgml @@ -213,6 +213,22 @@ </para> </formalpara> +<formalpara id="G_HOME"> + <title><envar>G_HOME</envar></title> + + <para> + For various reasons, GLib applications ignore the <envar>HOME</envar> + environment variable on Unix systems and will use the user directory + as specified by the <filename>passwd</filename> entry, which is more + reliable. + </para> + <para> + The <envar>G_HOME</envar> environment variable will override any + other setting for the home directory. It is not meant for daily usage, + but it is useful in testing or building environments. + </para> +</formalpara> + </refsect2> <refsect2 id="setlocale"> --- a/glib/gutils.c +++ b/glib/gutils.c @@ -1626,11 +1626,14 @@ } #endif /* !G_OS_WIN32 */ + g_home_dir = g_strdup (g_getenv ("G_HOME")); + #ifdef G_OS_WIN32 /* We check $HOME first for Win32, though it is a last resort for Unix * where we prefer the results of getpwuid(). */ - g_home_dir = g_strdup (g_getenv ("HOME")); + if (!g_home_dir) + g_home_dir = g_strdup (g_getenv ("HOME")); /* Only believe HOME if it is an absolute path and exists */ if (g_home_dir) @@ -1926,6 +1929,11 @@ * homedir = g_get_home_dir (<!-- -->); * ]| * + * However, to allow changing this value for testing and development + * purposes, the value of the <envar>G_HOME</envar> environment + * variable, if set, will override the <filename>passwd</filename> + * entry. + * * Returns: the current user's home directory */ G_CONST_RETURN gchar*