configmgr/Library_configmgr.mk | 2 configmgr/source/components.cxx | 63 +- configmgr/source/components.hxx | 5 configmgr/source/dconf.cxx | 968 +++++++++++++++++++++++++++++++++ configmgr/source/dconf.hxx | 25 configmgr/source/readdconflayer.cxx | 953 -------------------------------- configmgr/source/readdconflayer.hxx | 25 instsetoo_native/CustomTarget_setup.mk | 2 scp2/source/ooo/common_brand.scp | 4 9 files changed, 1046 insertions(+), 1001 deletions(-)
New commits: commit 21e713a751d4c6d1ad43f7eaa53b06e395b0cb3e Author: Stephan Bergmann <sberg...@redhat.com> Date: Tue Sep 1 15:05:19 2015 +0200 Handle dconf_client_new failure Change-Id: Ib873ca03a2552dc0405236ed87040672ba359e5e diff --git a/configmgr/source/dconf.cxx b/configmgr/source/dconf.cxx index 4490259..ca94a9b 100644 --- a/configmgr/source/dconf.cxx +++ b/configmgr/source/dconf.cxx @@ -954,6 +954,10 @@ void readDir( void readLayer(Data & data, int layer) { GObjectHolder<DConfClient> client(dconf_client_new()); + if (client.get() == nullptr) { + SAL_WARN("configmgr.dconf", "dconf_client_new failed"); + return; + } readDir( data, layer, rtl::Reference<Node>(), data.getComponents(), client, "/org/libreoffice/registry/"); commit 9da6318b4e62a0e30d15df00d564dad61a74933e Author: Stephan Bergmann <sberg...@redhat.com> Date: Tue Sep 1 13:08:39 2015 +0200 dconf: fix check for matching template Change-Id: I8319bf10310d55e2f29de8103d983e34a53f87df diff --git a/configmgr/source/dconf.cxx b/configmgr/source/dconf.cxx index 44e8038..4490259 100644 --- a/configmgr/source/dconf.cxx +++ b/configmgr/source/dconf.cxx @@ -816,47 +816,47 @@ void readDir( } rtl::Reference<Node> member(members.findNode(layer, name)); bool insert = !member.is(); - if (!remove && (replace || insert)) { - if (!node.is()) { - SAL_WARN("configmgr.dconf", "bad unmatched " << path); - continue; - } - switch (node->kind()) { - case Node::KIND_LOCALIZED_PROPERTY: - member.set(new LocalizedValueNode(layer)); - break; - case Node::KIND_GROUP: - if (!static_cast<GroupNode *>(node.get())->isExtensible()) { + if (!remove) { + if (replace || insert) { + if (!node.is()) { SAL_WARN("configmgr.dconf", "bad unmatched " << path); continue; } - member.set( - new PropertyNode( - layer, TYPE_ANY, true, css::uno::Any(), true)); - break; - case Node::KIND_SET: - assert(!templ.isEmpty()); - member = data.getTemplate(layer, templ); - if (!member.is()) { - SAL_WARN( - "configmgr.dconf", - "bad " << path << " denoting undefined template " - << templ); - continue; + switch (node->kind()) { + case Node::KIND_LOCALIZED_PROPERTY: + member.set(new LocalizedValueNode(layer)); + break; + case Node::KIND_GROUP: + if (!static_cast<GroupNode *>(node.get())->isExtensible()) { + SAL_WARN("configmgr.dconf", "bad unmatched " << path); + continue; + } + member.set( + new PropertyNode( + layer, TYPE_ANY, true, css::uno::Any(), true)); + break; + case Node::KIND_SET: + assert(!templ.isEmpty()); + member = data.getTemplate(layer, templ); + if (!member.is()) { + SAL_WARN( + "configmgr.dconf", + "bad " << path << " denoting undefined template " + << templ); + continue; + } + break; + default: + assert(false); // cannot happen } - break; - default: - assert(false); // cannot happen + } else if (!templ.isEmpty() && templ != member->getTemplateName()) { + SAL_WARN( + "configmgr.dconf", + "bad " << path + << " denoting set element of non-matching template " + << member->getTemplateName()); + continue; } - } else if (!(templ.isEmpty() - || (node.is() && templ == node->getTemplateName()))) - { - SAL_WARN( - "configmgr.dconf", - "bad " << path - << " denoting set element of non-matching template " - << node->getTemplateName()); - continue; } if (member.is()) { if (member->getFinalized() < layer) { commit f262cfcf8ebf81d2d1407cf283b5d8eaaee053fd Author: Stephan Bergmann <sberg...@redhat.com> Date: Tue Sep 1 13:07:44 2015 +0200 dconf: fix encoding of set element names Change-Id: I6aba45a70a9ebee65be34af1036bb515fd2a22b7 diff --git a/configmgr/source/dconf.cxx b/configmgr/source/dconf.cxx index 7d1bc79..44e8038 100644 --- a/configmgr/source/dconf.cxx +++ b/configmgr/source/dconf.cxx @@ -51,17 +51,25 @@ // N ; T ; O // // where ";" represents U+003B SEMICOLON; N is an encoding of the node name, -// where each occurrence of U+003B SEMICOLON is replaced by the three -// characters "\3B" and each ocurrence of U+005C REVERSE SOLIDUS is replaced -// by the three characters "\5C"; T is an encoding of the full template name, -// where each occurrence of U+002F SOLIDUS is replaced by the three characters -// "\2F", each occurrence of U+003B SEMICOLON is replaced by the three -// characters "\3B", and each ocurrence of U+005C REVERSE SOLIDUS is replaced -// by the three characters "\5C"; and O is "fuse" or "replace", respectively. +// where each occurrence of U+0000 NULL is replace by the three characters +// "\00", each occurrence of U+002F SOLIDUS is replaced by the three +// characters "\2F", each occurrence of U+003B SEMICOLON is replaced by the +// three characters "\3B", and each ocurrence of U+005C REVERSE SOLIDUS is +// replaced by the three characters "\5C"; T is an encoding of the full +// template name, where each occurrence of U+002F SOLIDUS is replaced by the +// three characters "\2F", each occurrence of U+003B SEMICOLON is replaced by +// the three characters "\3B", and each ocurrence of U+005C REVERSE SOLIDUS is +// replaced by the three characters "\5C"; and O is "fuse" or "replace", +// respectively. // // * Set element and property "remove" operations are encoded as dconf key path -// segments directly using the node name, and the associated value being a -// GVariant of empty tuple type. +// segments as follows, and the associated value being a GVariant of empty +// tuple type. For set elements, the dconf key path segment consists of an +// encoding of the node name, where each occurrence of U+0000 NULL is replace +// by the three characters "\00", each occurrence of U+002F SOLIDUS is +// replaced by the three characters "\2F", and each ocurrence of U+005C +// REVERSE SOLIDUS is replaced by the three characters "\5C". For properties, +// the dconf key path segment directly uses the node name. // // * Property and localized property value "fuse" operations map to GVariant // instances as follows: @@ -738,7 +746,7 @@ void readDir( continue; } name = seg.copy(0, i1); - if (!decode(&name, false, false, true)) { + if (!decode(&name, true, true, true)) { continue; } ++i1; @@ -781,6 +789,9 @@ void readDir( } else { remove = true; name = seg; + if (!decode(&name, true, true, false)) { + continue; + } replace = false; assert(!path.endsWith("/")); GVariantHolder v( commit 2921d6773698cc588f808172b37fb28d80b28a9c Author: Stephan Bergmann <sberg...@redhat.com> Date: Fri Aug 28 14:41:40 2015 +0200 Rename stuff, in preparation of dconf::writeModifications Change-Id: Icd472e91b222907e2cdcbdba1b78b33c44eff566 diff --git a/configmgr/Library_configmgr.mk b/configmgr/Library_configmgr.mk index 36c316a..81367ca 100644 --- a/configmgr/Library_configmgr.mk +++ b/configmgr/Library_configmgr.mk @@ -43,7 +43,7 @@ $(eval $(call gb_Library_add_exception_objects,configmgr, \ configmgr/source/xcsparser \ configmgr/source/xcuparser \ configmgr/source/xmldata \ - $(if $(ENABLE_DCONF),configmgr/source/readdconflayer) \ + $(if $(ENABLE_DCONF),configmgr/source/dconf) \ $(if $(filter $(OS),WNT),configmgr/source/winreg) \ )) diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index d6f7144..1b9066a 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -66,7 +66,7 @@ #include "xcsparser.hxx" #if ENABLE_DCONF -#include <readdconflayer.hxx> +#include <dconf.hxx> #endif #if defined WNT @@ -536,7 +536,7 @@ Components::Components( if (url == "!") { modificationTarget_ = ModificationTarget::Dconf; } else if (url == "*") { - readDconfLayer(data_, layer); + dconf::readLayer(data_, layer); } else { throw css::uno::RuntimeException( "CONFIGURATION_LAYERS: unknown \"dconf\" kind \"" + url diff --git a/configmgr/source/readdconflayer.cxx b/configmgr/source/dconf.cxx similarity index 99% rename from configmgr/source/readdconflayer.cxx rename to configmgr/source/dconf.cxx index 035f554..7d1bc79 100644 --- a/configmgr/source/readdconflayer.cxx +++ b/configmgr/source/dconf.cxx @@ -20,12 +20,12 @@ #include <com/sun/star/uno/Sequence.hxx> #include <data.hxx> +#include <dconf.hxx> #include <groupnode.hxx> #include <localizedpropertynode.hxx> #include <localizedvaluenode.hxx> #include <nodemap.hxx> #include <propertynode.hxx> -#include <readdconflayer.hxx> #include <setnode.hxx> // component-data is encoded in dconf as follows: @@ -95,7 +95,7 @@ // // TODO: support "mandatory" and "external"? -namespace configmgr { +namespace configmgr { namespace dconf { namespace { @@ -941,13 +941,13 @@ void readDir( } -void readDconfLayer(Data & data, int layer) { +void readLayer(Data & data, int layer) { GObjectHolder<DConfClient> client(dconf_client_new()); readDir( data, layer, rtl::Reference<Node>(), data.getComponents(), client, "/org/libreoffice/registry/"); } -} +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/configmgr/source/readdconflayer.hxx b/configmgr/source/dconf.hxx similarity index 72% rename from configmgr/source/readdconflayer.hxx rename to configmgr/source/dconf.hxx index 63a4698..0f63e04 100644 --- a/configmgr/source/readdconflayer.hxx +++ b/configmgr/source/dconf.hxx @@ -7,18 +7,18 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONFIGMGR_SOURCE_READDCONFLAYER_HXX -#define INCLUDED_CONFIGMGR_SOURCE_READDCONFLAYER_HXX +#ifndef INCLUDED_CONFIGMGR_SOURCE_DCONF_HXX +#define INCLUDED_CONFIGMGR_SOURCE_DCONF_HXX #include <sal/config.h> namespace configmgr { struct Data; } -namespace configmgr { +namespace configmgr { namespace dconf { -void readDconfLayer(Data & data, int layer); +void readLayer(Data & data, int layer); -} +} } #endif commit 12f92e6d9ea8bf05bda6d3c42f9b6f0aba000cb0 Author: Stephan Bergmann <sberg...@redhat.com> Date: Fri Aug 28 13:49:56 2015 +0200 Support modification write-back to other than registrymodifications.xcu ...to eventually support writing to dconf (see TODO). Even when writing somewhere else, it may still be useful to read from the current "user:" location, so a new convention was introduced to CONFIGURATION_LAYERS types that support write-back: - A leading "!" indicates that the layer is indeed used for write-back (probably in addition to reading from it). For backwards compatibility (when users use own settings of CONFIGURATION_LAYERS, instead of depending on the value in the shipped fundamental ini-file), no prefix on the "user:" is now interpreted the same as a "!" prefix. - A leading "*" indicates that the layer is not used for write-back (but only for reading from it). Change-Id: I399cc7bfe927db50586834f9630c184aaa2153f2 diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index b3c8acb..d6f7144 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -279,12 +279,21 @@ void Components::addModification(Path const & path) { void Components::writeModifications() { - if (!(data_.modifications.empty() || modificationFileUrl_.isEmpty() - || writeThread_.is())) - { - writeThread_ = new WriteThread( - &writeThread_, *this, modificationFileUrl_, data_); - writeThread_->launch(); + if (!data_.modifications.empty()) { + switch (modificationTarget_) { + case ModificationTarget::None: + break; + case ModificationTarget::File: + if (!writeThread_.is()) { + writeThread_ = new WriteThread( + &writeThread_, *this, modificationFileUrl_, data_); + writeThread_->launch(); + } + break; + case ModificationTarget::Dconf: + //TODO + break; + } } } @@ -455,7 +464,8 @@ css::beans::Optional< css::uno::Any > Components::getExternalValue( Components::Components( css::uno::Reference< css::uno::XComponentContext > const & context): - context_(context), sharedExtensionLayer_(-1), userExtensionLayer_(-1) + context_(context), sharedExtensionLayer_(-1), userExtensionLayer_(-1), + modificationTarget_(ModificationTarget::None) { assert(context.is()); lock_ = lock(); @@ -468,9 +478,10 @@ Components::Components( if (i == conf.getLength()) { break; } - if (!modificationFileUrl_.isEmpty()) { + if (modificationTarget_ != ModificationTarget::None) { throw css::uno::RuntimeException( - "CONFIGURATION_LAYERS: \"user\" followed by further layers"); + "CONFIGURATION_LAYERS: modification target layer followed by" + " further layers"); } sal_Int32 c = i; for (;; ++c) { @@ -522,11 +533,15 @@ Components::Components( ++layer; //TODO: overflow #if ENABLE_DCONF } else if (type == "dconf") { - if (!url.isEmpty()) { + if (url == "!") { + modificationTarget_ = ModificationTarget::Dconf; + } else if (url == "*") { + readDconfLayer(data_, layer); + } else { throw css::uno::RuntimeException( - "CONFIGURATION_LAYERS: non-empty \"dconf\" URL"); + "CONFIGURATION_LAYERS: unknown \"dconf\" kind \"" + url + + "\""); } - readDconfLayer(data_, layer); ++layer; //TODO: overflow #endif #if defined WNT @@ -549,12 +564,24 @@ Components::Components( ++layer; //TODO: overflow #endif } else if (type == "user") { + bool write; + if (url.startsWith("!", &url)) { + write = true; + } else if (url.startsWith("*", &url)) { + write = false; + } else { + write = true; // for backwards compatibility + } if (url.isEmpty()) { throw css::uno::RuntimeException( "CONFIGURATION_LAYERS: empty \"user\" URL"); } - modificationFileUrl_ = url; - parseModificationLayer(url); + if (write) { + modificationTarget_ = ModificationTarget::File; + modificationFileUrl_ = url; + } + parseModificationLayer(write ? Data::NO_LAYER : layer, url); + ++layer; //TODO: overflow } else { throw css::uno::RuntimeException( "CONFIGURATION_LAYERS: unknown layer type \"" + type + "\""); @@ -789,9 +816,9 @@ void Components::parseResLayer(int layer, OUString const & url) { parseFiles(layer, ".xcu", &parseXcuFile, resUrl, false); } -void Components::parseModificationLayer(OUString const & url) { +void Components::parseModificationLayer(int layer, OUString const & url) { try { - parseFileLeniently(&parseXcuFile, url, Data::NO_LAYER, 0, 0, 0); + parseFileLeniently(&parseXcuFile, url, layer, 0, 0, 0); } catch (css::container::NoSuchElementException &) { SAL_INFO( "configmgr", "user registrymodifications.xcu does not (yet) exist"); @@ -799,7 +826,7 @@ void Components::parseModificationLayer(OUString const & url) { // longer relevant, probably OOo 4; also see hack for xsi namespace in // xmlreader::XmlReader::registerNamespaceIri): parseFiles( - Data::NO_LAYER, ".xcu", &parseXcuFile, + layer, ".xcu", &parseXcuFile, expand( "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/user/registry/data"), diff --git a/configmgr/source/components.hxx b/configmgr/source/components.hxx index 25d0d6e..43e682e 100644 --- a/configmgr/source/components.hxx +++ b/configmgr/source/components.hxx @@ -139,7 +139,7 @@ private: void parseResLayer(int layer, OUString const & url); - void parseModificationLayer(OUString const & url); + void parseModificationLayer(int layer, OUString const & url); int getExtensionLayer(bool shared); @@ -153,6 +153,8 @@ private: class WriteThread; + enum class ModificationTarget { None, File, Dconf }; + css::uno::Reference< css::uno::XComponentContext > context_; Data data_; @@ -161,6 +163,7 @@ private: rtl::Reference< WriteThread > writeThread_; int sharedExtensionLayer_; int userExtensionLayer_; + ModificationTarget modificationTarget_; OUString modificationFileUrl_; std::shared_ptr<osl::Mutex> lock_; }; diff --git a/instsetoo_native/CustomTarget_setup.mk b/instsetoo_native/CustomTarget_setup.mk index 209ab0a..14809b9 100644 --- a/instsetoo_native/CustomTarget_setup.mk +++ b/instsetoo_native/CustomTarget_setup.mk @@ -52,7 +52,7 @@ $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_ && echo 'BRAND_BASE_DIR=$${ORIGIN}/..' \ && echo 'BRAND_INI_DIR=$${ORIGIN}' \ && echo 'BRAND_SHARE_SUBDIR=$(LIBO_SHARE_FOLDER)' \ - && echo 'CONFIGURATION_LAYERS=xcsxcu:$${BRAND_BASE_DIR}/$(LIBO_SHARE_FOLDER)/registry res:$${BRAND_BASE_DIR}/$(LIBO_SHARE_FOLDER)/registry $(if $(ENABLE_DCONF),dconf: )$(if $(filter WNT,$(OS)),winreg:LOCAL_MACHINE )bundledext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):BUNDLED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini sharedext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):SHARED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini userext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):UNO_USER_PACKAGES_CACHE}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini $(if $(filter WNT,$(OS)),winreg:CURRENT_USER )user:$${$$BRAND_BASE_DIR/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,bootstrap):UserInstallation}/user/registrymodifications.xcu' \ + && echo 'CONFIGURATION_LAYERS=xcsxcu:$${BRAND_BASE_DIR}/$(LIBO_SHARE_FOLDER)/registry res:$${BRAND_BASE_DIR}/$(LIBO_SHARE_FOLDER)/registry $(if $(ENABLE_DCONF),dconf:* )$(if $(filter WNT,$(OS)),winreg:LOCAL_MACHINE )bundledext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):BUNDLED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini sharedext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):SHARED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini userext:$${$${BRAND_BASE_DIR}/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,louno):UNO_USER_PACKAGES_CACHE}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini $(if $(filter WNT,$(OS)),winreg:CURRENT_USER )user:!$${$$BRAND_BASE_DIR/$(LIBO_ETC_FOLDER)/$(call gb_Helper_get_rcfile,bootstrap):UserInstallation}/user/registrymodifications.xcu' \ && echo 'LO_JAVA_DIR=$${BRAND_BASE_DIR}/$(LIBO_SHARE_JAVA_FOLDER)' \ && echo 'LO_LIB_DIR=$${BRAND_BASE_DIR}/$(LIBO_LIB_FOLDER)' \ && echo 'BAK_EXTENSIONS=$${$$ORIGIN/$(call gb_Helper_get_rcfile,louno):TMP_EXTENSIONS}' \ diff --git a/scp2/source/ooo/common_brand.scp b/scp2/source/ooo/common_brand.scp index 1a30bd6..1933551 100644 --- a/scp2/source/ooo/common_brand.scp +++ b/scp2/source/ooo/common_brand.scp @@ -1119,7 +1119,7 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Ure_Bin_Dir End #if ENABLE_DCONF -#define CONFIGURATION_LAYERS_DCONF " dconf:" +#define CONFIGURATION_LAYERS_DCONF " dconf:*" #else #define CONFIGURATION_LAYERS_DCONF #endif @@ -1135,7 +1135,7 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Configuration_Layers ModuleID = gid_Module_Root_Brand; Section = "Bootstrap"; Key = "CONFIGURATION_LAYERS"; - Value = "xcsxcu:${BRAND_BASE_DIR}/" LIBO_SHARE_FOLDER "/registry res:${BRAND_BASE_DIR}/" LIBO_SHARE_FOLDER "/registry" CONFIGURATION_LAYERS_DCONF CONFIGURATION_LAYERS_WINREG " bundledext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":BUNDLED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini sharedext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":SHARED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini userext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":UNO_USER_PACKAGES_CACHE}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini " CONFIGURATION_LAYERS_WINUSERREG " user:${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" PROFILENAME(bootstrap) ":UserInstallation}/user/registrymodifications.xcu"; + Value = "xcsxcu:${BRAND_BASE_DIR}/" LIBO_SHARE_FOLDER "/registry res:${BRAND_BASE_DIR}/" LIBO_SHARE_FOLDER "/registry" CONFIGURATION_LAYERS_DCONF CONFIGURATION_LAYERS_WINREG " bundledext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":BUNDLED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini sharedext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":SHARED_EXTENSIONS_USER}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini userext:${${BRAND_BASE_DIR}/" LIBO_ETC_FOLDER "/" PROFILENAME(louno) ":UNO_USER_PACKAGES_CACHE}/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/configmgr.ini " CONFIGURATION_LAYERS_WINUSERREG " user:!${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" PROFILENAME(bootstrap) ":UserInstallation}/user/registrymodifications.xcu"; End #undef CONFIGURATION_LAYERS_DCONF #undef CONFIGURATION_LAYERS_WINREG _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits