1# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- 2# 3# This file is part of the LibreOffice project. 4# 5# This Source Code Form is subject to the terms of the Mozilla Public 6# License, v. 2.0. If a copy of the MPL was not distributed with this 7# file, You can obtain one at http://mozilla.org/MPL/2.0/. 8# 9 10$(eval $(call gb_CustomTarget_CustomTarget,helpcontent2/help3xsl)) 11 12# HACK!! 13html_TREE_MODULES := sbasic scalc schart shared simpress smath swriter sdraw 14html_TEXT_MODULES := $(html_TREE_MODULES) sdatabase 15html_BMARK_MODULES := swriter:WRITER scalc:CALC simpress:IMPRESS sdraw:DRAW shared/explorer/database:BASE smath:MATH schart:CHART sbasic:BASIC shared:SHARED 16 17$(eval $(call gb_CustomTarget_register_targets,helpcontent2/help3xsl,\ 18 hid2file.js \ 19 languages.js \ 20 $(foreach lang,$(gb_HELP_LANGS),\ 21 $(lang)/bookmarks.js \ 22 $(lang)/contents.js \ 23 $(lang)/html.text \ 24 $(foreach module,$(html_TREE_MODULES),$(module)/$(lang)/contents.part) \ 25 $(foreach module,$(html_BMARK_MODULES),$(firstword $(subst :, ,$(module)))/$(lang)/bookmarks.part) \ 26 $(foreach module,$(html_TEXT_MODULES),filelists/html-help/$(module)/$(lang).filelist) \ 27 $(lang)/langnames.js \ 28 $(if $(HELP_OMINDEX_PAGE),$(lang)/xap_tpl) \ 29 ) \ 30)) 31 32# In the below recipe, the file $@.good is used to communicate failure of xsltproc in the pipeline 33# (similar to Bash's `set -o pipefail`; the final `rm $@.good` will fail, and fail the whole 34# command, if the xsltproc invocation failed): 35$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/hid2file.js : \ 36 $(SRCDIR)/helpcontent2/help3xsl/generate_hid2file.xsl \ 37 $(call gb_ExternalExecutable_get_dependencies,xsltproc) \ 38 $(foreach module,$(html_TEXT_MODULES),$(call gb_AllLangHelp_get_helpfiles_target,$(module))) \ 39 $(SRCDIR)/helpcontent2/CustomTarget_html.mk 40 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) 41 $(call gb_Helper_abbreviate_dirs,\ 42 ( \ 43 echo 'var hid2fileMap = {' \ 44 && RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,$(foreach module,$(html_TEXT_MODULES),$(addprefix $(SRCDIR)/,$(gb_AllLangHelp_$(module)_HELPFILES)))) \ 45 && <"$$RESPONSEFILE" $(if $(filter WNT,$(OS)),tr -d '\r' | env -i PATH="$$PATH") xargs -n 1 printf '%s\n' \ 46 | while read xhp; do \ 47 rm -f $@.good && \ 48 { $(call gb_ExternalExecutable_get_command,xsltproc) $< $$xhp && touch $@.good; } \ 49 | $(gb_AWK) 'NF' \ 50 && rm $@.good || exit \ 51 ; done \ 52 && rm "$$RESPONSEFILE" \ 53 && echo '};' \ 54 ) > $@ \ 55 ) 56 57# Xapian localized templates 58ifeq ($(HELP_OMINDEX_PAGE),TRUE) 59 60define html_gen_xaptpl_dep 61$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/xap_tpl : \ 62 $(if $(filter en-US,$(1)),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$(1)))/helpcontent2/source/text/shared/help/browserhelp.xhp 63 64endef 65 66$(eval $(foreach lang,$(gb_HELP_LANGS),$(call html_gen_xaptpl_dep,$(lang)))) 67 68$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/xap_tpl : \ 69 $(SRCDIR)/helpcontent2/help3xsl/xap_templ_query.xsl \ 70 $(call gb_ExternalExecutable_get_dependencies,xsltproc) \ 71 $(SRCDIR)/helpcontent2/CustomTarget_html.mk 72 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XAT,1) 73 $(call gb_Helper_abbreviate_dirs,\ 74 $(call gb_ExternalExecutable_get_command,xsltproc) \ 75 --stringparam lang $* \ 76 --stringparam productname "$(PRODUCTNAME)" \ 77 --stringparam productversion "$(PRODUCTVERSION)" \ 78 -o $@ \ 79 $(SRCDIR)/helpcontent2/help3xsl/xap_templ_query.xsl \ 80 $(if $(filter en-US,$*),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$*))/helpcontent2/source/text/shared/help/browserhelp.xhp \ 81 ) 82 83endif 84 85# set of installed languages - has to be language independent 86$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/languages.js : \ 87 $(SRCDIR)/helpcontent2/CustomTarget_html.mk 88 ( \ 89 printf 'var languagesSet = new Set([' ; \ 90 for lang in $(gb_HELP_LANGS) ; do printf '%s' "'$$lang', " ; done | sed 's/, $$//' ; \ 91 printf ']);\n' \ 92 ) > $@ 93 94 95define html_gen_langnames_js_dep 96$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/langnames.js : \ 97 $(if $(filter en-US,$(1)),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$(1)))/helpcontent2/source/text/shared/help/browserhelp.xhp 98 99endef 100 101$(eval $(foreach lang,$(gb_HELP_LANGS),$(call html_gen_langnames_js_dep,$(lang)))) 102 103# names of the languages - has to be translated, ie. per language 104$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/langnames.js : \ 105 $(SRCDIR)/helpcontent2/CustomTarget_html.mk 106 ( \ 107 echo 'var languageNames = {' ; \ 108 grep '<paragraph[^>]*id="lang_' $(if $(filter en-US,$*),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$*))/helpcontent2/source/text/shared/help/browserhelp.xhp | \ 109 sed -e 's/^.*<variable id="\([^"]*\)"[^>]*>\([^<]*\)<.*$$/"\1": "\2",/' ; \ 110 echo '};' \ 111 ) > $@ 112 113define html_gen_contents_html_dep 114$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/contents.part : $(call gb_HelpTarget__get_treefile,$(1),$(3)) 115$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/contents.part : TREE_FILE := $(call gb_HelpTarget__get_treefile,$(1),$(3)) 116$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/contents.part : LANGUAGE := $(2) 117$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/contents.part : MODULE := $(lastword $(subst :, ,$(filter $(module):%, $(html_BMARK_MODULES)))) 118 119endef 120 121define html_gen_contents_dep 122$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/contents.js : \ 123 $(foreach module,$(html_TREE_MODULES),\ 124 $(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(module)/$(1)/contents.part) 125$(foreach module,$(html_TREE_MODULES),$(call html_gen_contents_html_dep,$(module)/$(1),$(1),helpcontent2/source/auxiliary/$(module))) 126 127endef 128 129$(eval $(foreach lang,$(gb_HELP_LANGS),$(call html_gen_contents_dep,$(lang)))) 130 131$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/contents.js : 132 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),CAT,2) 133 $(call gb_Helper_abbreviate_dirs,\ 134 ( \ 135 echo "document.getElementById(\"Contents\").innerHTML='\\" \ 136 && cat $(filter %.part,$^) | $(gb_AWK) 'NF' \ 137 && echo "';" \ 138 ) > $@ \ 139 ) 140 141$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/contents.part : \ 142 $(SRCDIR)/helpcontent2/help3xsl/get_tree.xsl \ 143 $(call gb_ExternalExecutable_get_dependencies,xsltproc) 144 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) 145 $(call gb_Helper_abbreviate_dirs,\ 146 $(call gb_ExternalExecutable_get_command,xsltproc) \ 147 --stringparam lang $(LANGUAGE) \ 148 --stringparam local $(if $(HELP_ONLINE),'no','yes') \ 149 --stringparam module $(MODULE) \ 150 --stringparam productname "$(PRODUCTNAME)" \ 151 --stringparam productversion "$(PRODUCTVERSION)" \ 152 -o $@ \ 153 $(SRCDIR)/helpcontent2/help3xsl/get_tree.xsl \ 154 $(TREE_FILE) \ 155 ) 156 157define html_gen_html_dep 158$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/html.text : \ 159 $(foreach module,$(html_TEXT_MODULES), \ 160 $(if $(filter en-US,$(1)), \ 161 $(call gb_AllLangHelp_get_helpfiles_target,$(module)), \ 162 $(call gb_HelpTranslateTarget_get_target,$(module)/$(1)))) 163 164endef 165 166$(eval $(foreach lang,$(gb_HELP_LANGS),$(call html_gen_html_dep,$(lang)))) 167 168$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/html.text : \ 169 $(SRCDIR)/helpcontent2/help3xsl/online_transform.xsl \ 170 $(call gb_ExternalExecutable_get_dependencies,xsltproc) 171 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) 172 $(call gb_Helper_abbreviate_dirs,\ 173 cd $(if $(filter en-US,$*),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$*))/helpcontent2/source \ 174 && rm -rf $(dir $@)text \ 175 && RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,$(foreach module,$(html_TEXT_MODULES),$(patsubst helpcontent2/source/%,%,$(gb_AllLangHelp_$(module)_HELPFILES)))) \ 176 && <"$$RESPONSEFILE" $(if $(filter WNT,$(OS)),tr -d '\r' | env -i PATH="$$PATH") xargs -n 1 printf '%s\n' \ 177 | while read xhp; do \ 178 mkdir -p $$(dirname $(dir $@)$$xhp) && \ 179 $(call gb_ExternalExecutable_get_command,xsltproc) \ 180 --stringparam Language $* \ 181 --stringparam local $(if $(HELP_ONLINE),'no','yes') \ 182 --stringparam root $(if $(filter WNT,$(OS)),$$(cygpath -m `pwd`),`pwd`)/ \ 183 --stringparam productname "$(PRODUCTNAME)" \ 184 --stringparam productversion "$(PRODUCTVERSION)" \ 185 --stringparam xapian $(if $(filter TRUE, $(HELP_OMINDEX_PAGE)),'yes','no') \ 186 -o $(dir $@)$${xhp%.xhp}.html \ 187 $(SRCDIR)/helpcontent2/help3xsl/online_transform.xsl \ 188 $(if $(filter WNT,$(OS)),$$(cygpath -m `pwd`),`pwd`)/$$xhp \ 189 || exit \ 190 ; done \ 191 && rm "$$RESPONSEFILE" \ 192 && touch $@ \ 193 ) 194 195$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/bookmarks.js : 196 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),CAT,2) 197 $(call gb_Helper_abbreviate_dirs,\ 198 ( \ 199 echo 'var bookmarks = [' \ 200 && cat $(filter %.part,$^) \ 201 && echo '];' \ 202 ) > $@ \ 203 ) 204 205define html__gen_bookmarks_lang_dep 206$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(2)/$(1)/bookmarks.part : \ 207 $(if $(filter en-US,$(1)), \ 208 $(call gb_AllLangHelp_get_helpfiles_target,$(firstword $(subst /, ,$(2)))), \ 209 $(call gb_HelpTranslateTarget_get_target,$(firstword $(subst /, ,$(2)))/$(1))) 210 211endef 212 213define html__gen_bookmarks_lang_deps 214$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/bookmarks.js : \ 215 $(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(2)/$(1)/bookmarks.part 216$(call html__gen_bookmarks_lang_dep,$(1),$(2)) 217$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(2)/$(1)/bookmarks.part : HELP_LANG := $(1) 218 219endef 220 221define html__gen_bookmarks_deps 222$(foreach lang,$(gb_HELP_LANGS),$(call html__gen_bookmarks_lang_deps,$(lang),$(1))) 223$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/%/bookmarks.part : APP := $(2) 224$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/$(1)/%/bookmarks.part : APPDIR := $(1) 225 226endef 227 228define html_gen_bookmarks_deps 229$(call html__gen_bookmarks_deps,$(firstword $(1)),$(lastword $(1))) 230 231endef 232 233$(eval $(foreach module,$(html_BMARK_MODULES),$(call html_gen_bookmarks_deps,$(subst :, ,$(module))))) 234 235# In the below recipe, the file $@.good is used to communicate failure of xsltproc in the pipeline 236# (similar to Bash's `set -o pipefail`; the final `rm $@.good` will fail, and fail the whole 237# command, if any xsltproc invocation failed): 238$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/%/bookmarks.part : \ 239 $(SRCDIR)/helpcontent2/help3xsl/get_bookmark.xsl \ 240 $(call gb_ExternalExecutable_get_dependencies,xsltproc) 241 $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) 242 $(call gb_Helper_abbreviate_dirs,\ 243 RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,$(addprefix $(if $(filter en-US,$(HELP_LANG)),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$(HELP_LANG)))/,$(gb_AllLangHelp_$(APPDIR)_BOOKMARK_HELPFILES))) \ 244 && ( \ 245 <"$$RESPONSEFILE" $(if $(filter WNT,$(OS)),tr -d '\r' | env -i PATH="$$PATH") xargs -n 1 printf '%s\n' \ 246 | { rm -f $@.good && while read xhp; do \ 247 $(call gb_ExternalExecutable_get_command,xsltproc) \ 248 --stringparam app $(APP) \ 249 --stringparam Language $(HELP_LANG) \ 250 --stringparam local $(if $(HELP_ONLINE),'no','yes') \ 251 --stringparam productname "$(PRODUCTNAME)" \ 252 --stringparam productversion "$(PRODUCTVERSION)" \ 253 $(SRCDIR)/helpcontent2/help3xsl/get_bookmark.xsl \ 254 $$xhp \ 255 || exit \ 256 ; done && touch $@.good; } \ 257 | sort -k3b -t\> -s \ 258 | awk 'NF' \ 259 && rm $@.good \ 260 ) > $@ \ 261 && rm "$$RESPONSEFILE" \ 262 ) 263 264# The various gid_File_Help_*_Zip in scp2 that use EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG expect 265# $(module)/$(lang).filelist files containing lists of files (in instdir) for the corresponding 266# module/lang parts of help data. As a hack, generate those from the existing HelpTarget file 267# lists, which specify the original .xhp files (in SRCDIR for en-US, translated for all other 268# langs). For the shared module, also include the per-lang non .xhp/.html files from the 269# AllLangPackages helpcontent2_html_lang and helpcontent2_html_media_lang: 270 271# html__filelist,lang,module 272define html__filelist 273$(call gb_CustomTarget_get_workdir,helpcontent2/help3xsl)/filelists/html-help/$(2)/$(1).filelist: \ 274 $(call gb_HelpTarget_get_filelist,$(2)/$(1)) \ 275 $(if $(filter $(2),shared), \ 276 $(call gb_Package_get_target,helpcontent2_html_lang_$(1)) \ 277 $(call gb_Package_get_target,helpcontent2_html_media_lang_$(1))) 278 mkdir -p $$$$(dirname $$@) 279 sed -e 's|$(if $(filter $(1),en-US),$(SRCDIR),$(call gb_HelpTranslatePartTarget_get_workdir,$(1)))/helpcontent2/source/|$(INSTROOT)/$(LIBO_SHARE_HELP_FOLDER)/$(1)/|g' -e 's|.xhp|.html|g' $(call gb_HelpTarget_get_filelist,$(2)/$(1)) > $$@ 280 $(if $(filter $(2),shared),cat $(call gb_Package_get_target,helpcontent2_html_lang_$(1)) $(call gb_Package_get_target,helpcontent2_html_media_lang_$(1)) >> $$@,:) 281 282endef 283 284$(eval $(foreach lang,$(gb_HELP_LANGS),$(foreach module,$(html_TEXT_MODULES),$(call html__filelist,$(lang),$(module))))) 285 286# vim: set noet sw=4 ts=4: 287