summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-09-05 10:57:25 +0200
committerMichael Stahl <mstahl@redhat.com>2012-09-05 14:11:58 +0000
commit4ae49101fd43d052c3556b2db753e4d8ae7d86ce (patch)
tree4ed298c3ca0d1c1c6b59e5e1a4145babcac2c179 /solenv
parent5a36a0cab0d4d32968404c0d88772e1a6303af00 (diff)
fdo#53009: Compile extension help in gbuild
...as had been done in the old build system (solenv/inc/extension_helplink.mk). Especially for bundled extensions, this removes the need to compile the help data per user on first start. gb_Extension_add_helpfile(s) replaces gb_Extension_localize_help, and takes care of all the steps (localization, compilation, inclusion in .oxt), even for the en-US data (which was handled with additional gb_Extension_add_file calls before). (cherry picked from commit b23bb8e0de3dbdc2c66c3dedf70dfd318868f76c with additional fixes from follow-up commits 152ffaa15f963f92b1564946a648c53d6b5c808c "Call HelpIndexer/Linker with gb_Helper_set_ld_path" and a297372210396260da57f34da3790f76682603cc "Quote .ddf content (potentially containing stuff like '%2F')") Conflicts: solenv/gbuild/Extension.mk solenv/gbuild/ExtensionTarget.mk Change-Id: Ie4bab66d3cad2b713780a23bf2606ca56cfff37f Reviewed-on: https://gerrit.libreoffice.org/563 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'solenv')
-rw-r--r--solenv/bin/modules/installer/windows/msiglobal.pm18
-rw-r--r--solenv/gbuild/Extension.mk136
2 files changed, 125 insertions, 29 deletions
diff --git a/solenv/bin/modules/installer/windows/msiglobal.pm b/solenv/bin/modules/installer/windows/msiglobal.pm
index c6a70ff7dd2d..82db7ddaa14a 100644
--- a/solenv/bin/modules/installer/windows/msiglobal.pm
+++ b/solenv/bin/modules/installer/windows/msiglobal.pm
@@ -210,7 +210,7 @@ sub generate_cab_file_list
write_ddf_file_header(\@ddffile, $cabinetfile, $installdir);
- my $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ my $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $doinclude ) { push(@ddffile, $ddfline); }
$counter++; # increasing the counter
@@ -230,7 +230,7 @@ sub generate_cab_file_list
my $nextfilestyles = "";
if ( $nextfile->{'Styles'} ) { $nextfilestyles = $nextfile->{'Styles'}; }
if ( $nextfilestyles =~ /\bDONT_PACK\b/ ) { $localdoinclude = 0; }
- $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $localdoinclude ) { push(@ddffile, $ddfline); }
$counter++; # increasing the counter!
@@ -302,7 +302,7 @@ sub generate_cab_file_list
write_ddf_file_header(\@ddffile, $cabinetfile, $installdir);
- my $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ my $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $doinclude ) { push(@ddffile, $ddfline); }
my $nextfile = "";
@@ -323,7 +323,7 @@ sub generate_cab_file_list
my $nextfilestyles = "";
if ( $nextfile->{'Styles'} ) { $nextfilestyles = $nextfile->{'Styles'}; }
if ( $nextfilestyles =~ /\bDONT_PACK\b/ ) { $localdoinclude = 0; }
- $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $localdoinclude ) { push(@ddffile, $ddfline); }
$counter++;
$nextfile = "";
@@ -384,7 +384,7 @@ sub generate_cab_file_list
write_ddf_file_header(\@ddffile, $cabinetfile, $installdir);
- my $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ my $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $doinclude ) { push(@ddffile, $ddfline); }
my $nextfile = ${$filesref}[$i+1];
@@ -403,7 +403,7 @@ sub generate_cab_file_list
my $nextfilestyles = "";
if ( $nextfile->{'Styles'} ) { $nextfilestyles = $nextfile->{'Styles'}; }
if ( $nextfilestyles =~ /\bDONT_PACK\b/ ) { $localdoinclude = 0; }
- $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $localdoinclude ) { push(@ddffile, $ddfline); }
$i++; # increasing the counter!
$nextfile = ${$filesref}[$i+1];
@@ -468,7 +468,7 @@ sub generate_cab_file_list
if ( $onefile->{'Styles'} ) { $styles = $onefile->{'Styles'}; };
if ( $styles =~ /\bDONT_PACK\b/ ) { $doinclude = 0; }
- my $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ my $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $doinclude ) { push(@ddffile, $ddfline); }
$counter++; # increasing the counter
@@ -522,7 +522,7 @@ sub generate_cab_file_list
if ( $onefile->{'Styles'} ) { $styles = $onefile->{'Styles'}; };
if ( $styles =~ /\bDONT_PACK\b/ ) { $doinclude = 0; }
- my $ddfline = "\"" . $sourcepath . "\"" . " " . $uniquename . "\n";
+ my $ddfline = "\"" . $sourcepath . "\" \"" . $uniquename . "\"\n";
if ( $doinclude ) { push(@ddffile, $ddfline); }
}
@@ -625,7 +625,7 @@ sub save_packorder
if ( $oneline =~ /^\s*\.Set\s+CabinetName.*\=(.*?)\s*$/ ) { $cabinetfile = $1; }
if ( $oneline =~ /^\s*\.Set\s+/ ) { next; }
- if ( $oneline =~ /^\s*\"(.*?)\"\s+(.*?)\s*$/ )
+ if ( $oneline =~ /^\s*\"(.*?)\"\s+\"(.*?)\"\s*$/ )
{
my $sourcefile = $1;
my $uniquefilename = $2;
diff --git a/solenv/gbuild/Extension.mk b/solenv/gbuild/Extension.mk
index be486bed02b6..ff8c92774265 100644
--- a/solenv/gbuild/Extension.mk
+++ b/solenv/gbuild/Extension.mk
@@ -43,8 +43,17 @@ gb_Extension_PROPMERGECOMMAND := \
gb_Extension_HELPEXTARGET := $(call gb_Executable_get_target_for_build,helpex)
gb_Extension_HELPEXCOMMAND := \
$(gb_Helper_set_ld_path) $(gb_Extension_HELPEXTARGET)
+gb_Extension_HELPINDEXERTARGET := \
+ $(call gb_Executable_get_target_for_build,HelpIndexer)
+gb_Extension_HELPINDEXERCOMMAND := \
+ $(gb_Helper_set_ld_path) $(gb_Extension_HELPINDEXERTARGET)
+gb_Extension_HELPLINKERTARGET := \
+ $(call gb_Executable_get_target_for_build,HelpLinker)
+gb_Extension_HELPLINKERCOMMAND := \
+ $(gb_Helper_set_ld_path) $(gb_Extension_HELPLINKERTARGET)
# does not contain en-US because it is special cased in gb_Extension_Extension
-gb_Extension_LANGS := $(filter-out en-US,$(gb_WITH_LANG))
+gb_Extension_TRANS_LANGS := $(filter-out en-US,$(gb_WITH_LANG))
+gb_Extension_ALL_LANGS := en-US $(gb_Extension_TRANS_LANGS)
# Substitute platform or copy if no platform has been set
define gb_Extension__subst_platform
@@ -57,6 +66,9 @@ $(if $(PLATFORM),\
cp -f $(1) $(2))
endef
+$(call gb_Extension_get_workdir,%)/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
# remove extension directory in workdir and oxt file in workdir and outdir
$(call gb_Extension_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),OXT,3)
@@ -95,11 +107,11 @@ $(call gb_Extension_get_target,%) : \
$(call gb_Extension__subst_platform,$(call gb_Extension_get_workdir,$*)/description.xml,$(call gb_Extension_get_rootdir,$*)/description.xml) && \
$(call gb_Extension__subst_platform,$(LOCATION)/manifest.xml,$(call gb_Extension_get_rootdir,$*)/META-INF/manifest.xml) && \
cp -f $(OUTDIR)/bin/osl/$(gb_Extension_LICENSEFILE) $(call gb_Extension_get_rootdir,$*)/registration && \
- $(if $(gb_WITH_LANG),cp $(foreach lang,$(gb_Extension_LANGS),$(call gb_Extension_get_workdir,$*)/description-$(lang).txt) $(call gb_Extension_get_rootdir,$*) &&) \
+ $(if $(gb_WITH_LANG),cp $(foreach lang,$(gb_Extension_TRANS_LANGS),$(call gb_Extension_get_workdir,$*)/description-$(lang).txt) $(call gb_Extension_get_rootdir,$*) &&) \
cd $(call gb_Extension_get_rootdir,$*) && \
$(gb_Extension_ZIPCOMMAND) -rX --filesync \
$(call gb_Extension_get_target,$*) \
- $(FILES))
+ $(sort $(FILES)))
# TODO: needs dependency on $(OUTDIR)/bin/osl/$(gb_Extension_LICENSEFILE) once readlicense_oo will be gbuildized
# or just another simpler solution
@@ -115,7 +127,7 @@ $(call gb_Extension_get_target,$(1)) : PLATFORM :=
$(call gb_Extension_get_target,$(1)) : PRJNAME := $(firstword $(subst /, ,$(2)))
$(call gb_Extension_get_workdir,$(1))/description.xml : $(SRCDIR)/$(2)/description.xml
ifneq ($(strip $(gb_WITH_LANG)),)
-$(call gb_Extension_get_target,$(1)) : FILES += $(foreach lang,$(gb_Extension_LANGS),description-$(lang).txt)
+$(call gb_Extension_get_target,$(1)) : FILES += $(foreach lang,$(gb_Extension_TRANS_LANGS),description-$(lang).txt)
$(call gb_Extension_get_target,$(1)) : SDF := $(gb_SDFLOCATION)/$(2)/localize.sdf
$(call gb_Extension_get_workdir,$(1))/description.xml : $$(SDF)
endif
@@ -124,6 +136,8 @@ $(eval $(call gb_Module_register_target,$(call gb_Extension_get_outdir_target,$(
$(call gb_Deliver_add_deliverable,$(call gb_Extension_get_outdir_target,$(1)),$(call gb_Extension_get_target,$(1)),$(1))
$(call gb_Extension_get_outdir_target,$(1)) : $(call gb_Extension_get_target,$(1))
+$(foreach lang,$(gb_Extension_ALL_LANGS), \
+ $(call gb_Extension__compile_help_onelang,$(1),$(lang)))
endef
# Set platform.
@@ -186,7 +200,7 @@ endef
define gb_Extension_localize_properties
$(call gb_Extension_get_target,$(1)) : FILES += $(2)
ifneq ($(strip $(gb_WITH_LANG)),)
-$(call gb_Extension_get_target,$(1)) : FILES += $(foreach lang,$(subst -,_,$(gb_Extension_LANGS)),$(subst en_US,$(lang),$(2)))
+$(call gb_Extension_get_target,$(1)) : FILES += $(foreach lang,$(subst -,_,$(gb_Extension_TRANS_LANGS)),$(subst en_US,$(lang),$(2)))
$(call gb_Extension_get_rootdir,$(1))/$(2) : SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(dir $(3)))localize.sdf
$(call gb_Extension_get_rootdir,$(1))/$(2) : $$(SDF)
endif
@@ -200,24 +214,106 @@ $(call gb_Extension_get_rootdir,$(1))/$(2) : $(3) \
endef
-# localize extension help
-define gb_Extension_localize_help
-ifneq ($(strip $(gb_WITH_LANG)),)
-$(call gb_Extension_get_target,$(1)) : FILES += $(foreach lang,$(gb_Extension_LANGS),$(subst lang,$(lang),$(2)))
-$(foreach lang,$(gb_Extension_LANGS),$(call gb_Extension_localize_help_onelang,$(1),$(subst lang,$(lang),$(2)),$(3),$(lang)))
-endif
+# add an .xhp help file, to be localized and compiled
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source file without $(3) (resp. $(4))
+# suffix
+# $(3): relative path of (target) .xhp file (e.g.,
+# com.sun.wiki-publisher/wiki.xhp)
+# $(4): optional relative path of source .xhp file, when it differs from $(3)
+# (i.e., if $(4) is empty the en-US source file is $(2)/$(3), otherwise it
+# is $(2)/$(4))
+define gb_Extension_add_helpfile
+$(foreach lang,$(gb_Extension_ALL_LANGS), \
+ $(call gb_Extension__localize_helpfile_onelang,$(1),$(2),$(3),$(4),$(lang)) \
+ $(call gb_Extension__add_compiled_help_dependency_onelang,$(1),$(lang)))
+endef
+# add a list of .xhp help files, to be localized and compiled
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source files without $(3) suffixes
+# $(3): list of relative paths of .xhp files (see gb_Extension_add_helpfile)
+define gb_Extension_add_helpfiles
+$(foreach helpfile,$(3), \
+ $(call gb_Extension_add_helpfile,$(1),$(2),$(helpfile),))
endef
-define gb_Extension_localize_help_onelang
-$(call gb_Extension_get_target,$(1)) : $(call gb_Extension_get_rootdir,$(1))/$(2)
-$(call gb_Extension_get_rootdir,$(1))/$(2) : SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(subst $(WORKDIR)/CustomTarget,,$(dir $(3))))localize.sdf
-$(call gb_Extension_get_rootdir,$(1))/$(2) : $$(SDF)
-$(call gb_Extension_get_rootdir,$(1))/$(2) : $(gb_Extension_HELPEXTARGET)
-$(call gb_Extension_get_rootdir,$(1))/$(2) : $(3)
- $$(call gb_Output_announce,$(2),$(true),XHP,3)
- mkdir -p $$(dir $$@) && \
- $(gb_Extension_HELPEXCOMMAND) -i $$< -o $$@ -l $(4) -m $$(SDF)
+# localize one .xhp help file for one language; the result is stored as
+# help/$(4)/$(3) in the extension's workdir; as a special case, if $(4) is
+# "en-US", the source file is just copied, not passed through helpex
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source file without $(3) (resp. $(4))
+# suffix
+# $(3): relative path of (target) .xhp file (see gb_Extension_add_helpfile)
+# $(4): optional relative path of source .xhp file (see
+# gb_Extension_add_helpfile)
+# $(5): language
+define gb_Extension__localize_helpfile_onelang
+$(call gb_Extension_get_rootdir,$(1))/help/$(5).done : HELPFILES += $(3)
+$(call gb_Extension_get_rootdir,$(1))/help/$(5).done : \
+ $(call gb_Extension_get_workdir,$(1))/help/$(5)/$(3)
+$(call gb_Extension_get_workdir,$(1))/help/$(5)/$(3) : \
+ SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(subst $(WORKDIR)/CustomTarget,,$(2)/$(dir $(or $(4),$(3)))))localize.sdf
+$(call gb_Extension_get_workdir,$(1))/help/$(5)/$(3) : $$(SDF)
+$(call gb_Extension_get_workdir,$(1))/help/$(5)/$(3) : \
+ $(if $(filter-out en-US,$(5)),$(gb_Extension_HELPEXTARGET)) | \
+ $(call gb_Extension_get_workdir,$(1))/help/.dir
+$(call gb_Extension_get_workdir,$(1))/help/$(5)/$(3) : \
+ $(2)/$(or $(4),$(3))
+ $$(call gb_Output_announce,$(1) $(3) $(5),$(true),XHP,3)
+ $$(call gb_Helper_abbreviate_dirs, \
+ mkdir -p $$(dir $$@) && \
+ $(if $(filter-out en-US,$(5)), \
+ $(gb_Extension_HELPEXCOMMAND) -i $$< -o $$@ -l $(5) -m $$(SDF), \
+ cp $$< $$@))
+
+endef
+
+# compile help for one language; the result is stored as help/$(3)/ in the
+# extension's rootdir and marked for zipping into the .oxt
+# $(1): extension identifier
+# $(2): language
+# Target-specific HELPFILES: list of relative paths of .xhp files (see
+# gb_Extension_add_helpfile)
+define gb_Extension__compile_help_onelang
+$(call gb_Extension_get_rootdir,$(1))/help/$(2).done : \
+ $(gb_Extension_HELPINDEXERTARGET) \
+ $(gb_Extension_HELPLINKERTARGET) \
+ $(OUTDIR_FOR_BUILD)/bin/embed.xsl \
+ $(OUTDIR_FOR_BUILD)/bin/idxcaption.xsl \
+ $(OUTDIR_FOR_BUILD)/bin/idxcontent.xsl | \
+ $(call gb_Extension_get_rootdir,$(1))/help/.dir
+ $$(call gb_Output_announce,$(1) $(2),$(true),XHC,3)
+ $$(call gb_Helper_abbreviate_dirs, \
+ rm -rf $$(basename $$@) && \
+ mkdir $$(basename $$@) && \
+ $(gb_Extension_HELPLINKERCOMMAND) -mod help \
+ -extlangsrc $(call gb_Extension_get_workdir,$(1))/help/$(2) \
+ -sty $(OUTDIR_FOR_BUILD)/bin/embed.xsl \
+ -extlangdest $$(basename $$@) \
+ -idxcaption $(OUTDIR_FOR_BUILD)/bin/idxcaption.xsl \
+ -idxcontent $(OUTDIR_FOR_BUILD)/bin/idxcontent.xsl \
+ $$(HELPFILES) && \
+ (cd $(call gb_Extension_get_workdir,$(1))/help/$(2) && \
+ $(gb_Extension_ZIPCOMMAND) -r $$(basename $$@)/help.jar \
+ $$(HELPFILES)) && \
+ $(gb_Extension_HELPINDEXERCOMMAND) -lang $(2) -mod help \
+ -dir $$(basename $$@) && \
+ touch $$@)
+
+endef
+
+# establish the dependency that actually causes inclusion of the compiled help
+# into the .oxt, for one language; in principle, this would only need to be done
+# once per language iff the extension uses any help -- currently it is done from
+# each individual gb_Extension_add_helpfile call (and thus requires $strip
+# to remove duplicates from FILES)
+# $(1): extension identifier
+# $(2): language
+define gb_Extension__add_compiled_help_dependency_onelang
+$(call gb_Extension_get_target,$(1)) : FILES += help/$(2)
+$(call gb_Extension_get_target,$(1)) : \
+ $(call gb_Extension_get_rootdir,$(1))/help/$(2).done
endef