You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calamares-packaging/debian/patches/xdg-support-2.patch

111 lines
4.2 KiB

Description: Use XDG_{DATA,CONFIG}_DIRS as appropriate
This is patch 2/2 adding XDG directory support.
Author: Adriaan de Groot <groot@kde.org>
Origin: upstream
Bug: https://github.com/calamares/calamares/issues/941
Applied-Upstream: commit:3b8d283
Last-Update: 2018-11-15
--- a/src/calamares/CalamaresApplication.cpp
+++ b/src/calamares/CalamaresApplication.cpp
@@ -145,6 +145,9 @@ qmlDirCandidates( bool assumeBuilddir )
{
if ( assumeBuilddir )
qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir
+ if ( CalamaresUtils::haveExtraDirs() )
+ for ( auto s : CalamaresUtils::extraDataDirs() )
+ qmlDirs << ( s + QML );
qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML );
}
@@ -164,6 +167,9 @@ settingsFileCandidates( bool assumeBuild
{
if ( assumeBuilddir )
settingsPaths << QDir::current().absoluteFilePath( settings );
+ if ( CalamaresUtils::haveExtraDirs() )
+ for ( auto s : CalamaresUtils::extraConfigDirs() )
+ settingsPaths << ( s + settings );
settingsPaths << CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/settings.conf"; // String concat
settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings );
}
@@ -182,6 +188,9 @@ brandingFileCandidates( bool assumeBuild
{
if ( assumeBuilddir )
brandingPaths << ( QDir::currentPath() + QStringLiteral( "/src/" ) + brandingFilename );
+ if ( CalamaresUtils::haveExtraDirs() )
+ for ( auto s : CalamaresUtils::extraDataDirs() )
+ brandingPaths << ( s + brandingFilename );
brandingPaths << QDir( CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/" ).absoluteFilePath( brandingFilename );
brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename);
}
--- a/src/libcalamares/utils/CalamaresUtils.cpp
+++ b/src/libcalamares/utils/CalamaresUtils.cpp
@@ -97,12 +97,23 @@ setAppDataDir( const QDir& dir )
s_isAppDataDirOverridden = true;
}
+/* Split $ENV{@p name} on :, append to @p l, making sure each ends in / */
+static void
+mungeEnvironment( QStringList& l, const char *name )
+{
+ for ( auto s : QString( qgetenv( name ) ).split(':') )
+ if ( s.endsWith( '/' ) )
+ l << s;
+ else
+ l << ( s + '/' );
+}
+
void
setXdgDirs()
{
s_haveExtraDirs = true;
- s_extraConfigDirs.append( QString( qgetenv( "XDG_CONFIG_DIRS" ) ).split(':') );
- s_extraDataDirs.append( QString( qgetenv( "XDG_DATA_DIRS" ) ).split(':') );
+ mungeEnvironment( s_extraConfigDirs, "XDG_CONFIG_DIRS" );
+ mungeEnvironment( s_extraDataDirs, "XDG_DATA_DIRS" );
}
QStringList
@@ -121,7 +132,11 @@ extraDataDirs()
return QStringList();
}
-
+bool
+haveExtraDirs()
+{
+ return s_haveExtraDirs && ( !s_extraConfigDirs.isEmpty() || !s_extraDataDirs.isEmpty() );
+}
bool
isAppDataDirOverridden()
--- a/src/libcalamares/utils/CalamaresUtils.h
+++ b/src/libcalamares/utils/CalamaresUtils.h
@@ -80,10 +80,13 @@ namespace CalamaresUtils
DLLEXPORT void setQmlModulesDir( const QDir& dir );
/** @brief Setup extra config and data dirs from the XDG variables.
- *
*/
DLLEXPORT void setXdgDirs();
+ /** @brief Are any extra directories configured? */
+ DLLEXPORT bool haveExtraDirs();
+ /** @brief XDG_CONFIG_DIRS, each guaranteed to end with / */
DLLEXPORT QStringList extraConfigDirs();
+ /** @brief XDG_DATA_DIRS, each guaranteed to end with / */
DLLEXPORT QStringList extraDataDirs();
/**
--- a/src/libcalamaresui/modulesystem/Module.cpp
+++ b/src/libcalamaresui/modulesystem/Module.cpp
@@ -148,6 +148,10 @@ moduleConfigurationCandidates( bool assu
if ( assumeBuildDir )
paths << QDir().absoluteFilePath(QString( "src/modules/%1/%2" ).arg( moduleName ).arg( configFileName ) );
+ if ( CalamaresUtils::haveExtraDirs() )
+ for ( auto s : CalamaresUtils::extraConfigDirs() )
+ paths << ( s + QString( "modules/%1" ).arg( configFileName ) );
+
paths << QString( "/etc/calamares/modules/%1" ).arg( configFileName );
paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) );
}