Merge branch 'improve-xdg'

main
Adriaan de Groot 6 years ago
commit 652c0c22fe

@ -2,7 +2,7 @@
# #
# SPDX-License-Identifier: BSD-2-Clause # SPDX-License-Identifier: BSD-2-Clause
# #
# Copyright 2019 Adriaan de Groot <adridg@FreeBSD.org> # Copyright 2019 Adriaan de Groot <groot@kde.org>
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions # modification, are permitted provided that the following conditions
@ -56,7 +56,11 @@
# The build process for AppImage proceeds in a directory build-AppImage # The build process for AppImage proceeds in a directory build-AppImage
# that is created in the current directory. # that is created in the current directory.
# #
# TODO: Conda / Python support doesn't work yet. # The resulting AppImage has XDG_* enabled, and appends the in-image
# directories to the current environment. You can set XDG_* in the
# current environment to use other configurations and data, e.g. the
# data in the current live environment. Or leave it unset, to try
# Calamares with only the configuration contained in the AppImage.
# #
### END USAGE ### END USAGE
@ -207,10 +211,13 @@ mv "$IMAGE_DIR/usr/bin/calamares" "$IMAGE_DIR/usr/bin/calamares.bin"
cat > "$IMAGE_DIR/usr/bin/calamares" <<"EOF" cat > "$IMAGE_DIR/usr/bin/calamares" <<"EOF"
#! /bin/sh #! /bin/sh
# #
# Calamares proxy-script # Calamares proxy-script. Runs Calamares with XDG support enabled,
export XDG_DATA_DIRS="$APPDIR/usr/share/calamares:" # and in-image XDG dirs set up so that compiled-in configuration can be used.
export XDG_CONFIG_DIRS="$APPDIR/etc/calamares:$D/usr/share:" test -n "${XDG_DATA_DIRS}" && XDG_DATA_DIRS="${XDG_DATA_DIRS}:"
export PYTHONPATH=$APPDIR/usr/lib: test -n "${XDG_CONFIG_DIRS}" $$ XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}:"
export XDG_DATA_DIRS="${XDG_DATA_DIRS}${APPDIR}/usr/share/"
export XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}${APPDIR}/etc/:${APPDIR}/usr/share/"
export PYTHONPATH="${APPDIR}/usr/lib:"
cd "$APPDIR" cd "$APPDIR"
exec "$APPDIR"/usr/bin/calamares.bin -X "$@" exec "$APPDIR"/usr/bin/calamares.bin -X "$@"
EOF EOF

@ -99,21 +99,32 @@ setAppDataDir( const QDir& dir )
/* Split $ENV{@p name} on :, append to @p l, making sure each ends in / */ /* Split $ENV{@p name} on :, append to @p l, making sure each ends in / */
static void static void
mungeEnvironment( QStringList& l, const char *name ) mungeEnvironment( QStringList& l, const char* name, const char* defaultDirs )
{ {
for ( auto s : QString( qgetenv( name ) ).split(':') ) static const QString calamaresSubdir = QStringLiteral( "calamares/" );
QStringList dirs = QString( qgetenv( name ) ).split( ':' );
if ( dirs.isEmpty() )
dirs = QString( defaultDirs ).split( ':' );
for ( auto s : dirs )
{
if ( s.isEmpty() )
continue;
if ( s.endsWith( '/' ) ) if ( s.endsWith( '/' ) )
l << s; l << ( s + calamaresSubdir ) << s;
else else
l << ( s + '/' ); l << ( s + '/' + calamaresSubdir ) << ( s + '/' );
}
} }
void void
setXdgDirs() setXdgDirs()
{ {
s_haveExtraDirs = true; mungeEnvironment( s_extraConfigDirs, "XDG_CONFIG_DIRS", "/etc/xdg" );
mungeEnvironment( s_extraConfigDirs, "XDG_CONFIG_DIRS" ); mungeEnvironment( s_extraDataDirs, "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" );
mungeEnvironment( s_extraDataDirs, "XDG_DATA_DIRS" );
s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() );
} }
QStringList QStringList

Loading…
Cancel
Save