diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /postprocess | |
parent | Initial commit. (diff) | |
download | libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | postprocess/CppunitTest_services.mk | 63 | ||||
-rw-r--r-- | postprocess/CustomTarget_check_dynamic_objects.mk | 26 | ||||
-rw-r--r-- | postprocess/CustomTarget_components.mk | 49 | ||||
-rw-r--r-- | postprocess/CustomTarget_fontconfig.mk | 30 | ||||
-rw-r--r-- | postprocess/CustomTarget_images.mk | 122 | ||||
-rw-r--r-- | postprocess/CustomTarget_registry.mk | 661 | ||||
-rw-r--r-- | postprocess/CustomTarget_signing.mk | 68 | ||||
-rw-r--r-- | postprocess/Makefile | 14 | ||||
-rw-r--r-- | postprocess/Module_postprocess.mk | 66 | ||||
-rw-r--r-- | postprocess/Package_fontconfig.mk | 18 | ||||
-rw-r--r-- | postprocess/Package_images.mk | 16 | ||||
-rw-r--r-- | postprocess/Package_registry.mk | 38 | ||||
-rw-r--r-- | postprocess/README.md | 8 | ||||
-rw-r--r-- | postprocess/Rdb_services.mk | 12 | ||||
-rw-r--r-- | postprocess/packimages/README | 16 | ||||
-rw-r--r-- | postprocess/packimages/image-sort.lst | 329 | ||||
-rw-r--r-- | postprocess/qa/services.cxx | 511 | ||||
-rw-r--r-- | postprocess/signing/no_signing.txt | 16 | ||||
-rw-r--r-- | postprocess/signing/signing.pl | 252 |
19 files changed, 2315 insertions, 0 deletions
diff --git a/postprocess/CppunitTest_services.mk b/postprocess/CppunitTest_services.mk new file mode 100644 index 000000000..cd02461fb --- /dev/null +++ b/postprocess/CppunitTest_services.mk @@ -0,0 +1,63 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,services)) + +$(eval $(call gb_CppunitTest_add_exception_objects,services, \ + postprocess/qa/services \ +)) + +$(eval $(call gb_CppunitTest_use_externals,services, \ + boost_headers \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,services, \ + comphelper \ + cppu \ + cppuhelper \ + sal \ + test \ + unotest \ + vcl \ +)) + +$(eval $(call gb_CppunitTest_use_sdk_api,services)) +$(eval $(call gb_CppunitTest_use_api,services,oovbaapi)) + +$(eval $(call gb_CppunitTest_use_ure,services)) +$(eval $(call gb_CppunitTest_use_vcl,services)) + +$(eval $(call gb_CppunitTest_use_rdb,services,services)) +ifneq ($(DISABLE_PYTHON),TRUE) +$(eval $(call gb_CppunitTest_use_python_ure,services)) + +$(eval $(call gb_CppunitTest_use_rdb,services,pyuno)) + +$(eval $(call gb_CppunitTest_use_packages,services, \ + pyuno_pythonloader_ini \ +)) + +$(call gb_CppunitTest_get_target,services): $(call gb_Pyuno_get_target,commonwizards) +endif + +$(eval $(call gb_CppunitTest_use_configuration,services)) + +ifeq ($(ENABLE_JAVA),TRUE) +$(eval $(call gb_CppunitTest_use_jars,services,\ + ScriptProviderForJava \ + smoketest \ +)) +endif + +$(eval $(call gb_CppunitTest_use_packages,services,\ + autotextshare_en-US \ + instsetoo_native_setup \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/CustomTarget_check_dynamic_objects.mk b/postprocess/CustomTarget_check_dynamic_objects.mk new file mode 100644 index 000000000..d81321cad --- /dev/null +++ b/postprocess/CustomTarget_check_dynamic_objects.mk @@ -0,0 +1,26 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/check_dynamic_objects)) + +$(eval $(call gb_CustomTarget_register_targets,postprocess/check_dynamic_objects,\ + check.done \ +)) + +$(call gb_CustomTarget_get_workdir,postprocess/check_dynamic_objects)/check.done: \ + $(call gb_Postprocess_get_target,AllLibraries) \ + $(call gb_Postprocess_get_target,AllExecutables) \ + $(call gb_Postprocess_get_target,AllPackages) + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),CHK,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),CHK) + # currently we only check ELF objects + $(SRCDIR)/bin/check-elf-dynamic-objects -p + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),CHK) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/CustomTarget_components.mk b/postprocess/CustomTarget_components.mk new file mode 100644 index 000000000..934fa8f45 --- /dev/null +++ b/postprocess/CustomTarget_components.mk @@ -0,0 +1,49 @@ +# vim: set noet sw=4 ts=4: +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/components)) + +ifeq (,$(gb_PARTIAL_BUILD)) + +postprocess_WORKDIR := $(call gb_CustomTarget_get_workdir,postprocess) + +$(call gb_CustomTarget_get_target,postprocess/components): \ + $(postprocess_WORKDIR)/services_constructors.list \ + +gb_EMPTY := +define gb_NEWLINE + +$(gb_EMPTY) +endef + +$(postprocess_WORKDIR)/services_componentfiles.list: \ + $(call gb_Rdb_get_target,services) \ + $(call gb_Rdb_get_target,ure/services) \ + $(foreach comp,$(gb_ComponentTarget__ALLCOMPONENTS),$(call gb_ComponentTarget_get_target,$(comp))) \ + | $(postprocess_WORKDIR)/.dir + $(call gb_Output_announce,$(subst $(BUILDDIR)/,,$@),$(true),GEN,2) + TEMPFILE=$(call gb_var2file,$(shell $(gb_MKTEMP)),1, \ + $(foreach comp,$(sort $(gb_ComponentTarget__ALLCOMPONENTS)),$(call gb_ComponentTarget_get_target,$(comp))$(gb_NEWLINE))) && \ + mv $$TEMPFILE $@ + +$(postprocess_WORKDIR)/services_constructors.list: \ + $(SRCDIR)/solenv/bin/constructors.py \ + $(postprocess_WORKDIR)/services_componentfiles.list \ + | $(postprocess_WORKDIR)/.dir + $(call gb_Output_announce,$(subst $(BUILDDIR)/,,$@),$(true),GEN,2) + TEMPFILE=$(shell $(gb_MKTEMP)) && \ + $(call gb_Helper_abbreviate_dirs,$(call gb_ExternalExecutable_get_command,python) $^) > $$TEMPFILE && \ + $(call gb_Helper_replace_if_different_and_touch,$${TEMPFILE},$@) + +.PHONY: $(postprocess_WORKDIR)/services_componentfiles.list + +endif # gb_PARTIAL_BUILD + +# vim: set noet sw=4: diff --git a/postprocess/CustomTarget_fontconfig.mk b/postprocess/CustomTarget_fontconfig.mk new file mode 100644 index 000000000..72ff3f3cf --- /dev/null +++ b/postprocess/CustomTarget_fontconfig.mk @@ -0,0 +1,30 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/fontconfig)) + +$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: \ + $(SRCDIR)/extras/source/truetype/symbol/fc_local.snippet \ + $(SRCDIR)/postprocess/CustomTarget_fontconfig.mk \ + | $(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/.dir + +ifneq ($(filter MORE_FONTS,$(BUILD_TYPE)),) +$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: \ + $(SRCDIR)/external/more_fonts/fc_local.snippet +endif + +$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: + printf '<?xml version="1.0"?>\n<!DOCTYPE fontconfig SYSTEM "/etc/fonts/conf.d/fonts.dtd">\n<fontconfig>\n' >$@ + cat $(SRCDIR)/extras/source/truetype/symbol/fc_local.snippet >>$@ +ifneq ($(filter MORE_FONTS,$(BUILD_TYPE)),) + cat $(SRCDIR)/external/more_fonts/fc_local.snippet >>$@ +endif + printf '</fontconfig>\n' >>$@ + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/CustomTarget_images.mk b/postprocess/CustomTarget_images.mk new file mode 100644 index 000000000..90709780a --- /dev/null +++ b/postprocess/CustomTarget_images.mk @@ -0,0 +1,122 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/images)) + +packimages_DIR := $(call gb_CustomTarget_get_workdir,postprocess/images) + +$(eval $(call gb_CustomTarget_register_targets,postprocess/images,\ + $(foreach theme,$(WITH_THEMES),images_$(theme).zip) \ + $(foreach theme,$(WITH_THEMES),$(theme)_links.txt) \ + commandimagelist.ilst \ + sourceimagelist.ilst \ + sorted.lst \ +)) + +$(packimages_DIR)/images.zip : DEFAULT_THEME := $(true) +$(packimages_DIR)/images_%.zip : DEFAULT_THEME := + +# tdf#124023 make links.txt depend on phony sorted.lst depend +# so this is evaluated every time +$(packimages_DIR)/%_links.txt : $(packimages_DIR)/sorted.lst + @if test -f "$(SRCDIR)/icon-themes/$*/links.txt"; then \ + cp "$(SRCDIR)/icon-themes/$*/links.txt" $@.tmp ; \ + else \ + THEME_FILE="$(SRCDIR)/icon-themes/$(subst _svg,,$*)/links.txt" ; \ + if test -f "$${THEME_FILE}"; then \ + sed 's/\.png/\.svg/g' "$${THEME_FILE}" > $@.tmp ; \ + fi ; \ + THEME_FILE="$(SRCDIR)/icon-themes/$(subst _dark,,$*)/links.txt" ; \ + if test -f "$${THEME_FILE}"; then \ + cp "$${THEME_FILE}" $@.tmp ; \ + fi ; \ + fi + $(call gb_Helper_replace_if_different_and_touch,$@.tmp,$@) + +$(packimages_DIR)/images_%.zip : \ + $(packimages_DIR)/sorted.lst \ + $(packimages_DIR)/commandimagelist.ilst \ + $(packimages_DIR)/sourceimagelist.ilst \ + $(SRCDIR)/wizards/source/imagelists/imagelists.ilst \ + $(packimages_DIR)/%_links.txt \ + $(call gb_Helper_get_imagelists) \ + | $(call gb_ExternalExecutable_get_dependencies,python) + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),PRL,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL) + $(call gb_Helper_abbreviate_dirs, \ + ILSTFILE=$(call gb_var2file,$(shell $(gb_MKTEMP)),100,$(filter %.ilst,$^)) && \ + $(call gb_ExternalExecutable_get_command,python) \ + $(SRCDIR)/solenv/bin/pack_images.py \ + $(if $(DEFAULT_THEME),\ + -g $(packimages_DIR) -m $(packimages_DIR) -c $(packimages_DIR),\ + -g $(SRCDIR)/icon-themes/$* -m $(SRCDIR)/icon-themes/$* -c $(SRCDIR)/icon-themes/$* \ + ) \ + -l $${ILSTFILE} \ + -L $(packimages_DIR)/$*_links.txt \ + -s $< -o $@ \ + $(if $(findstring s,$(MAKEFLAGS)),> /dev/null) && \ + rm -rf $${ILSTFILE}) + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL) + +# turn the #defines foo "resource.png" of hlst into the final ilst format +$(packimages_DIR)/sourceimagelist.ilst : \ + $(SRCDIR)/avmedia/inc/bitmaps.hlst \ + $(SRCDIR)/basctl/inc/bitmaps.hlst \ + $(SRCDIR)/connectivity/inc/bitmaps.hlst \ + $(SRCDIR)/cui/inc/bitmaps.hlst \ + $(SRCDIR)/chart2/inc/bitmaps.hlst \ + $(SRCDIR)/dbaccess/inc/bitmaps.hlst \ + $(SRCDIR)/desktop/inc/bitmaps.hlst \ + $(SRCDIR)/extensions/inc/bitmaps.hlst \ + $(SRCDIR)/formula/inc/bitmaps.hlst \ + $(SRCDIR)/fpicker/inc/bitmaps.hlst \ + $(SRCDIR)/framework/inc/bitmaps.hlst \ + $(SRCDIR)/reportdesign/inc/bitmaps.hlst \ + $(SRCDIR)/sc/inc/bitmaps.hlst \ + $(SRCDIR)/sd/inc/bitmaps.hlst \ + $(SRCDIR)/sdext/inc/bitmaps.hlst \ + $(SRCDIR)/sfx2/inc/bitmaps.hlst \ + $(SRCDIR)/svtools/inc/bitmaps.hlst \ + $(SRCDIR)/svx/inc/bitmaps.hlst \ + $(SRCDIR)/sw/inc/bitmaps.hlst \ + $(SRCDIR)/vcl/inc/bitmaps.hlst \ + $(SRCDIR)/xmlsecurity/inc/bitmaps.hlst + grep res $^ | cut -d'"' -f2 | sed "s/^/%MODULE%\//" | sed "s/%MODULE%.res/%GLOBALRES%/g" > $@.png + sed 's/\.png/\.svg/g' $@.png > $@.svg + cat $@.png $@.svg > $@ + +# commandimagelist.ilst and sorted.lst are phony to rebuild everything each time +.PHONY : $(packimages_DIR)/commandimagelist.ilst $(packimages_DIR)/sorted.lst + +$(packimages_DIR)/commandimagelist.ilst : + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),PRL,1) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL) + $(call gb_Helper_abbreviate_dirs, \ + $(FIND) $(SRCDIR)/icon-themes -name "*.png" -o -name "*.svg" | \ + grep -e '/cmd/' | sed 's#^.*/icon-themes/[^/]*##' | \ + sed "s#^#%MODULE%#" | \ + LC_ALL=C $(SORT) -u > $@.tmp && \ + $(call gb_Helper_replace_if_different_and_touch,$@.tmp,$@)) + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL) + +$(packimages_DIR)/sorted.lst : \ + $(SRCDIR)/postprocess/packimages/image-sort.lst \ + $(call gb_Postprocess_get_target,AllUIConfigs) \ + $(call gb_ExternalExecutable_get_dependencies,python) + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),PRL,1) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL) + $(call gb_Helper_abbreviate_dirs, \ + $(call gb_ExternalExecutable_get_command,python) \ + $(SRCDIR)/solenv/bin/image-sort.py \ + $(if $(filter build,$(gb_Side)),--quiet) \ + $< $(INSTROOT)/$(gb_UIConfig_INSTDIR) $@) + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk new file mode 100644 index 000000000..9e7fbb139 --- /dev/null +++ b/postprocess/CustomTarget_registry.mk @@ -0,0 +1,661 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/registry)) + +# +# Variables +# + +postprocess_XCS := $(call gb_XcsTarget_get_target,org/openoffice) +postprocess_XCU := $(call gb_XcuDataTarget_get_target,officecfg/registry/data/org/openoffice) +postprocess_MOD := $(call gb_XcuModuleTarget_get_target,officecfg/registry/data) +postprocess_DRIVERS := + +postprocess_XCDS := \ + base.xcd \ + calc.xcd \ + cjk.xcd \ + ctl.xcd \ + ctlseqcheck.xcd \ + draw.xcd \ + graphicfilter.xcd \ + impress.xcd \ + lingucomponent.xcd \ + main.xcd \ + math.xcd \ + pyuno.xcd \ + writer.xcd \ + xsltfilter.xcd + +postprocess_DEPS_base := main +postprocess_FILES_base := \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_database_filters.xcu) \ + $(call gb_XcuFilterOthersTarget_get_target,fcfg_database_others.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_database_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-base.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-base.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-base.xcu + +postprocess_DEPS_calc := main +postprocess_FILES_calc := \ + $(postprocess_XCS)/Office/UI/CalcCommands.xcs \ + $(postprocess_XCS)/Office/UI/CalcWindowState.xcs \ + $(postprocess_XCU)/Office/UI/CalcCommands.xcu \ + $(postprocess_XCU)/Office/UI/CalcWindowState.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_calc_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_calc_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-calc.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-calc.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-calc.xcu + +postprocess_DEPS_cjk := main +postprocess_FILES_cjk := \ + $(postprocess_MOD)/org/openoffice/Office/Common-cjk.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Writer-cjk.xcu + +postprocess_DEPS_ctl := main +postprocess_FILES_ctl := \ + $(postprocess_MOD)/org/openoffice/Office/Common-ctl.xcu + +postprocess_DEPS_draw := main +postprocess_FILES_draw := \ + $(postprocess_XCS)/Office/UI/DrawWindowState.xcs \ + $(postprocess_XCU)/Office/UI/DrawWindowState.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_draw_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_draw_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-draw.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-draw.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-draw.xcu + +postprocess_DEPS_graphicfilter := main +postprocess_FILES_graphicfilter := \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_drawgraphics_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_drawgraphics_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_impressgraphics_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_impressgraphics_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_calcgraphics_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_calcgraphics_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_writergraphics_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_writergraphics_types.xcu) + +postprocess_DEPS_impress := main +postprocess_FILES_impress := \ + $(postprocess_XCS)/Office/PresentationMinimizer.xcs \ + $(postprocess_XCS)/Office/PresenterScreen.xcs \ + $(postprocess_XCS)/Office/UI/Effects.xcs \ + $(postprocess_XCS)/Office/UI/ImpressWindowState.xcs \ + $(postprocess_XCU)/Office/PresentationMinimizer.xcu \ + $(postprocess_XCU)/Office/PresenterScreen.xcu \ + $(postprocess_XCU)/Office/UI/Effects.xcu \ + $(postprocess_XCU)/Office/UI/ImpressWindowState.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_impress_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_impress_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-impress.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-impress.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Jobs-impress.xcu \ + $(postprocess_MOD)/org/openoffice/Office/ProtocolHandler-impress.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-impress.xcu + +ifeq (LIBRELOGO,$(filter LIBRELOGO,$(BUILD_TYPE))) +postprocess_XCDS += librelogo.xcd +postprocess_DEPS_librelogo := main writer +postprocess_FILES_librelogo := \ + $(postprocess_MOD)/org/openoffice/Office/Addons-librelogo.xcu \ + $(postprocess_MOD)/org/openoffice/Office/UI/WriterCommands-librelogo.xcu \ + $(postprocess_MOD)/org/openoffice/Office/UI/WriterWindowState-librelogo.xcu +endif + +postprocess_DEPS_lingucomponent := main +postprocess_FILES_lingucomponent := \ + $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-hyphenator.xcu \ + $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-spellchecker.xcu \ + $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-thesaurus.xcu \ + +postprocess_FILES_main := \ + $(postprocess_XCS)/Inet.xcs \ + $(postprocess_XCS)/Interaction.xcs \ + $(postprocess_XCS)/LDAP.xcs \ + $(postprocess_XCS)/Office/Accelerators.xcs \ + $(postprocess_XCS)/Office/Addons.xcs \ + $(postprocess_XCS)/Office/BasicIDE.xcs \ + $(postprocess_XCS)/Office/Calc.xcs \ + $(postprocess_XCS)/Office/CalcAddIns.xcs \ + $(postprocess_XCS)/Office/Canvas.xcs \ + $(postprocess_XCS)/Office/Chart.xcs \ + $(postprocess_XCS)/Office/Commands.xcs \ + $(postprocess_XCS)/Office/Common.xcs \ + $(postprocess_XCS)/Office/Compatibility.xcs \ + $(postprocess_XCS)/Office/DataAccess/Drivers.xcs \ + $(postprocess_XCS)/Office/DataAccess.xcs \ + $(postprocess_XCS)/Office/Draw.xcs \ + $(postprocess_XCS)/Office/Embedding.xcs \ + $(postprocess_XCS)/Office/Events.xcs \ + $(postprocess_XCS)/Office/ExtendedColorScheme.xcs \ + $(postprocess_XCS)/Office/ExtensionDependencies.xcs \ + $(postprocess_XCS)/Office/ExtensionManager.xcs \ + $(postprocess_XCS)/Office/FormWizard.xcs \ + $(postprocess_XCS)/Office/Histories.xcs \ + $(postprocess_XCS)/Office/Impress.xcs \ + $(postprocess_XCS)/Office/Java.xcs \ + $(postprocess_XCS)/Office/Jobs.xcs \ + $(postprocess_XCS)/Office/Labels.xcs \ + $(postprocess_XCS)/Office/Linguistic.xcs \ + $(postprocess_XCS)/Office/Logging.xcs \ + $(postprocess_XCS)/Office/Math.xcs \ + $(postprocess_XCS)/Office/OptionsDialog.xcs \ + $(postprocess_XCS)/Office/Paths.xcs \ + $(postprocess_XCS)/Office/ProtocolHandler.xcs \ + $(postprocess_XCS)/Office/Recovery.xcs \ + $(postprocess_XCS)/Office/Scripting.xcs \ + $(postprocess_XCS)/Office/Security.xcs \ + $(postprocess_XCS)/Office/TableWizard.xcs \ + $(postprocess_XCS)/Office/TypeDetection.xcs \ + $(postprocess_XCS)/Office/UI/BaseWindowState.xcs \ + $(postprocess_XCS)/Office/UI/BasicIDECommands.xcs \ + $(postprocess_XCS)/Office/UI/BasicIDEWindowState.xcs \ + $(postprocess_XCS)/Office/UI/BibliographyCommands.xcs \ + $(postprocess_XCS)/Office/UI/BibliographyWindowState.xcs \ + $(postprocess_XCS)/Office/UI/Category.xcs \ + $(postprocess_XCS)/Office/UI/ChartCommands.xcs \ + $(postprocess_XCS)/Office/UI/ChartWindowState.xcs \ + $(postprocess_XCS)/Office/UI/Commands.xcs \ + $(postprocess_XCS)/Office/UI/Controller.xcs \ + $(postprocess_XCS)/Office/UI/DbBrowserWindowState.xcs \ + $(postprocess_XCS)/Office/UI/DbQueryWindowState.xcs \ + $(postprocess_XCS)/Office/UI/DbRelationWindowState.xcs \ + $(postprocess_XCS)/Office/UI/DbTableDataWindowState.xcs \ + $(postprocess_XCS)/Office/UI/DbTableWindowState.xcs \ + $(postprocess_XCS)/Office/UI/DbuCommands.xcs \ + $(postprocess_XCS)/Office/UI/DrawImpressCommands.xcs \ + $(postprocess_XCS)/Office/UI/Factories.xcs \ + $(postprocess_XCS)/Office/UI/GenericCategories.xcs \ + $(postprocess_XCS)/Office/UI/GenericCommands.xcs \ + $(postprocess_XCS)/Office/UI/GlobalSettings.xcs \ + $(postprocess_XCS)/Office/UI/Infobar.xcs \ + $(postprocess_XCS)/Office/UI/Sidebar.xcs \ + $(postprocess_XCS)/Office/UI/StartModuleCommands.xcs \ + $(postprocess_XCS)/Office/UI/StartModuleWindowState.xcs \ + $(postprocess_XCS)/Office/UI/ToolbarMode.xcs \ + $(postprocess_XCS)/Office/UI/WindowContentFactories.xcs \ + $(postprocess_XCS)/Office/UI/WindowState.xcs \ + $(postprocess_XCS)/Office/UI.xcs \ + $(postprocess_XCS)/Office/Update.xcs \ + $(postprocess_XCS)/Office/Views.xcs \ + $(postprocess_XCS)/Office/Writer.xcs \ + $(postprocess_XCS)/Office/WriterWeb.xcs \ + $(postprocess_XCS)/Setup.xcs \ + $(postprocess_XCS)/System.xcs \ + $(postprocess_XCS)/TypeDetection/Filter.xcs \ + $(postprocess_XCS)/TypeDetection/GraphicFilter.xcs \ + $(postprocess_XCS)/TypeDetection/Misc.xcs \ + $(postprocess_XCS)/TypeDetection/Types.xcs \ + $(postprocess_XCS)/TypeDetection/UISort.xcs \ + $(postprocess_XCS)/UserProfile.xcs \ + $(postprocess_XCS)/VCL.xcs \ + $(postprocess_XCS)/ucb/Configuration.xcs \ + $(postprocess_XCS)/ucb/Hierarchy.xcs \ + $(postprocess_XCS)/ucb/InteractionHandler.xcs \ + $(postprocess_XCS)/ucb/Store.xcs \ + $(postprocess_XCU)/Inet.xcu \ + $(postprocess_XCU)/Interaction.xcu \ + $(postprocess_XCU)/Office/Accelerators.xcu \ + $(postprocess_XCU)/Office/BasicIDE.xcu \ + $(postprocess_XCU)/Office/Calc.xcu \ + $(postprocess_XCU)/Office/Canvas.xcu \ + $(postprocess_XCU)/Office/Common.xcu \ + $(postprocess_XCU)/Office/Compatibility.xcu \ + $(postprocess_XCU)/Office/DataAccess.xcu \ + $(postprocess_XCU)/Office/Embedding.xcu \ + $(postprocess_XCU)/Office/ExtensionDependencies.xcu \ + $(postprocess_XCU)/Office/ExtensionManager.xcu \ + $(postprocess_XCU)/Office/FormWizard.xcu \ + $(postprocess_XCU)/Office/Histories.xcu \ + $(postprocess_XCU)/Office/Impress.xcu \ + $(postprocess_XCU)/Office/Jobs.xcu \ + $(postprocess_XCU)/Office/Logging.xcu \ + $(postprocess_XCU)/Office/Math.xcu \ + $(postprocess_XCU)/Office/Paths.xcu \ + $(postprocess_XCU)/Office/ProtocolHandler.xcu \ + $(postprocess_XCU)/Office/Scripting.xcu \ + $(postprocess_XCU)/Office/Security.xcu \ + $(postprocess_XCU)/Office/TableWizard.xcu \ + $(postprocess_XCU)/Office/UI/BaseWindowState.xcu \ + $(postprocess_XCU)/Office/UI/BasicIDECommands.xcu \ + $(postprocess_XCU)/Office/UI/BasicIDEWindowState.xcu \ + $(postprocess_XCU)/Office/UI/BibliographyCommands.xcu \ + $(postprocess_XCU)/Office/UI/ChartCommands.xcu \ + $(postprocess_XCU)/Office/UI/ChartWindowState.xcu \ + $(postprocess_XCU)/Office/UI/Controller.xcu \ + $(postprocess_XCU)/Office/UI/DbBrowserWindowState.xcu \ + $(postprocess_XCU)/Office/UI/DbQueryWindowState.xcu \ + $(postprocess_XCU)/Office/UI/DbRelationWindowState.xcu \ + $(postprocess_XCU)/Office/UI/DbTableDataWindowState.xcu \ + $(postprocess_XCU)/Office/UI/DbTableWindowState.xcu \ + $(postprocess_XCU)/Office/UI/DbuCommands.xcu \ + $(postprocess_XCU)/Office/UI/DrawImpressCommands.xcu \ + $(postprocess_XCU)/Office/UI/Factories.xcu \ + $(postprocess_XCU)/Office/UI/GenericCategories.xcu \ + $(postprocess_XCU)/Office/UI/GenericCommands.xcu \ + $(postprocess_XCU)/Office/UI/Sidebar.xcu \ + $(postprocess_XCU)/Office/UI/StartModuleWindowState.xcu \ + $(postprocess_XCU)/Office/UI/ToolbarMode.xcu \ + $(postprocess_XCU)/Office/UI.xcu \ + $(postprocess_XCU)/Office/Views.xcu \ + $(postprocess_XCU)/Office/Writer.xcu \ + $(postprocess_XCU)/Setup.xcu \ + $(postprocess_XCU)/System.xcu \ + $(postprocess_XCU)/TypeDetection/UISort.xcu \ + $(postprocess_XCU)/UserProfile.xcu \ + $(postprocess_XCU)/VCL.xcu \ + $(postprocess_XCU)/ucb/Configuration.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_base_filters.xcu) \ + $(call gb_XcuFilterOthersTarget_get_target,fcfg_base_others.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_base_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_chart_filters.xcu) \ + $(call gb_XcuFilterOthersTarget_get_target,fcfg_chart_others.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_chart_types.xcu) \ + $(call gb_XcuFilterInternalTarget_get_target,fcfg_internalgraphics_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_internalgraphics_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-chart.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-start.xcu \ + $(postprocess_MOD)/org/openoffice/TypeDetection/UISort-calc.xcu \ + $(postprocess_MOD)/org/openoffice/TypeDetection/UISort-draw.xcu \ + $(postprocess_MOD)/org/openoffice/TypeDetection/UISort-impress.xcu \ + $(postprocess_MOD)/org/openoffice/TypeDetection/UISort-math.xcu \ + $(postprocess_MOD)/org/openoffice/TypeDetection/UISort-writer.xcu + +ifeq (MACOSX,$(OS)) +postprocess_FILES_main += \ + $(postprocess_MOD)/org/openoffice/Inet-macosx.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Accelerators-macosx.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Common-macosx.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Paths-macosx.xcu + # Inet-macosx.xcu must come after Inet.xcu + +else ifeq ($(USING_X11), TRUE) +postprocess_FILES_main += \ + $(postprocess_MOD)/org/openoffice/Inet-unixdesktop.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Accelerators-unxwnt.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Common-UseOOoFileDialogs.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Common-unixdesktop.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Common-unx.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Paths-unixdesktop.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Paths-unxwnt.xcu \ + $(postprocess_MOD)/org/openoffice/UserProfile-unixdesktop.xcu \ + $(postprocess_MOD)/org/openoffice/VCL-unixdesktop.xcu + # Inet-unixdesktop.xcu must come after Inet.xcu + # VCL-unixdesktop.xcu must come after VCL.xcu +else ifeq (WNT,$(OS)) +postprocess_FILES_main += \ + $(postprocess_MOD)/org/openoffice/Inet-wnt.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Accelerators-unxwnt.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Common-wnt.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Paths-unxwnt.xcu \ + $(postprocess_MOD)/org/openoffice/ucb/Configuration-win.xcu + # Inet-wnt.xcu must come after Inet.xcu +endif + +ifneq ($(WITH_WEBDAV),) +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-webdav.xcu +endif + +ifneq ($(ENABLE_MACOSX_SANDBOX),) +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/UI/Infobar-macosxsandbox.xcu +endif + +ifneq (,$(SYSTEM_LIBEXTTEXTCAT_DATA)) +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/Paths-externallibexttextcatdata.xcu +else +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/Paths-internallibexttextcatdata.xcu +endif + +ifneq (,$(SYSTEM_LIBNUMBERTEXT_DATA)) +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/Paths-externallibnumbertextdata.xcu +else +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/Paths-internallibnumbertextdata.xcu +endif + +ifneq ($(filter POWERPC INTEL ARM HPPA GODSON M68K SPARC S390,$(CPUNAME)),) +postprocess_FILES_main += \ + $(postprocess_MOD)/org/openoffice/Office/Common-32bit.xcu +endif + +postprocess_DEPS_math := main +postprocess_FILES_math := \ + $(postprocess_XCS)/Office/UI/MathCommands.xcs \ + $(postprocess_XCS)/Office/UI/MathWindowState.xcs \ + $(postprocess_XCU)/Office/UI/MathCommands.xcu \ + $(postprocess_XCU)/Office/UI/MathWindowState.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_math_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_math_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-math.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-math.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-math.xcu + +postprocess_DEPS_pyuno := main +postprocess_FILES_pyuno := \ + $(postprocess_MOD)/org/openoffice/Office/Scripting-python.xcu + +ifeq ($(ENABLE_REPORTBUILDER),TRUE) +postprocess_XCDS += reportbuilder.xcd +postprocess_DEPS_reportbuilder := main +postprocess_FILES_reportbuilder := \ + $(postprocess_XCS)/Office/ReportDesign.xcs \ + $(postprocess_XCS)/Office/UI/DbReportWindowState.xcs \ + $(postprocess_XCS)/Office/UI/ReportCommands.xcs \ + $(postprocess_XCU)/Office/ExtendedColorScheme.xcu \ + $(postprocess_XCU)/Office/ReportDesign.xcu \ + $(postprocess_XCU)/Office/UI/DbReportWindowState.xcu \ + $(postprocess_XCU)/Office/UI/ReportCommands.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_reportbuilder_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_reportbuilder_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Setup-reportbuilder.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Accelerators-reportbuilder.xcu \ + $(postprocess_MOD)/org/openoffice/Office/DataAccess-reportbuilder.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-reportbuilder.xcu \ + $(postprocess_MOD)/org/openoffice/Office/UI/Controller-reportbuilder.xcu +endif + +postprocess_DEPS_writer := main +postprocess_FILES_writer := \ + $(postprocess_XCS)/Office/UI/WriterCommands.xcs \ + $(postprocess_XCS)/Office/UI/WriterFormWindowState.xcs \ + $(postprocess_XCS)/Office/UI/WriterGlobalWindowState.xcs \ + $(postprocess_XCS)/Office/UI/WriterReportWindowState.xcs \ + $(postprocess_XCS)/Office/UI/WriterWebWindowState.xcs \ + $(postprocess_XCS)/Office/UI/WriterWindowState.xcs \ + $(postprocess_XCS)/Office/UI/XFormsWindowState.xcs \ + $(postprocess_XCU)/Office/UI/WriterCommands.xcu \ + $(postprocess_XCU)/Office/UI/WriterFormWindowState.xcu \ + $(postprocess_XCU)/Office/UI/WriterGlobalWindowState.xcu \ + $(postprocess_XCU)/Office/UI/WriterReportWindowState.xcu \ + $(postprocess_XCU)/Office/UI/WriterWebWindowState.xcu \ + $(postprocess_XCU)/Office/UI/WriterWindowState.xcu \ + $(postprocess_XCU)/Office/UI/XFormsWindowState.xcu \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_global_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_global_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_web_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_web_types.xcu) \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_writer_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_writer_types.xcu) \ + $(postprocess_MOD)/org/openoffice/Office/Common-writer.xcu \ + $(postprocess_MOD)/org/openoffice/Office/Embedding-writer.xcu \ + $(postprocess_MOD)/org/openoffice/Setup-writer.xcu + +postprocess_DEPS_xsltfilter := main +postprocess_OPTDEPS_xsltfilter := calc writer +postprocess_FILES_xsltfilter := \ + $(call gb_XcuFilterFiltersTarget_get_target,fcfg_xslt_filters.xcu) \ + $(call gb_XcuFilterTypesTarget_get_target,fcfg_xslt_types.xcu) + +ifneq (,$(and $(USING_X11), $(ENABLE_GIO))) +postprocess_XCDS += gnome.xcd +postprocess_DEPS_gnome := main +postprocess_FILES_gnome += $(postprocess_MOD)/org/openoffice/ucb/Configuration-gio.xcu +endif + +ifeq ($(ENABLE_ONLINE_UPDATE),TRUE) +postprocess_XCDS += onlineupdate.xcd +postprocess_DEPS_onlineupdate := main +postprocess_FILES_onlineupdate := \ + $(call gb_XcuModuleTarget_get_target,extensions/source/update/check)/org/openoffice/Office/Addons-onlineupdate.xcu \ + $(call gb_XcuModuleTarget_get_target,extensions/source/update/check)/org/openoffice/Office/Jobs-onlineupdate.xcu +endif + +ifeq ($(ENABLE_OPENGL_TRANSITIONS),TRUE) +postprocess_XCDS += ogltrans.xcd +postprocess_DEPS_ogltrans := main +postprocess_FILES_ogltrans := \ + $(postprocess_MOD)/org/openoffice/Office/Impress-ogltrans.xcu +endif + +ifeq ($(ENABLE_PDFIMPORT),TRUE) +postprocess_XCDS += pdfimport.xcd +postprocess_OPTDEPS_pdfimport := calc draw impress math writer + # HACK: for all fcfg_X_types.xcu in filter/Configuration_filter.mk that + # include pdf_Portable_Document_Format (i.e., X in calc, draw, global, + # impress, math, web, writer), add optional dependencies on those XCDS that + # include those fcfg_X_types.xcu +postprocess_FILES_pdfimport := \ + $(SRCDIR)/sdext/source/pdfimport/config/pdf_import_filter.xcu \ + $(SRCDIR)/sdext/source/pdfimport/config/pdf_types.xcu +endif + +ifeq (WNT,$(OS)) +postprocess_XCDS += forcedefault.xcd +postprocess_DEPS_forcedefault := main +postprocess_FILES_forcedefault := \ + $(postprocess_MOD)/org/openoffice/Office/Linguistic-ForceDefaultLanguage.xcu +endif + +# +# All DBCONNECTIVITY handling (including OS specifics!) +# +ifneq (,$(filter DBCONNECTIVITY,$(BUILD_TYPE))) + +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/dbase)/org/openoffice/Office/DataAccess/Drivers-dbase.xcu \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/flat)/org/openoffice/Office/DataAccess/Drivers-flat.xcu \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/odbc)/org/openoffice/Office/DataAccess/Drivers-odbc.xcu +postprocess_DRIVERS += dbase flat odbc + +ifeq ($(gb_Side),host) + +postprocess_FILES_writer += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/writer)/org/openoffice/Office/DataAccess/Drivers-writer.xcu +postprocess_DRIVERS += writer + +postprocess_FILES_calc += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/calc)/org/openoffice/Office/DataAccess/Drivers-calc.xcu +postprocess_DRIVERS += calc + +ifeq ($(ENABLE_EVOAB2),TRUE) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu \ + $(postprocess_MOD)/org/openoffice/Office/DataAccess-evoab2.xcu +postprocess_DRIVERS += evoab +endif + +ifeq ($(ENABLE_JAVA),TRUE) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/hsqldb)/org/openoffice/Office/DataAccess/Drivers-hsqldb.xcu \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/jdbc)/org/openoffice/Office/DataAccess/Drivers-jdbc.xcu \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/mysql_jdbc)/org/openoffice/Office/DataAccess/Drivers-mysql_jdbc.xcu +postprocess_DRIVERS += hsqldb jdbc mysql_jdbc +endif + +ifeq ($(ENABLE_FIREBIRD_SDBC),TRUE) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/firebird)/org/openoffice/Office/DataAccess/Drivers-firebird.xcu +postprocess_DRIVERS += firebird_sdbc +endif + +ifeq ($(ENABLE_MARIADBC),TRUE) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/mysqlc)/org/openoffice/Office/DataAccess/Drivers-mysqlc.xcu +postprocess_DRIVERS += mysqlc +endif + +ifeq ($(BUILD_POSTGRESQL_SDBC),TRUE) +postprocess_XCDS += postgresql.xcd +postprocess_DEPS_postgresql := main +postprocess_FILES_postgresql := \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/postgresql)/org/openoffice/Office/DataAccess/Drivers-postgresql.xcu +postprocess_DRIVERS += postgresql +endif + +ifeq (MACOSX,$(OS)) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/macab)/org/openoffice/Office/DataAccess/Drivers-macab.xcu +postprocess_DRIVERS += macab + +else ifeq (WNT,$(OS)) +postprocess_FILES_main += \ + $(call gb_XcuModuleTarget_get_target,connectivity/registry/ado)/org/openoffice/Office/DataAccess/Drivers-ado.xcu +postprocess_DRIVERS += ado +endif + +endif # host +endif # DBCONNECTIVITY + +postprocess_DRIVERS := $(foreach driver,$(postprocess_DRIVERS),driver_$(driver)) + +# +# Targets +# + +$(call gb_CustomTarget_get_target,postprocess/registry) : \ + $(foreach target,$(postprocess_XCDS) \ + $(foreach lang,$(gb_Configuration_LANGS), \ + Langpack-$(lang).xcd \ + fcfg_langpack_$(lang).xcd \ + registry_$(lang).xcd \ + ) \ + ,$(call gb_XcdTarget_get_target,$(target))) + +# +# Dependencies +# + +define postprocess_xcd_deps +$(call gb_XcdTarget_get_target,$(1)).xcd : \ + $(call gb_CustomTarget_get_workdir,postprocess/registry)/$(1).list + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/$(1).list : \ + $(postprocess_FILES_$(1)) \ + $(SRCDIR)/postprocess/CustomTarget_registry.mk \ + | $(call gb_CustomTarget_get_workdir,postprocess/registry)/.dir + +endef +$(foreach xcd,$(postprocess_XCDS),$(eval $(call postprocess_xcd_deps,$(basename $(xcd))))) + +define postprocess_lang_deps +$(call gb_XcdTarget_get_target,Langpack-$(1).xcd) : \ + $(call gb_CustomTarget_get_workdir,postprocess/registry)/Langpack-$(1).list + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/Langpack-$(1).list : \ + $(call gb_XcuLangpackTarget_get_target,Langpack-$(1).xcu) \ + | $(call gb_CustomTarget_get_workdir,postprocess/registry)/.dir + +$(call gb_XcdTarget_get_target,fcfg_langpack_$(1).xcd) : \ + $(call gb_CustomTarget_get_workdir,postprocess/registry)/fcfg_langpack_$(1).list \ + | $(call gb_CustomTarget_get_workdir,postprocess/registry)/.dir + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/fcfg_langpack_$(1).list : \ + $(call gb_Configuration_get_target,fcfg_langpack) \ + | $(call gb_CustomTarget_get_workdir,postprocess/registry)/.dir + +$(call gb_XcdTarget_get_target,registry_$(1).xcd) : \ + $(call gb_CustomTarget_get_workdir,postprocess/registry)/registry_$(1).list + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/registry_$(1).list : \ + $(call gb_Configuration_get_target,registry) \ + $(if $(filter DBCONNECTIVITY,$(BUILD_TYPE)),\ + $(foreach driver,$(postprocess_DRIVERS),$(call gb_Configuration_get_target,$(driver))) \ + ) \ + $(if $(filter TRUE,$(ENABLE_ONLINE_UPDATE)),$(call gb_Configuration_get_target,updchk)) \ + | $(call gb_CustomTarget_get_workdir,postprocess/registry)/.dir + +endef +$(foreach lang,$(gb_Configuration_LANGS),$(eval $(call postprocess_lang_deps,$(lang)))) + +# +# Rules +# + +postprocess_main_SED := \ + -e 's,$${ABOUTBOXPRODUCTVERSION},$(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR).$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX),g' \ + -e 's,$${ABOUTBOXPRODUCTVERSIONSUFFIX},$(LIBO_VERSION_SUFFIX_SUFFIX),g' \ + -e 's,$${OOOVENDOR},$(if $(OOO_VENDOR),$(subst $(COMMA),\x2c,$(OOO_VENDOR)),The Document Foundation),g' \ + -e 's,$${PRODUCTNAME},$(PRODUCTNAME),g' \ + -e 's,$${PRODUCTVERSION},$(PRODUCTVERSION),g' \ + -e 's,$${PRODUCTEXTENSION},.$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX),g' \ + -e 's,$${STARTCENTER_ADDFEATURE_URL},https://extensions.libreoffice.org/,g' \ + -e 's,$${STARTCENTER_INFO_URL},https://www.libreoffice.org/,g' \ + -e 's,$${STARTCENTER_TEMPLREP_URL},https://extensions.libreoffice.org/template-center/,g' \ + -e 's,$${SYSTEM_LIBEXTTEXTCAT_DATA},$(SYSTEM_LIBEXTTEXTCAT_DATA),g' \ + -e 's,$${SYSTEM_LIBNUMBERTEXT_DATA},$(SYSTEM_LIBNUMBERTEXT_DATA),g' \ + -e 's,$${PRIVACY_POLICY_URL},$(PRIVACY_POLICY_URL),g' \ + +$(call gb_XcdTarget_get_target,main.xcd) \ + : $(BUILDDIR)/config_host.mk.stamp \ + | $(call gb_ExternalExecutable_get_dependencies,xsltproc) + $(call gb_Output_announce,main,$(true),XCD,3) + $(call gb_Trace_StartRange,main,XCD) + $(call gb_Helper_abbreviate_dirs, \ + mkdir -p $(dir $@) && \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet \ + $(SRCDIR)/solenv/bin/packregistry.xslt \ + $(call gb_CustomTarget_get_workdir,postprocess/registry)/main.list \ + | sed $(postprocess_main_SED) > $@ \ + ) + $(call gb_Trace_EndRange,main,XCD) + +$(call gb_XcdTarget_get_target,%.xcd) : \ + | $(call gb_ExternalExecutable_get_dependencies,xsltproc) + $(call gb_Output_announce,$*,$(true),XCD,3) + $(call gb_Trace_StartRange,$*,XCD) + $(call gb_Helper_abbreviate_dirs, \ + mkdir -p $(dir $@) && \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet \ + -o $@ $(SRCDIR)/solenv/bin/packregistry.xslt $< \ + ) + $(call gb_Trace_EndRange,$*,XCD) + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/Langpack-%.list : + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),ECH) + echo '<list><dependency file="main"/><filename>$(call gb_XcuLangpackTarget_get_target,Langpack-$*.xcu)</filename></list>' > $@ + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),ECH) + +# It can happen that localized fcfg_langpack_*.zip contains +# zero-sized org/openoffice/TypeDetection/Filter.xcu; filter them out in the +# find shell command below (see issue 110041): +$(call gb_CustomTarget_get_workdir,postprocess/registry)/fcfg_langpack_%.list : + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),AWK,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),AWK) + $(call gb_Helper_abbreviate_dirs,\ + $(FIND) $(call gb_XcuResTarget_get_target,fcfg_langpack/$*/) \ + -name *.xcu -size +0c \ + | LC_ALL=C $(SORT) \ + | $(gb_AWK) 'BEGIN{print "<list>"} \ + {print "<filename>"$$0"</filename>"} \ + END {print "</list>"}' > $@ \ + ) + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),AWK) + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/registry_%.list : + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),AWK,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),AWK) + $(call gb_Helper_abbreviate_dirs,\ + $(FIND) $(call gb_XcuResTarget_get_target,registry/$*/) \ + $(if $(filter DBCONNECTIVITY,$(BUILD_TYPE)),\ + $(foreach driver,$(postprocess_DRIVERS),\ + $(call gb_XcuResTarget_get_target,$(driver)/$*/)))\ + $(if $(filter TRUE,$(ENABLE_ONLINE_UPDATE)),\ + $(call gb_XcuResTarget_get_target,updchk/$*/))\ + -name *.xcu \ + | LC_ALL=C $(SORT) \ + | $(gb_AWK) 'BEGIN{print "<list>"} \ + {print "<filename>"$$0"</filename>"} \ + END {print "</list>"}' > $@ \ + ) + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),AWK) + +$(call gb_CustomTarget_get_workdir,postprocess/registry)/%.list : + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),ECH) + mv $(call gb_var2file,$@.tmp,70,<list> $(foreach i,$(postprocess_DEPS_$*), <dependency file='$i'/>) \ + $(foreach i,$(postprocess_OPTDEPS_$*), <dependency file='$i' optional='true'/>) \ + $(foreach i,$(postprocess_FILES_$*), <filename>$(i)</filename>) </list>) \ + $@ + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),ECH) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/CustomTarget_signing.mk b/postprocess/CustomTarget_signing.mk new file mode 100644 index 000000000..6fdd4950f --- /dev/null +++ b/postprocess/CustomTarget_signing.mk @@ -0,0 +1,68 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CustomTarget_CustomTarget,postprocess/signing)) + + +$(eval $(call gb_CustomTarget_register_targets,postprocess/signing,\ + signing.done \ +)) + +# PFXFILE and PFXPASSWORD should be set in environment +TIMESTAMPURL ?= "http://timestamp.globalsign.com/scripts/timestamp.dll" + +$(call gb_CustomTarget_get_workdir,postprocess/signing)/signing.done: \ + $(SRCDIR)/postprocess/signing/signing.pl \ + $(SRCDIR)/postprocess/signing/no_signing.txt \ + $(call gb_Postprocess_get_target,AllLibraries) \ + $(call gb_Postprocess_get_target,AllExecutables) \ + $(call gb_Postprocess_get_target,AllModuleTests) \ + $(call gb_Postprocess_get_target,AllModuleSlowtests) + +$(call gb_CustomTarget_get_workdir,postprocess/signing)/signing.done: + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),PRL,2) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL) +ifeq ($(COM),MSC) +ifneq ($(ENABLE_DBGUTIL),TRUE) + EXCLUDELIST=$(shell $(gb_MKTEMP)) && \ + cat $(SRCDIR)/postprocess/signing/no_signing.txt > $$EXCLUDELIST && \ + echo "$(foreach lib,$(gb_MERGEDLIBS),$(call gb_Library_get_filename,$(lib)))" | tr ' ' '\n' >> $$EXCLUDELIST && \ + $(if $(BUILD_X64),chmod u+w $(foreach lib,$(MSVC_DLLS),$(INSTDIR)/program/shlxthdl/$(lib)) &&) \ + $(PERL) $(SRCDIR)/postprocess/signing/signing.pl \ + -e $$EXCLUDELIST \ + -l $(subst .done,_log.txt,$@) \ + $(if $(verbose),-v) \ + $(if $(PFXFILE),-f $(PFXFILE)) \ + $(if $(PFXPASSWORD),-p $(PFXPASSWORD)) \ + $(if $(TIMESTAMPURL),-t $(TIMESTAMPURL)) \ + $(INSTDIR)/URE/bin/*.dll \ + $(INSTDIR)/URE/bin/*.exe \ + $(INSTDIR)/program/*.dll \ + $(INSTDIR)/program/*.exe \ + $(INSTDIR)/program/*.com \ + $(INSTDIR)/program/soffice.bin \ + $(INSTDIR)/program/unopkg.bin \ + $(INSTDIR)/program/pyuno.pyd \ + $(INSTDIR)/$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/bin/*.exe \ + $(INSTDIR)/$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/*.dll \ + $(INSTDIR)/$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/*.pyd \ + $(INSTDIR)/$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/distutils/command/*.exe \ + $(INSTDIR)/program/shlxthdl/*.dll \ + $(INSTDIR)/sdk/cli/*.dll \ + $(INSTDIR)/sdk/bin/*.exe \ + && rm $$EXCLUDELIST && touch $@ +else + @echo "Doing nothing on non product builds ..." +endif +else + @echo "Nothing to do, signing is Windows (MSC) only." +endif + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/Makefile b/postprocess/Makefile new file mode 100644 index 000000000..0997e6284 --- /dev/null +++ b/postprocess/Makefile @@ -0,0 +1,14 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/Module_postprocess.mk b/postprocess/Module_postprocess.mk new file mode 100644 index 000000000..0fbede6a9 --- /dev/null +++ b/postprocess/Module_postprocess.mk @@ -0,0 +1,66 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Module_Module,postprocess)) + +# UGLY: postprocess_XCDS variable from CustomTarget_registry +# is reused in Package_registry! + +$(eval $(call gb_Module_add_targets,postprocess,\ + $(if $(ENABLE_CUSTOMTARGET_COMPONENTS),CustomTarget_components) \ + CustomTarget_registry \ + Rdb_services \ +)) +ifeq ($(gb_Side),host) +$(eval $(call gb_Module_add_targets,postprocess,\ + CustomTarget_images \ + Package_images \ +)) +endif + +$(eval $(call gb_Module_add_l10n_targets,postprocess,\ + Package_registry \ +)) + +ifeq ($(WINDOWS_BUILD_SIGNING),TRUE) +$(eval $(call gb_Module_add_targets,postprocess,\ + CustomTarget_signing \ +)) +endif + +# For configurations that use fontconfig (cf. inclusion of +# vcl/unx/generic/fontmanager/fontconfig.cxx in Library_vcl), add +# instdir/share/fonts/truetype/fc_local.conf when it shall +# contain content from at least one of external/more_fonts/fc_local.snippet +# (conditional on MORE_FONTS in BUILD_TYPE) and +# extras/source/truetype/symbol/fc_local.snippet (unconditional): +ifneq ($(USING_X11)$(DISABLE_GUI)$(filter ANDROID EMSCRIPTEN,$(OS)),) +$(eval $(call gb_Module_add_targets,postprocess, \ + CustomTarget_fontconfig \ + Package_fontconfig \ +)) +endif + +ifeq ($(OS),LINUX) +ifneq ($(PKGFORMAT),) +$(eval $(call gb_Module_add_check_targets,postprocess,\ + CustomTarget_check_dynamic_objects \ +)) +endif +endif + +# Implementation com.sun.star.xml.security.SEInitializer_Gpg +# does not provide a constructor or factory in case of MPLv2 subset +ifneq ($(MPL_SUBSET),TRUE) +$(eval $(call gb_Module_add_check_targets,postprocess,\ + CppunitTest_services \ +)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/Package_fontconfig.mk b/postprocess/Package_fontconfig.mk new file mode 100644 index 000000000..37f096e50 --- /dev/null +++ b/postprocess/Package_fontconfig.mk @@ -0,0 +1,18 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Package_Package,postprocess_fontconfig,$(call gb_CustomTarget_get_workdir,postprocess/fontconfig))) + +$(eval $(call gb_Package_add_files,postprocess_fontconfig,$(LIBO_SHARE_FOLDER)/fonts/truetype, \ + fc_local.conf \ +)) + +$(eval $(call gb_Package_use_custom_target,postprocess_fontconfig,postprocess/fontconfig)) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/Package_images.mk b/postprocess/Package_images.mk new file mode 100644 index 000000000..54cb84ead --- /dev/null +++ b/postprocess/Package_images.mk @@ -0,0 +1,16 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Package_Package,postprocess_images,$(call gb_CustomTarget_get_workdir,postprocess/images))) + +$(eval $(call gb_Package_add_files,postprocess_images,$(LIBO_SHARE_FOLDER)/config,\ + $(foreach theme,$(WITH_THEMES),images_$(theme).zip) \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/Package_registry.mk b/postprocess/Package_registry.mk new file mode 100644 index 000000000..2332e1bfe --- /dev/null +++ b/postprocess/Package_registry.mk @@ -0,0 +1,38 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Package_Package,postprocess_registry,$(patsubst %/,%,$(call gb_XcdTarget_get_target,)))) + +$(eval $(call gb_Package_add_files,postprocess_registry,$(LIBO_SHARE_FOLDER)/registry,\ + $(postprocess_XCDS) \ + $(foreach lang,$(gb_Configuration_LANGS), \ + Langpack-$(lang).xcd \ + ) \ +)) + +$(eval $(foreach lang,$(gb_CJK_LANGS),\ + $(call gb_Package_add_file,postprocess_registry,$(LIBO_SHARE_FOLDER)/registry/cjk_$(lang).xcd,cjk.xcd) \ +)) + +$(eval $(foreach lang,$(gb_CTL_LANGS),\ + $(call gb_Package_add_file,postprocess_registry,$(LIBO_SHARE_FOLDER)/registry/ctl_$(lang).xcd,ctl.xcd) \ +)) + +$(eval $(foreach lang,$(gb_CTLSEQCHECK_LANGS),\ + $(call gb_Package_add_file,postprocess_registry,$(LIBO_SHARE_FOLDER)/registry/ctlseqcheck_$(lang).xcd,ctlseqcheck.xcd) \ +)) + +$(eval $(call gb_Package_add_files,postprocess_registry,$(LIBO_SHARE_FOLDER)/registry/res,\ + $(foreach lang,$(gb_Configuration_LANGS), \ + fcfg_langpack_$(lang).xcd \ + registry_$(lang).xcd \ + ) \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/README.md b/postprocess/README.md new file mode 100644 index 000000000..aa642247e --- /dev/null +++ b/postprocess/README.md @@ -0,0 +1,8 @@ +# Postprocessing and Checking + +Postprocessing and checking of files delivered by other modules. + +This module has to be the last one built before creating install sets +in module `instset_native`. Thus it ties together all the dependencies +of all the other de-coupled modules. See the first line of +`postprocess/prj/build.lst` for that. diff --git a/postprocess/Rdb_services.mk b/postprocess/Rdb_services.mk new file mode 100644 index 000000000..6814fc4a1 --- /dev/null +++ b/postprocess/Rdb_services.mk @@ -0,0 +1,12 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Rdb_Rdb_install,services)) + +# vim: set noet sw=4 ts=4: diff --git a/postprocess/packimages/README b/postprocess/packimages/README new file mode 100644 index 000000000..95d5f3daa --- /dev/null +++ b/postprocess/packimages/README @@ -0,0 +1,16 @@ +Packs used images in sorted order into theme .zip files + +The essence of this module is contained within [[solenv/bin/packimages.pl]]. +This script takes several sources of information: + +* the list of images used in every .src file that is compiled +* the configuration XML describing every command that is used +* [[packimages/pack/image-sort.lst]] which provides a profile based + ordering of images. + +It then tries to pack the images together into the .zip file into an +order that matches / is similar to that which we want at run-time, ie. +an entire toolbar's images should (ideally) be next to each other in a +nice linear run, to reduce LibreOffice's working set, and improve +startup performance: we require all these images to get paged in on +start. diff --git a/postprocess/packimages/image-sort.lst b/postprocess/packimages/image-sort.lst new file mode 100644 index 000000000..d0b226c2b --- /dev/null +++ b/postprocess/packimages/image-sort.lst @@ -0,0 +1,329 @@ +# +# This file exists to help improve the ordering of +# icons inside the OO.o theme / images.zip file. +# +# Sections are processed together, and are delimited +# by '-- <tag> [small]' a 'group' tag denotes equal +# importance: icons must be interleaved, 'ordered' +# denotes a simple best-fit order. 'literal' denotes +# a list of explicit image loads +# + +res/mainapp_16.png +res/mainapp_32.png +sw/res/punkt.png +sw/res/punkt_h.png + +-- literal + +# 'standard' toolbars +modules/swriter/toolbar/standardbar.xml +modules/scalc/toolbar/standardbar.xml +modules/simpress/toolbar/standardbar.xml +modules/sdraw/toolbar/standardbar.xml +-- group + +# default / startup toolbars +modules/swriter/toolbar/textobjectbar.xml +modules/scalc/toolbar/formatobjectbar.xml +-- group + +modules/simpress/toolbar/drawingobjectbar.xml +modules/sdraw/toolbar/drawingobjectbar.xml +-- group + +modules/simpress/toolbar/toolbar.xml +modules/sdraw/toolbar/toolbar.xml +-- group + +modules/simpress/toolbar/commontaskbar.xml +-- ordered + +svtools/res/prnfont.png +svtools/res/bmpfont.png +svtools/res/scalfont.png +svx/res/signet_11x16.png +svx/res/caution_11x16.png +svx/res/notcertificate_16.png +res/sc10223.png +res/sc10224.png +res/sx03139.png +-- literal + +# default / startup menus: +modules/swriter/menubar/menubar.xml +modules/scalc/menubar/menubar.xml +modules/simpress/menubar/menubar.xml +modules/sdraw/menubar/menubar.xml +-- group small + +# +# complete list of other toolbars / menus +# FIXME: should auto-generate this. +# +modules/BasicIDE/toolbar/fullscreenbar.xml +modules/BasicIDE/toolbar/insertcontrolsbar.xml +modules/BasicIDE/toolbar/formcontrolsbar.xml +modules/BasicIDE/toolbar/macrobar.xml +modules/BasicIDE/toolbar/standardbar.xml +modules/dbapp/toolbar/formobjectbar.xml +modules/dbapp/toolbar/queryobjectbar.xml +modules/dbapp/toolbar/reportobjectbar.xml +modules/dbapp/toolbar/tableobjectbar.xml +modules/dbapp/toolbar/toolbar.xml +#modules/dbbrowser/toolbar/browserobjectbar.xml +#modules/dbbrowser/toolbar/copyobjectbar.xml +modules/dbbrowser/toolbar/toolbar.xml +modules/dbquery/toolbar/designobjectbar.xml +modules/dbquery/toolbar/sqlobjectbar.xml +modules/dbquery/toolbar/toolbar.xml +modules/dbrelation/toolbar/toolbar.xml +modules/dbtable/toolbar/toolbar.xml +modules/schart/toolbar/arrowshapes.xml +modules/schart/toolbar/basicshapes.xml +modules/schart/toolbar/calloutshapes.xml +modules/schart/toolbar/flowchartshapes.xml +modules/schart/toolbar/standardbar.xml +modules/schart/toolbar/starshapes.xml +modules/schart/toolbar/symbolshapes.xml +modules/schart/toolbar/toolbar.xml +modules/scalc/toolbar/alignmentbar.xml +modules/scalc/toolbar/arrowshapes.xml +modules/scalc/toolbar/basicshapes.xml +modules/scalc/toolbar/calloutshapes.xml +modules/scalc/toolbar/colorbar.xml +modules/scalc/toolbar/datastreams.xml +modules/scalc/toolbar/drawbar.xml +modules/scalc/toolbar/drawobjectbar.xml +modules/scalc/toolbar/extrusionobjectbar.xml +modules/scalc/toolbar/flowchartshapes.xml +modules/scalc/toolbar/fontworkobjectbar.xml +modules/scalc/toolbar/fontworkshapetype.xml +modules/scalc/toolbar/formatobjectbar.xml +modules/scalc/toolbar/formcontrols.xml +modules/scalc/toolbar/formdesign.xml +modules/scalc/toolbar/formsfilterbar.xml +modules/scalc/toolbar/formsnavigationbar.xml +modules/scalc/toolbar/formtextobjectbar.xml +modules/scalc/toolbar/fullscreenbar.xml +modules/scalc/toolbar/graffilterbar.xml +modules/scalc/toolbar/graphicobjectbar.xml +modules/scalc/toolbar/insertbar.xml +modules/scalc/toolbar/insertcellsbar.xml +modules/scalc/toolbar/mediaobjectbar.xml +modules/scalc/toolbar/previewbar.xml +modules/scalc/toolbar/standardbar.xml +modules/scalc/toolbar/starshapes.xml +modules/scalc/toolbar/symbolshapes.xml +modules/scalc/toolbar/textobjectbar.xml +modules/scalc/toolbar/toolbar.xml +modules/scalc/toolbar/viewerbar.xml +modules/sdraw/toolbar/3dobjectsbar.xml +modules/sdraw/toolbar/alignmentbar.xml +modules/sdraw/toolbar/arrowsbar.xml +modules/sdraw/toolbar/arrowshapes.xml +modules/sdraw/toolbar/basicshapes.xml +modules/sdraw/toolbar/bezierobjectbar.xml +modules/sdraw/toolbar/calloutshapes.xml +modules/sdraw/toolbar/choosemodebar.xml +modules/sdraw/toolbar/colorbar.xml +modules/sdraw/toolbar/connectorsbar.xml +modules/sdraw/toolbar/drawingobjectbar.xml +modules/sdraw/toolbar/ellipsesbar.xml +modules/sdraw/toolbar/extrusionobjectbar.xml +modules/sdraw/toolbar/flowchartshapes.xml +modules/sdraw/toolbar/fontworkobjectbar.xml +modules/sdraw/toolbar/fontworkshapetype.xml +modules/sdraw/toolbar/formcontrols.xml +modules/sdraw/toolbar/formdesign.xml +modules/sdraw/toolbar/formsfilterbar.xml +modules/sdraw/toolbar/formsnavigationbar.xml +modules/sdraw/toolbar/formtextobjectbar.xml +modules/sdraw/toolbar/fullscreenbar.xml +modules/sdraw/toolbar/gluepointsobjectbar.xml +modules/sdraw/toolbar/graffilterbar.xml +modules/sdraw/toolbar/graphicobjectbar.xml +modules/sdraw/toolbar/insertbar.xml +modules/sdraw/toolbar/linesbar.xml +modules/sdraw/toolbar/masterviewtoolbar.xml +modules/sdraw/toolbar/mediaobjectbar.xml +modules/sdraw/toolbar/optionsbar.xml +modules/sdraw/toolbar/positionbar.xml +modules/sdraw/toolbar/standardbar.xml +modules/sdraw/toolbar/starshapes.xml +modules/sdraw/toolbar/symbolshapes.xml +modules/sdraw/toolbar/textbar.xml +modules/sdraw/toolbar/textobjectbar.xml +modules/sdraw/toolbar/toolbar.xml +modules/sdraw/toolbar/viewerbar.xml +modules/sdraw/toolbar/zoombar.xml +modules/simpress/toolbar/3dobjectsbar.xml +modules/simpress/toolbar/alignmentbar.xml +modules/simpress/toolbar/arrowsbar.xml +modules/simpress/toolbar/arrowshapes.xml +modules/simpress/toolbar/basicshapes.xml +modules/simpress/toolbar/bezierobjectbar.xml +modules/simpress/toolbar/calloutshapes.xml +modules/simpress/toolbar/choosemodebar.xml +modules/simpress/toolbar/colorbar.xml +modules/simpress/toolbar/commontaskbar.xml +modules/simpress/toolbar/connectorsbar.xml +modules/simpress/toolbar/drawingobjectbar.xml +modules/simpress/toolbar/ellipsesbar.xml +modules/simpress/toolbar/extrusionobjectbar.xml +modules/simpress/toolbar/flowchartshapes.xml +modules/simpress/toolbar/fontworkobjectbar.xml +modules/simpress/toolbar/fontworkshapetype.xml +modules/simpress/toolbar/formcontrols.xml +modules/simpress/toolbar/formdesign.xml +modules/simpress/toolbar/formsfilterbar.xml +modules/simpress/toolbar/formsnavigationbar.xml +modules/simpress/toolbar/formtextobjectbar.xml +modules/simpress/toolbar/fullscreenbar.xml +modules/simpress/toolbar/gluepointsobjectbar.xml +modules/simpress/toolbar/graffilterbar.xml +modules/simpress/toolbar/graphicobjectbar.xml +modules/simpress/toolbar/insertbar.xml +modules/simpress/toolbar/linesbar.xml +modules/simpress/toolbar/masterviewtoolbar.xml +modules/simpress/toolbar/mediaobjectbar.xml +modules/simpress/toolbar/optionsbar.xml +modules/simpress/toolbar/outlinetoolbar.xml +modules/simpress/toolbar/positionbar.xml +modules/simpress/toolbar/slideviewobjectbar.xml +modules/simpress/toolbar/slideviewtoolbar.xml +modules/simpress/toolbar/standardbar.xml +modules/simpress/toolbar/starshapes.xml +modules/simpress/toolbar/symbolshapes.xml +modules/simpress/toolbar/textbar.xml +modules/simpress/toolbar/textobjectbar.xml +modules/simpress/toolbar/toolbar.xml +modules/simpress/toolbar/viewerbar.xml +modules/simpress/toolbar/zoombar.xml +modules/smath/toolbar/fullscreenbar.xml +modules/smath/toolbar/standardbar.xml +modules/smath/toolbar/toolbar.xml +modules/sglobal/toolbar/alignmentbar.xml +modules/sglobal/toolbar/arrowshapes.xml +modules/sglobal/toolbar/basicshapes.xml +modules/sglobal/toolbar/bezierobjectbar.xml +modules/sglobal/toolbar/calloutshapes.xml +modules/sglobal/toolbar/colorbar.xml +modules/sglobal/toolbar/drawbar.xml +modules/sglobal/toolbar/drawingobjectbar.xml +modules/sglobal/toolbar/drawtextobjectbar.xml +modules/sglobal/toolbar/extrusionobjectbar.xml +modules/sglobal/toolbar/flowchartshapes.xml +modules/sglobal/toolbar/fontworkobjectbar.xml +modules/sglobal/toolbar/fontworkshapetype.xml +modules/sglobal/toolbar/formcontrols.xml +modules/sglobal/toolbar/formdesign.xml +modules/sglobal/toolbar/formsfilterbar.xml +modules/sglobal/toolbar/formsnavigationbar.xml +modules/sglobal/toolbar/formtextobjectbar.xml +modules/sglobal/toolbar/frameobjectbar.xml +modules/sglobal/toolbar/fullscreenbar.xml +modules/sglobal/toolbar/graffilterbar.xml +modules/sglobal/toolbar/graphicobjectbar.xml +modules/sglobal/toolbar/insertbar.xml +modules/sglobal/toolbar/mediaobjectbar.xml +modules/sglobal/toolbar/numobjectbar.xml +modules/sglobal/toolbar/oleobjectbar.xml +modules/sglobal/toolbar/optimizetablebar.xml +modules/sglobal/toolbar/previewobjectbar.xml +modules/sglobal/toolbar/standardbar.xml +modules/sglobal/toolbar/starshapes.xml +modules/sglobal/toolbar/symbolshapes.xml +modules/sglobal/toolbar/tableobjectbar.xml +modules/sglobal/toolbar/textobjectbar.xml +modules/sglobal/toolbar/toolbar.xml +modules/sglobal/toolbar/viewerbar.xml +modules/sweb/toolbar/arrowshapes.xml +modules/sweb/toolbar/basicshapes.xml +modules/sweb/toolbar/bezierobjectbar.xml +modules/sweb/toolbar/calloutshapes.xml +modules/sweb/toolbar/colorbar.xml +modules/sweb/toolbar/drawingobjectbar.xml +modules/sweb/toolbar/drawtextobjectbar.xml +modules/sweb/toolbar/extrusionobjectbar.xml +modules/sweb/toolbar/flowchartshapes.xml +modules/sweb/toolbar/fontworkobjectbar.xml +modules/sweb/toolbar/fontworkshapetype.xml +modules/sweb/toolbar/formcontrols.xml +modules/sweb/toolbar/formdesign.xml +modules/sweb/toolbar/formsfilterbar.xml +modules/sweb/toolbar/formsnavigationbar.xml +modules/sweb/toolbar/formtextobjectbar.xml +modules/sweb/toolbar/frameobjectbar.xml +modules/sweb/toolbar/fullscreenbar.xml +modules/sweb/toolbar/graffilterbar.xml +modules/sweb/toolbar/graphicobjectbar.xml +modules/sweb/toolbar/insertbar.xml +modules/sweb/toolbar/mediaobjectbar.xml +modules/sweb/toolbar/numobjectbar.xml +modules/sweb/toolbar/oleobjectbar.xml +modules/sweb/toolbar/optimizetablebar.xml +modules/sweb/toolbar/previewobjectbar.xml +modules/sweb/toolbar/standardbar.xml +modules/sweb/toolbar/starshapes.xml +modules/sweb/toolbar/symbolshapes.xml +modules/sweb/toolbar/tableobjectbar.xml +modules/sweb/toolbar/textobjectbar.xml +modules/sweb/toolbar/toolbar.xml +modules/sweb/toolbar/viewerbar.xml +modules/swriter/toolbar/alignmentbar.xml +modules/swriter/toolbar/arrowshapes.xml +modules/swriter/toolbar/basicshapes.xml +modules/swriter/toolbar/bezierobjectbar.xml +modules/swriter/toolbar/calloutshapes.xml +modules/swriter/toolbar/colorbar.xml +modules/swriter/toolbar/drawbar.xml +modules/swriter/toolbar/drawingobjectbar.xml +modules/swriter/toolbar/drawtextobjectbar.xml +modules/swriter/toolbar/extrusionobjectbar.xml +modules/swriter/toolbar/flowchartshapes.xml +modules/swriter/toolbar/fontworkobjectbar.xml +modules/swriter/toolbar/fontworkshapetype.xml +modules/swriter/toolbar/formcontrols.xml +modules/swriter/toolbar/formdesign.xml +modules/swriter/toolbar/formsfilterbar.xml +modules/swriter/toolbar/formsnavigationbar.xml +modules/swriter/toolbar/formtextobjectbar.xml +modules/swriter/toolbar/frameobjectbar.xml +modules/swriter/toolbar/fullscreenbar.xml +modules/swriter/toolbar/graffilterbar.xml +modules/swriter/toolbar/graphicobjectbar.xml +modules/swriter/toolbar/insertbar.xml +modules/swriter/toolbar/mediaobjectbar.xml +modules/swriter/toolbar/navigationobjectbar.xml +modules/swriter/toolbar/numobjectbar.xml +modules/swriter/toolbar/oleobjectbar.xml +modules/swriter/toolbar/optimizetablebar.xml +modules/swriter/toolbar/previewobjectbar.xml +modules/swriter/toolbar/standardbar.xml +modules/swriter/toolbar/starshapes.xml +modules/swriter/toolbar/symbolshapes.xml +modules/swriter/toolbar/tableobjectbar.xml +modules/swriter/toolbar/textobjectbar.xml +modules/swriter/toolbar/toolbar.xml +modules/swriter/toolbar/viewerbar.xml + +-- ordered + +modules/BasicIDE/menubar/menubar.xml +modules/dbapp/menubar/menubar.xml +#modules/dbbrowser/menubar/menubar.xml +modules/dbquery/menubar/menubar.xml +modules/dbrelation/menubar/menubar.xml +modules/dbtable/menubar/menubar.xml +modules/StartModule/menubar/menubar.xml +modules/schart/menubar/menubar.xml +modules/scalc/menubar/menubar.xml +modules/sdraw/menubar/menubar.xml +modules/simpress/menubar/menubar.xml +modules/smath/menubar/menubar.xml +modules/sglobal/menubar/menubar.xml +modules/sweb/menubar/menubar.xml +modules/swriter/menubar/menubar.xml + +-- ordered small diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx new file mode 100644 index 000000000..94bd76031 --- /dev/null +++ b/postprocess/qa/services.cxx @@ -0,0 +1,511 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// Try to instantiate as many implementations as possible. Finds all +// implementations reachable via the service manager. If a given implementation +// is the only implementor of some service that has a zero-parameter +// constructor, instantiate the implementation through that service name. If a +// given implementation does not offer any such constructors (because it does not +// support any single-interface--based service, or because for each relevant +// service there are multiple implementations or it does not have an appropriate +// constructor) but does support at least one accumulation-based service, then +// instantiate it through its implementation name (a heuristic to identify +// instantiable implementations that appears to work well). + +#include <sal/config.h> + +#include <algorithm> +#include <cassert> +#include <iostream> +#include <map> +#include <set> +#include <string_view> +#include <utility> +#include <vector> + +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/XPropertySetInfo.hpp> +#include <com/sun/star/container/XContentEnumerationAccess.hpp> +#include <com/sun/star/container/XHierarchicalNameAccess.hpp> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/reflection/XServiceConstructorDescription.hpp> +#include <com/sun/star/reflection/XServiceTypeDescription2.hpp> +#include <com/sun/star/frame/XDesktop.hpp> +#include <comphelper/sequence.hxx> +#include <cppuhelper/exc_hlp.hxx> +#include <rtl/strbuf.hxx> +#include <test/bootstrapfixture.hxx> +#include <vcl/svapp.hxx> + +namespace { + +OString msg(std::u16string_view string) { + return OUStringToOString(string, osl_getThreadTextEncoding()); +} + +OString msg(css::uno::Sequence<OUString> const & strings) { + OStringBuffer buf("{"); + for (sal_Int32 i = 0; i != strings.getLength(); ++i) { + if (i != 0) { + buf.append(", "); + } + buf.append('"'); + buf.append(msg(strings[i])); + buf.append('"'); + } + buf.append('}'); + return buf.makeStringAndClear(); +} + +bool unique(css::uno::Sequence<OUString> const & strings) { + // Assumes small sequences for which quadratic algorithm is acceptable: + for (sal_Int32 i = 0; i < strings.getLength() - 1; ++i) { + for (sal_Int32 j = i + 1; j != strings.getLength(); ++j) { + if (strings[j] == strings[i]) { + return false; + } + } + } + return true; +} + +bool contains( + css::uno::Sequence<OUString> const & strings, OUString const & string) +{ + return comphelper::findValue(strings, string) != -1; +} + +bool contains( + css::uno::Sequence<OUString> const & strings1, + css::uno::Sequence<OUString> const & strings2) +{ + // Assumes small sequences for which quadratic algorithm is acceptable: + return std::all_of(strings2.begin(), strings2.end(), + [&strings1](const OUString& rStr) { return contains(strings1, rStr); }); +} + +void addService( + css::uno::Reference<css::reflection::XServiceTypeDescription> const & service, + std::set<css::uno::Reference<css::reflection::XServiceTypeDescription>> * allServices) +{ + assert(allServices != nullptr); + if (!allServices->insert(service).second) { + return; + } + const auto aMandatoryServices = service->getMandatoryServices(); + for (auto const & serv : aMandatoryServices) { + addService(serv, allServices); + } +} + +class Test: public test::BootstrapFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); + +private: + void createInstance( + css::uno::Reference<css::container::XHierarchicalNameAccess> const & typeManager, + OUString const & name, bool withArguments, + OUString const & implementationName, + css::uno::Sequence<OUString> const & serviceNames, + std::vector<css::uno::Reference<css::lang::XComponent>> * components); +}; + +void Test::test() { + // On Windows, denylist the com.sun.star.comp.report.OReportDefinition + // implementation (reportdesign::OReportDefinition in + // reportdesign/source/core/api/ReportDefinition.cxx), as it spawns a thread + // that forever blocks in SendMessageW when no VCL event loop is running + // (reportdesign::<anon>::FactoryLoader::execute -> + // framework::Desktop::findFrame -> framework::TaskCreator::createTask -> + // <anon>::TaskCreatorService::createInstanceWithArguments -> + // <anon>::TaskCreatorService::impls_createContainerWindow -> + // <anon>::VCLXToolkit::createWindow -> + // <anon>::VCLXToolkit::ImplCreateWindow -> + // <anon>::VCLXToolkit::ImplCreateWindow -> WorkWindow::WorkWindow -> + // WorkWindow::ImplInit -> ImplBorderWindow::ImplBorderWindow -> + // ImplBorderWindow::ImplInit -> Window::ImplInit -> + // WinSalInstance::CreateFrame -> ImplSendMessage -> SendMessageW): + std::vector<OUString> denylist; + denylist.emplace_back("com.sun.star.comp.report.OReportDefinition"); + + // <https://bugs.documentfoundation.org/show_bug.cgi?id=89343> + // "~SwXMailMerge() goes into endless SwCache::Check()": + denylist.emplace_back("SwXMailMerge"); + + css::uno::Reference<css::container::XContentEnumerationAccess> enumAcc( + m_xContext->getServiceManager(), css::uno::UNO_QUERY_THROW); + css::uno::Reference<css::container::XHierarchicalNameAccess> typeMgr( + m_xContext->getValueByName( + "/singletons/com.sun.star.reflection.theTypeDescriptionManager"), + css::uno::UNO_QUERY_THROW); + const css::uno::Sequence<OUString> serviceNames( + m_xContext->getServiceManager()->getAvailableServiceNames()); + struct Constructor { + Constructor( + OUString const & theServiceName, bool theDefaultConstructor): + serviceName(theServiceName), + defaultConstructor(theDefaultConstructor) + {} + OUString serviceName; + bool defaultConstructor; + }; + struct Implementation { + Implementation( + css::uno::Reference<css::lang::XServiceInfo> const & theFactory, + css::uno::Sequence<OUString> const & theServiceNames): + factory(theFactory), serviceNames(theServiceNames), + accumulationBased(false) + {} + css::uno::Reference<css::lang::XServiceInfo> const factory; + css::uno::Sequence<OUString> const serviceNames; + std::vector<Constructor> constructors; + bool accumulationBased; + }; + std::map<OUString, Implementation> impls; + for (const auto& rServiceName : serviceNames) { + css::uno::Reference<css::container::XEnumeration> serviceImpls1( + enumAcc->createContentEnumeration(rServiceName), + css::uno::UNO_SET_THROW); + std::vector<css::uno::Reference<css::lang::XServiceInfo>> serviceImpls2; + while (serviceImpls1->hasMoreElements()) { + serviceImpls2.emplace_back( + serviceImpls1->nextElement(), css::uno::UNO_QUERY_THROW); + } + css::uno::Reference<css::reflection::XServiceTypeDescription2> desc; + if (typeMgr->hasByHierarchicalName(rServiceName)) { + desc.set( + typeMgr->getByHierarchicalName(rServiceName), + css::uno::UNO_QUERY_THROW); + } + if (serviceImpls2.empty()) { + if (desc.is()) { + CPPUNIT_ASSERT_MESSAGE( + (OString( + "no implementations of single-interface--based \"" + + msg(rServiceName) + "\"") + .getStr()), + !desc->isSingleInterfaceBased()); + std::cout + << "accumulation-based service \"" << rServiceName + << "\" without implementations\n"; + } else { + std::cout + << "fantasy service name \"" << rServiceName + << "\" without implementations\n"; + } + } else { + for (auto const & j: serviceImpls2) { + OUString name(j->getImplementationName()); + auto k = impls.find(name); + if (k == impls.end()) { + css::uno::Sequence<OUString> servs( + j->getSupportedServiceNames()); + CPPUNIT_ASSERT_MESSAGE( + (OString( + "implementation \"" + msg(name) + + "\" supports non-unique " + msg(servs)) + .getStr()), + unique(servs)); + k = impls.insert( + std::make_pair(name, Implementation(j, servs))) + .first; + } else { + CPPUNIT_ASSERT_MESSAGE( + (OString( + "multiple implementations named \"" + msg(name) + + "\"") + .getStr()), + bool(j == k->second.factory)); + } + CPPUNIT_ASSERT_MESSAGE( + (OString( + "implementation \"" + msg(name) + "\" supports " + + msg(k->second.serviceNames) + " but not \"" + + msg(rServiceName) + "\"") + .getStr()), + contains(k->second.serviceNames, rServiceName)); + if (desc.is()) { + if (desc->isSingleInterfaceBased()) { + if (serviceImpls2.size() == 1) { + const css::uno::Sequence< + css::uno::Reference< + css::reflection::XServiceConstructorDescription>> + ctors(desc->getConstructors()); + auto pCtor = std::find_if(ctors.begin(), ctors.end(), + [](const auto& rCtor) { return !rCtor->getParameters().hasElements(); }); + if (pCtor != ctors.end()) + k->second.constructors.emplace_back( + rServiceName, + (*pCtor)->isDefaultConstructor()); + } + } else { + k->second.accumulationBased = true; + } + } else { + std::cout + << "implementation \"" << name + << "\" supports fantasy service name \"" + << rServiceName << "\"\n"; + } + } + } + } + std::vector<css::uno::Reference<css::lang::XComponent>> comps; + for (auto const & i: impls) { + if (std::find(denylist.begin(), denylist.end(), i.first) + == denylist.end()) + { + if (i.second.constructors.empty()) { + if (i.second.accumulationBased) { + createInstance( + typeMgr, i.first, false, i.first, i.second.serviceNames, &comps); + } else { + std::cout + << "no obvious way to instantiate implementation \"" + << i.first << "\"\n"; + } + } else { + for (auto const & j: i.second.constructors) { + createInstance( + typeMgr, j.serviceName, !j.defaultConstructor, i.first, + i.second.serviceNames, &comps); + } + } + } + } + SolarMutexReleaser rel; + for (auto const & i: comps) { + // cannot call dispose() on XDesktop before calling terminate() + if (!css::uno::Reference<css::frame::XDesktop>(i, css::uno::UNO_QUERY)) + i->dispose(); + } +} + +void Test::createInstance( + css::uno::Reference<css::container::XHierarchicalNameAccess> const & typeManager, + OUString const & name, bool withArguments, + OUString const & implementationName, + css::uno::Sequence<OUString> const & serviceNames, + std::vector<css::uno::Reference<css::lang::XComponent>> * components) +{ + assert(components != nullptr); + css::uno::Reference<css::uno::XInterface> inst; + try { + if (withArguments) { + inst = m_xContext->getServiceManager() + ->createInstanceWithArgumentsAndContext( + name, css::uno::Sequence<css::uno::Any>(), m_xContext); + } else { + inst = m_xContext->getServiceManager()->createInstanceWithContext( + name, m_xContext); + } + } catch (css::uno::Exception & e) { + css::uno::Any a(cppu::getCaughtException()); + CPPUNIT_FAIL( + OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" caused " + msg(a.getValueTypeName()) + " \"" + + msg(e.Message) + "\"") + .getStr()); + } + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" returned null reference") + .getStr()), + inst.is()); + css::uno::Reference<css::lang::XComponent> comp(inst, css::uno::UNO_QUERY); + if (comp.is()) { + components->push_back(comp); + } + css::uno::Reference<css::lang::XServiceInfo> info( + inst, css::uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" does not provide XServiceInfo") + .getStr()), + info.is()); + OUString expImpl(implementationName); + css::uno::Sequence<OUString> expServs(serviceNames); + // Special cases: + if (name == "com.sun.star.comp.configuration.ConfigurationProvider") { + // Instantiating a ConfigurationProvider with no or empty args must + // return theDefaultProvider: + expImpl = "com.sun.star.comp.configuration.DefaultProvider"; + expServs = {"com.sun.star.configuration.DefaultProvider"}; + } else if (name == "com.sun.star.datatransfer.clipboard.SystemClipboard") { + // SystemClipboard is a wrapper returning either a platform-specific or + // the generic VCLGenericClipboard: + expImpl = "com.sun.star.datatransfer.VCLGenericClipboard"; +#if !defined(_WIN32) + } else if (name == "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1" + || name == "com.sun.star.datatransfer.dnd.XdndSupport") + { + expImpl = "com.sun.star.datatransfer.dnd.VclGenericDragSource"; + expServs = {"com.sun.star.datatransfer.dnd.GenericDragSource"}; + } else if (name == "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1" + || name == "com.sun.star.datatransfer.dnd.XdndDropTarget") + { + expImpl = "com.sun.star.datatransfer.dnd.VclGenericDropTarget"; + expServs = {"com.sun.star.datatransfer.dnd.GenericDropTarget"}; +#endif + } else if (name == "com.sun.star.ui.dialogs.FolderPicker") { + // FolderPicker is a wrapper returning either a platform-specific or the + // generic OfficeFolderPicker: +#if defined(_WIN32) + expImpl = "com.sun.star.ui.dialogs.Win32FolderPicker"; + expServs = {"com.sun.star.ui.dialogs.SystemFolderPicker"}; +#else + expImpl = "com.sun.star.svtools.OfficeFolderPicker"; + expServs = {"com.sun.star.ui.dialogs.OfficeFolderPicker"}; +#endif + } else if (expImpl == "com.sun.star.comp.Calc.SpreadsheetDocument") { + expImpl = "ScModelObj"; + } else if (expImpl == "com.sun.star.comp.Draw.DrawingDocument" + || expImpl == "com.sun.star.comp.Draw.PresentationDocument") + { + expImpl = "SdXImpressDocument"; + } else if (expImpl == "com.sun.star.comp.Writer.GlobalDocument" + || expImpl == "com.sun.star.comp.Writer.TextDocument" + || expImpl == "com.sun.star.comp.Writer.WebDocument") + { + expImpl = "SwXTextDocument"; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" reports wrong implementation name") + .getStr()), + expImpl, info->getImplementationName()); + const css::uno::Sequence<OUString> servs(info->getSupportedServiceNames()); + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" reports non-unique " + msg(servs)) + .getStr()), + unique(servs)); + // Some implementations like "com.sun.star.comp.Calc.SpreadsheetDocument" + // report sub-services like + // "com.sun.star.sheet.SpreadsheetDocumentSettings", and + // "com.sun.star.document.OfficeDocument" that are not listed in the + // .component file, so check for containment instead of equality: + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + + msg(name) + "\" reports " + msg(servs) + " different from " + + msg(expServs)) + .getStr()), + contains(servs, expServs)); + std::set<css::uno::Reference<css::reflection::XServiceTypeDescription>> allservs; + for (auto const & serv: servs) { + if (!typeManager->hasByHierarchicalName(serv)) { + std::cout + << "instantiating \"" << implementationName << "\" via \"" << name + << "\" supports fantasy service name \"" << serv << "\"\n"; + continue; + } + addService( + css::uno::Reference<css::reflection::XServiceTypeDescription>( + typeManager->getByHierarchicalName(serv), css::uno::UNO_QUERY_THROW), + &allservs); + } + css::uno::Reference<css::beans::XPropertySetInfo> propsinfo; + for (auto const & serv: allservs) { + auto const props = serv->getProperties(); + for (auto const & prop: props) { + auto const optional + = (prop->getPropertyFlags() & css::beans::PropertyAttribute::OPTIONAL) != 0; + if (!propsinfo.is()) { + css::uno::Reference<css::beans::XPropertySet> propset(inst, css::uno::UNO_QUERY); + if (!propset.is()) { + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + msg(name) + + "\" reports service " + msg(serv->getName()) + + " with non-optional property \"" + msg(prop->getName()) + + "\" but does not implement css.uno.XPropertySet") + .getStr()), + optional); + continue; + } + propsinfo = propset->getPropertySetInfo(); + if (!propsinfo.is()) { + //TODO: legal to return null in more cases? ("@returns NULL if the + // implementation cannot or will not provide information about the properties") + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + msg(name) + + "\" reports service " + msg(serv->getName()) + + " with non-optional property \"" + msg(prop->getName()) + + "\" but css.uno.XPropertySet::getPropertySetInfo returns null") + .getStr()), + optional); + continue; + } + } + if (!propsinfo->hasPropertyByName(prop->getName())) { + static std::set<std::pair<OUString, OUString>> const denylist{ + {"com.sun.star.comp.chart.DataSeries", "BorderDash"}, + {"com.sun.star.comp.chart2.ChartDocumentWrapper", "UserDefinedAttributes"}, + {"com.sun.star.comp.dbu.OColumnControlModel", "Tabstop"}, + {"com.sun.star.comp.report.OFormattedField", "Align"}, + {"com.sun.star.comp.report.OFormattedField", "BackgroundColor"}, + {"com.sun.star.comp.report.OFormattedField", "Border"}, + {"com.sun.star.comp.report.OFormattedField", "DefaultControl"}, + {"com.sun.star.comp.report.OFormattedField", "EffectiveDefault"}, + {"com.sun.star.comp.report.OFormattedField", "EffectiveMax"}, + {"com.sun.star.comp.report.OFormattedField", "EffectiveMin"}, + {"com.sun.star.comp.report.OFormattedField", "EffectiveValue"}, + {"com.sun.star.comp.report.OFormattedField", "Enabled"}, + {"com.sun.star.comp.report.OFormattedField", "FontEmphasisMark"}, + {"com.sun.star.comp.report.OFormattedField", "FontRelief"}, + {"com.sun.star.comp.report.OFormattedField", "HelpText"}, + {"com.sun.star.comp.report.OFormattedField", "HelpURL"}, + {"com.sun.star.comp.report.OFormattedField", "MaxTextLen"}, + {"com.sun.star.comp.report.OFormattedField", "Printable"}, + {"com.sun.star.comp.report.OFormattedField", "ReadOnly"}, + {"com.sun.star.comp.report.OFormattedField", "Spin"}, + {"com.sun.star.comp.report.OFormattedField", "Tabstop"}, + {"com.sun.star.comp.report.OFormattedField", "Text"}, + {"com.sun.star.comp.report.OFormattedField", "TextColor"}, + {"com.sun.star.comp.report.OFormattedField", "TextLineColor"}, + {"com.sun.star.comp.report.OFormattedField", "TreatAsNumber"}, + {"stardiv.Toolkit.UnoControlRoadmapModel", "Interactive"}}; + if (denylist.find({implementationName, prop->getName()}) != denylist.end()) { + continue; + } + CPPUNIT_ASSERT_MESSAGE( + (OString( + "instantiating \"" + msg(implementationName) + "\" via \"" + msg(name) + + "\" reports service " + msg(serv->getName()) + + " with non-optional property \"" + msg(prop->getName()) + + ("\" but css.uno.XPropertySet::getPropertySetInfo's hasPropertyByName" + " returns false")) + .getStr()), + optional); + } + } + } +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/postprocess/signing/no_signing.txt b/postprocess/signing/no_signing.txt new file mode 100644 index 000000000..6de68e2e8 --- /dev/null +++ b/postprocess/signing/no_signing.txt @@ -0,0 +1,16 @@ +cli_basetypes.dll +cli_cppuhelper.dll +cli_uretypes.dll +cli_oootypes.dll +cli_ure.dll +policy.1.0.cli_uretypes.dll +policy.1.0.cli_oootypes.dll +policy.1.0.cli_ure.dll +policy.1.0.cli_cppuhelper.dll +policy.1.0.cli_basetypes.dll +Windows6.1-KB2999226-x64.msu +Windows6.1-KB2999226-x86.msu +Windows8.1-KB2999226-x64.msu +Windows8.1-KB2999226-x86.msu +Windows8-RT-KB2999226-x64.msu +Windows8-RT-KB2999226-x86.msu diff --git a/postprocess/signing/signing.pl b/postprocess/signing/signing.pl new file mode 100644 index 000000000..793900ca0 --- /dev/null +++ b/postprocess/signing/signing.pl @@ -0,0 +1,252 @@ +: +eval 'exec perl -wS $0 ${1+"$@"}' + if 0; +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +use strict; +use Getopt::Long; + +my $debug = 0; +my $max_files = 400; # sign $max_files with one command line + +#### globals ##### +my $myname = ""; +my $opt_desc = ""; +my $opt_exclude = ""; # file with a list of not signable dll and exe files +my $opt_verbose = 0; +my $opt_help = 0; +my $opt_log = ""; # for logging +my $opt_pass = ""; # password for signing +my $opt_pfxfile = ""; # Personal Information Exchange file +my $opt_timestamp_url = ""; # timestamp url +my %exclude_files = (); # list of not signable dll and exe files +my $signtool = "signtool.exe sign"; +my @args = (); +my @files_to_sign = (); + +#### main ##### +$myname = script_id(); +if ( $#ARGV < 2 ) { + usage(); + exit(1); +} +@args = parse_options(); +get_exclude_files() if ($opt_exclude ne ""); +@files_to_sign = get_files(\@args); +if ( $opt_log ) { # logging + open(LOG,">$opt_log") || die "Can't open log file $opt_log\n"; +} +sign_files(\@files_to_sign); +close LOG if ($opt_log); # logging +exit 0; + + +#### subroutines #### + +sub script_id +{ + ( my $script_name = $0 ) =~ s/^.*[\\\/]([\w\.]+)$/$1/; + return $script_name; +} + +############################################################################ +sub parse_options #09.07.2007 08:13 +############################################################################ +{ + # e exclude list file + # v verbose + my $success = GetOptions('h' => \$opt_help, + 'd=s' => \$opt_desc, 'e=s'=>\$opt_exclude, 'f=s'=>\$opt_pfxfile, 'l=s'=>\$opt_log, + 'p=s'=>\$opt_pass,'v'=>\$opt_verbose, 't=s'=>\$opt_timestamp_url); + if ( !$success || $opt_help ) { + usage(); + exit(1); + } + return @ARGV; +} ##parse_options + +############################################################################ +sub get_exclude_files #09.07.2007 10:12 +############################################################################ +{ + if ( -e $opt_exclude ) { + # get data from cache file + open( IN, "<$opt_exclude") || die "Can't open exclude file $opt_exclude\n"; + while ( my $line = <IN> ) { + chomp($line); + $exclude_files{$line} = 1; # fill hash + print "$line - $exclude_files{$line}\n" if ($debug); + } + } else + { + print_error("Can't open $opt_exclude file!\n"); + } +} ##get_exclude_files + +############################################################################ +sub get_files #10.07.2007 10:19 +############################################################################ + { + use File::Basename; + my $target = shift; + my $file_pattern; + my $file; + my @files = (); + print "\n"; + foreach $file_pattern ( @$target ) + { + print "Files: $file_pattern\n"; + foreach $file ( glob( $file_pattern ) ) + { + my $lib = File::Basename::basename $file; + if ( ! $exclude_files{$lib} ) { + push @files,$file; + } + else + { + print "exclude=$lib\n" if ($opt_verbose); + } + } + } + print "\n"; + return @files; +} ##get_files + +############################################################################ +sub sign_files #09.07.2007 10:36 +############################################################################ +{ + my $files_to_sign = shift; + my $commandline_base = ""; # contains whole stuff without the file name + my $file = ""; + my $result = ""; + + if ( $opt_pass =~ /\.exe$/ ) { + # get password by tool + open(PIPE, "$opt_pass 2>&1 |") || die "Can't open PIPE!\n"; + my $pass = <PIPE>; + close PIPE; + print_error("Can't get password!\n") if ( !$pass ); # exit here + $opt_pass = $pass; + } + $signtool .= " -v" if ($opt_verbose); + $commandline_base = $signtool; + $commandline_base .= " -fd sha256 -td sha256"; + $commandline_base .= " -f $opt_pfxfile" if ($opt_pfxfile ne ""); + $commandline_base .= " -p $opt_pass" if ($opt_pass ne ""); + $commandline_base .= " -tr $opt_timestamp_url" if ($opt_timestamp_url ne ""); + $commandline_base .= " -d \"$opt_desc\"" if ($opt_desc ne ""); + + # Here switch between: + # one command line for multiple files (all doesn't work, too much) / for each file one command line + if ( $max_files > 1 ) { + exec_multi_sign($files_to_sign, $commandline_base); + } else + { + exec_single_sign($files_to_sign, $commandline_base); + } +} ##sign_files + +############################################################################ +sub exec_single_sign #11.07.2007 09:05 +############################################################################ +{ + my $files_to_sign = shift; + my $commandline_base = shift; # contains whole stuff without the file name + my $file = ""; + my $commandline = ""; + + foreach $file (@$files_to_sign) + { + $commandline = $commandline_base . " $file"; + print "$commandline\n" if ($debug); + execute($commandline); + } #foreach +} ##exec_single_sign + +############################################################################ +sub exec_multi_sign #11.07.2007 08:56 +############################################################################ + { + # sign multiple file with one command line + my $files_to_sign = shift; + my $commandline_base = shift; # contains whole stuff without the file name + my $commandline = $commandline_base; # contains stuff which will be executed + my $file = ""; + my $counter = 0; + + foreach $file (@$files_to_sign) + { + $commandline .= " $file"; + ++$counter; + if ( $counter >= $max_files ) { + execute($commandline); + $counter = 0; # reset counter + $commandline = $commandline_base; # reset command line + } + } + execute($commandline) if ($counter > 0); +} ##exec_multi_sign + +############################################################################ +sub execute #11.07.2007 10:02 +############################################################################ +{ + my $commandline = shift; + my $result = ""; + my $errorlines = ""; + + print "$commandline\n" if ($debug); + open(PIPE, "$commandline 2>&1 |") || die "Error: Cannot execute '$commandline' - $!\n"; + while ( $result = <PIPE> ) { + print LOG "$result" if ($opt_log); + $errorlines .= $result if ($result =~ /SignTool Error\:/); + } # while + close PIPE; + print_error( "$errorlines\n" ) if ($errorlines); +} ##execute + +############################################################################ +sub print_error #09.07.2007 11:21 +############################################################################ + { + my $text = shift; + print "ERROR: $text\n"; + print LOG "ERROR: $text\n" if ($opt_log); # logging + close LOG if ($opt_log); # logging + exit(1); +} ##print_error + +############################################################################ +sub usage #09.07.2007 08:39 +############################################################################ + { + print "Usage:\t $myname [-e filename] [-f filename] [-p password] [-t timestamp] [-l filename] [-v] <file[list]> \n"; + print "Options:\n"; + print "\t -e filename\t\t\tFile which contains a list of files which don't have to be signed.\n"; + print "\t -f pfx_filename\t\t\"Personal Information Exchange\" file.\n"; + print "\t -p password\t\t\tPassword for \"Personal Information Exchange\" file.\n"; + print "\t -t timestamp\t\t\tTimestamp URL e.g. \"http://timestamp.verisign.com/scripts/timstamp.dll\"\n"; + print "\t -l log_filename\t\tFile for logging.\n"; + print "\t -v\t\t\t\tVerbose.\n"; +} ##usage + + + + |