Fix linking on Windows
[LibreOffice.git] / solenv / gbuild / AllLangResTarget.mk
blob5e0f89acdab09df8d9e50e4abca8d058b8084ec5
1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
2 #*************************************************************************
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 #
6 # Copyright 2000, 2011 Oracle and/or its affiliates.
8 # OpenOffice.org - a multi-platform office productivity suite
10 # This file is part of OpenOffice.org.
12 # OpenOffice.org is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU Lesser General Public License version 3
14 # only, as published by the Free Software Foundation.
16 # OpenOffice.org is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU Lesser General Public License version 3 for more details
20 # (a copy is included in the LICENSE file that accompanied this code).
22 # You should have received a copy of the GNU Lesser General Public License
23 # version 3 along with OpenOffice.org. If not, see
24 # <http://www.openoffice.org/license.html>
25 # for a copy of the LGPLv3 License.
27 #*************************************************************************
30 # Overview of dependencies and tasks of SrsTarget
32 # target task depends on
33 # SrsTarget joining the parts SrsPartTarget
34 # SrsTemplateTarget
35 # SrsPartTarget preprocessing SrsPartMergeTarget (with l10n)
36 # source file (without l10n)
37 # SrsTemplateTarget handling templates SrsTemplatePartTarget
38 # SrsTemplatePartTarget handling template SrsPartMergeTarget
39 # SrsPartMergeTarget merging/transex source file (only needed with l10n)
41 # Overview of dependencies and tasks of AllLangResTarget
43 # target task depends on
44 # AllLangResTarget nothing ResTarget for all active langs
45 # ResTarget running rsc SrsTarget, resources
48 # SrsPartMergeTarget class
50 gb_SrsPartMergeTarget_TRANSEXTARGET := $(call gb_Executable_get_target_for_build,transex3)
51 # gb_SrsPartMergeTarget_TRANSEXPRECOMMAND is set by the platforms
53 gb_SrsPartMergeTarget_TRANSEXCOMMAND := $(gb_SrsPartMergeTarget_TRANSEXPRECOMMAND) $(gb_SrsPartMergeTarget_TRANSEXTARGET)
54 gb_SrsPartMergeTarget_SDFLOCATION := $(SRCDIR)/translations/$(INPATH)/misc/sdf/
56 define gb_SrsPartMergeTarget__command
57 $(call gb_Output_announce,$(3),$(true),srs,1)
58 $(call gb_Helper_abbreviate_dirs_native,\
59 mkdir -p $(dir $(1)) && \
60 $(gb_SrsPartMergeTarget_TRANSEXCOMMAND) \
61 -p $(firstword $(subst /, ,$(2))) \
62 -i $(realpath $(3)) \
63 -o $(1) \
64 -m $(SDF) \
65 -l all)
67 endef
69 $(call gb_SrsPartMergeTarget_get_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY) | $(gb_SrsPartMergeTarget_TRANSEXTARGET)
70 $(if $(SDF),$(call gb_SrsPartMergeTarget__command,$@,$*,$<),mkdir -p $(dir $@) && cp $< $@)
73 # SrsPartTarget class
75 # defined by platform
76 # gb_SrsPartTarget_RSCTARGET
77 # gb_SrsPartTarget_RSCCOMMAND
78 # gb_SrsPartTarget__command_dep
80 define gb_SrsPartTarget__command
81 $(call gb_Helper_abbreviate_dirs_native,\
82 mkdir -p $(dir $(1)) && \
83 RESPONSEFILE=`$(gb_MKTEMP)` && \
84 echo "-s \
85 $(INCLUDE) \
86 -I$(realpath $(dir $(3))) \
87 $(DEFS) \
88 -fp=$(1) \
89 $(realpath $(if $(MERGEDFILE),$(MERGEDFILE),$<))" > $${RESPONSEFILE} && \
90 $(gb_SrsPartTarget_RSCCOMMAND) -presponse @$${RESPONSEFILE} && \
91 rm -rf $${RESPONSEFILE})
93 endef
95 $(call gb_SrsPartTarget_get_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY) | $(gb_SrsPartTarget_RSCTARGET)
96 $(call gb_SrsPartTarget__command_dep,$*,$<)
97 $(call gb_SrsPartTarget__command,$@,$*,$<)
99 ifeq ($(gb_FULLDEPS),$(true))
100 $(call gb_SrsPartTarget_get_dep_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY)
101 $(call gb_Helper_abbreviate_dirs,\
102 mkdir -p $(dir $@) && \
103 echo '$(call gb_SrsPartTarget_get_target,$*) : $(gb_Helper_PHONY)' > $@)
105 $(call gb_SrsPartTarget_get_dep_target,%) :
106 $(eval $(call gb_Output_error,Unable to find resource definition file $* in repositories: $(gb_SrsPartTarget_REPOS)))
107 endif
110 define gb_SrsPartTarget_SrsPartTarget
111 ifeq ($(strip $(gb_WITH_LANG)),)
112 $(call gb_SrsPartTarget_get_target,$(1)) : MERGEDFILE :=
113 else
114 $(call gb_SrsPartTarget_get_target,$(1)) : MERGEDFILE := $(call gb_SrsPartMergeTarget_get_target,$(1))
115 $(call gb_SrsPartTarget_get_target,$(1)) : $(call gb_SrsPartMergeTarget_get_target,$(1))
116 $(call gb_SrsPartMergeTarget_get_target,$(1)) : SDF := $(realpath $(gb_SrsPartMergeTarget_SDFLOCATION)$(dir $(1))localize.sdf)
117 endif
119 endef
121 # SrsTemplatePartTarget class
123 define gb_SrsTemplatePartTarget_SrsTemplatePartTarget
124 $(call gb_SrsTemplatePartTarget_get_target,$(1)) : $(call gb_SrsPartMergeTarget_get_target,$(1))
125 $$(call gb_Helper_abbreviate_dirs,\
126 mkdir -p $$(dir $$@) && \
127 cp $$< $$@)
128 ifneq ($(strip $(WITH_LANG)),)
129 $(call gb_SrsPartMergeTarget_get_target,$(1)) : SDF := $(realpath $(gb_SrsPartMergeTarget_SDFLOCATION)$(dir $(1))localize.sdf)
130 $(call gb_SrsPartMergeTarget_get_target,$(1)) : $$(SDF)
131 endif
133 endef
135 # SrsTemplateTarget class
137 define gb_SrsTemplateTarget__command
138 $(call gb_Helper_abbreviate_dirs,\
139 mkdir -p $(dir $(1)) && \
140 touch $(1))
141 endef
143 gb_SrsTemplateTarget__get_merged_target = $(call gb_SrsTemplateTarget_get_target,$(1))_merged_last
144 gb_SrsTemplateTarget__get_unmerged_target = $(call gb_SrsTemplateTarget_get_target,$(1))_unmerged_last
146 ifeq ($(strip $(WITH_LANG)),)
147 gb_SrsTemplateTarget__get_target = $(call gb_SrsTemplateTarget__get_unmerged_target,$(1))
148 gb_SrsTemplateTarget__get_update_target = $(call gb_SrsTemplateTarget__get_merged_target,$(1))
149 else
150 gb_SrsTemplateTarget__get_target = $(call gb_SrsTemplateTarget__get_merged_target,$(1))
151 gb_SrsTemplateTarget__get_update_target = $(call gb_SrsTemplateTarget__get_unmerged_target,$(1))
152 endif
154 define gb_SrsTemplateTarget_SrsTemplateTarget
155 $(call gb_SrsTemplateTarget_get_target,$(1)) : PARTS :=
156 $(call gb_SrsTemplateTarget_get_clean_target,$(1)) : PARTS :=
157 $(call gb_SrsTemplateTarget_get_target,$(1)) : $(call gb_SrsTemplateTarget__get_target,$(1))
158 $(call gb_SrsTemplateTarget__get_target,$(1)) : $(call gb_SrsTemplateTarget__get_update_target,$(1))
160 endef
162 .PHONY : $(call gb_SrsTemplateTarget_get_target,%_last)
163 $(call gb_SrsTemplateTarget_get_target,%_last) :
164 $(call gb_SrsTemplateTarget__command,$@)
166 .PHONY : $(call gb_SrsTemplateTarget_get_target,%)
167 $(call gb_SrsTemplateTarget_get_target,%) :
168 $(if $(strip $(PARTS)),$(call gb_Output_announce,$*,$(true),SRT,4))
169 $(call gb_SrsTemplateTarget__command,$@)
171 .PHONY : $(call gb_SrsTemplateTarget_get_clean_target,%)
172 $(call gb_SrsTemplateTarget_get_clean_target,%) :
173 $(if $(strip $(PARTS)),$(call gb_Output_announce,$*,$(false),SRT,4))
174 -$(call gb_Helper_abbreviate_dirs,\
175 rm -f $(call gb_SrsTemplateTarget_get_target,$*) \
176 $(call gb_SrsTemplateTarget__get_merged_target,$*) \
177 $(call gb_SrsTemplateTarget__get_unmerged_target,$*) \
178 $(foreach part,$(PARTS),$(call gb_SrsTemplatePartTarget_get_target,$(part))) \
179 $(foreach part,$(PARTS),$(call gb_SrsPartMergeTarget_get_target,$(part))))
181 define gb_SrsTemplateTarget_add_file
182 $(call gb_SrsTemplatePartTarget_SrsTemplatePartTarget,$(2))
183 $(call gb_SrsTemplateTarget_get_target,$(1)) : PARTS += $(2)
184 $(call gb_SrsTemplateTarget_get_clean_target,$(1)) : PARTS += $(2)
185 $(call gb_SrsTemplateTarget__get_target,$(1)) : $(call gb_SrsTemplatePartTarget_get_target,$(2))
186 $(call gb_SrsTemplatePartTarget_get_target,$(2)) : $(call gb_SrsTemplateTarget__get_update_target,$(1))
187 $(call gb_SrsPartMergeTarget_get_target,$(2)) : $(call gb_SrsTemplateTarget__get_update_target,$(1))
189 endef
191 # SrsTarget class
193 gb_SrsTarget_DEFAULTDEFS := $(gb_GLOBALDEFS)
195 .PHONY : $(call gb_SrsTarget_get_clean_target,%)
196 $(call gb_SrsTarget_get_clean_target,%) :
197 $(call gb_Output_announce,$*,$(false),SRS,1)
198 -$(call gb_Helper_abbreviate_dirs,\
199 rm -f $(call gb_SrsTarget_get_target,$*) \
200 $(call gb_SrsTarget_get_dep_target,$*) \
201 $(foreach part,$(PARTS),$(call gb_SrsPartTarget_get_target,$(part))) \
202 $(foreach part,$(PARTS),$(call gb_SrsPartTarget_get_dep_target,$(part))) \
203 $(foreach part,$(PARTS),$(call gb_SrsPartMergeTarget_get_target,$(part))))
205 ifeq ($(gb_FULLDEPS),$(true))
206 define gb_SrsTarget__command_dep
207 $(call gb_Output_announce,SRS:$(2),$(true),DEP,1)
208 $(call gb_Helper_abbreviate_dirs,\
209 mkdir -p $(dir $(1)) && \
210 cat $(3) > $(1))
211 endef
212 endif
214 $(call gb_SrsTarget_get_target,%) :
215 $(call gb_SrsTarget__command_dep,$(call gb_SrsTarget_get_dep_target,$*),$*,$(foreach part,$(PARTS),$(call gb_SrsPartTarget_get_dep_target,$(part))))
216 $(call gb_Output_announce,$*,$(true),SRS,1)
217 $(call gb_Helper_abbreviate_dirs,\
218 mkdir -p $(dir $@) && \
219 cat $^ > $@)
221 ifeq ($(gb_FULLDEPS),$(true))
222 $(call gb_SrsTarget_get_dep_target,%) :
223 $(call gb_SrsTarget__command_dep,$@,$*,$^)
224 endif
226 define gb_SrsTarget_SrsTarget
227 $(call gb_SrsTemplateTarget_SrsTemplateTarget,$(1))
228 $(call gb_SrsTarget_get_target,$(1)) : DEFS := $(gb_SrsTarget_DEFAULTDEFS)
229 $(call gb_SrsTarget_get_target,$(1)) : INCLUDE := $(SOLARINC)
230 $(call gb_SrsTarget_get_clean_target,$(1)) : PARTS :=
231 $(call gb_SrsTarget_get_target,$(1)) : PARTS :=
232 $(call gb_SrsTarget_get_target,$(1)) : $(call gb_SrsTemplateTarget_get_target,$(1))
233 $(call gb_SrsTarget_get_clean_target,$(1)) : $(call gb_SrsTemplateTarget_get_clean_target,$(1))
234 ifeq ($(gb_FULLDEPS),$(true))
235 ifneq ($(wildcard $(call gb_SrsTarget_get_dep_target,$(1))),)
236 include $(call gb_SrsTarget_get_dep_target,$(1))
237 else
238 $(firstword $(MAKEFILE_LIST)) : $(call gb_SrsTarget_get_dep_target,$(1))
239 endif
240 endif
242 endef
244 define gb_SrsTarget_set_defs
245 $(call gb_SrsTarget_get_target,$(1)) : DEFS := $(2)
246 ifeq ($(gb_FULLDEPS),$(true))
247 $(call gb_SrsTarget_get_dep_target,$(1)) : DEFS := $(2)
248 endif
250 endef
252 define gb_SrsTarget_set_include
253 $(call gb_SrsTarget_get_target,$(1)) : INCLUDE := $(2)
254 ifeq ($(gb_FULLDEPS),$(true))
255 $(call gb_SrsTarget_get_dep_target,$(1)) : INCLUDE := $(2)
256 endif
258 endef
260 define gb_SrsTarget_add_file
261 ifeq ($(gb_FULLDEPS),$(true))
262 $(call gb_SrsTarget_get_dep_target,$(1)) : $(call gb_SrsPartTarget_get_dep_target,$(2))
263 endif
264 $(call gb_SrsPartTarget_SrsPartTarget,$(2))
265 $(call gb_SrsTarget_get_target,$(1)) : $(call gb_SrsPartTarget_get_target,$(2))
266 $(call gb_SrsPartTarget_get_target,$(2)) :| $(call gb_SrsTemplateTarget_get_target,$(1))
267 $(call gb_SrsTarget_get_clean_target,$(1)) : PARTS += $(2)
268 $(call gb_SrsTarget_get_target,$(1)) : PARTS += $(2)
270 endef
272 define gb_SrsTarget_add_files
273 $(foreach file,$(2),$(call gb_SrsTarget_add_file,$(1),$(file)))
275 endef
277 define gb_SrsTarget_add_template
278 $(call gb_SrsTemplateTarget_add_file,$(1),$(2))
280 endef
282 define gb_SrsTarget_add_templates
283 $(foreach template,$(2),$(call gb_SrsTarget_add_template,$(1),$(template)))
285 endef
288 # ResTarget
290 gb_ResTarget_RSCTARGET := $(gb_SrsPartTarget_RSCTARGET)
291 gb_ResTarget_RSCCOMMAND := $(gb_SrsPartTarget_RSCCOMMAND)
292 gb_ResTarget_DEFIMAGESLOCATION := $(realpath $(SRCDIR)/default_images)/
294 $(call gb_ResTarget_get_clean_target,%) :
295 $(call gb_Output_announce,$*,$(false),RES,2)
296 $(call gb_Helper_abbreviate_dirs,\
297 rm -f $(call gb_ResTarget_get_target,$*) $(call gb_ResTarget_get_imagelist_target,$*) $(call gb_ResTarget_get_outdir_target,$*) $(call gb_ResTarget_get_outdir_imagelist_target,$*))
299 $(call gb_ResTarget_get_target,%) : $(gb_Helper_MISCDUMMY) | $(gb_ResTarget_RSCTARGET)
300 $(call gb_Output_announce,$*,$(true),RES,2)
301 $(call gb_Helper_abbreviate_dirs_native,\
302 mkdir -p $(dir $@) $(OUTDIR)/bin \
303 $(dir $(call gb_ResTarget_get_imagelist_target,$*)) && \
304 RESPONSEFILE=`$(gb_MKTEMP)` && \
305 echo "-r -p \
306 -lg$(LANGUAGE) \
307 -fs=$@ \
308 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/$(LIBRARY)) \
309 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst/$(LANGUAGE)) \
310 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst) \
311 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/$(LANGUAGE)) \
312 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/imagelst) \
313 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res) \
314 -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)) \
315 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res/$(LANGUAGE) \
316 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res \
317 -subMODULE=$(dir $(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION))) \
318 -subGLOBALRES=$(gb_ResTarget_DEFIMAGESLOCATION)res \
319 -oil=$(dir $(call gb_ResTarget_get_imagelist_target,$*)) \
320 $(filter-out $(gb_Helper_MISCDUMMY),$^)" > $${RESPONSEFILE} && \
321 $(gb_ResTarget_RSCCOMMAND) @$${RESPONSEFILE} && \
322 rm -f $${RESPONSEFILE})
324 $(call gb_ResTarget_get_outdir_target,%) :
325 $(call gb_Helper_abbreviate_dirs,\
326 $(call gb_Deliver_deliver,$<,$@) && \
327 $(call gb_Deliver_deliver,$(dir $<)/$(notdir $(ILSTTARGET)),$(ILSTTARGET)))
329 define gb_ResTarget_ResTarget
330 $(call gb_ResTarget_get_target,$(1)) : LIBRARY = $(2)
331 $(call gb_ResTarget_get_target,$(1)) : LANGUAGE = $(3)
332 $(call gb_ResTarget_get_target,$(1)) : RESLOCATION = $(2)
333 $(call gb_AllLangResTarget_get_target,$(2)) : $(call gb_ResTarget_get_outdir_target,$(1))
334 $(call gb_AllLangResTarget_get_clean_target,$(2)) : $(call gb_ResTarget_get_clean_target,$(1))
335 $(call gb_ResTarget_get_imagelist_target,$(1)) : $(call gb_ResTarget_get_target,$(1))
337 $(call gb_ResTarget_get_outdir_target,$(1)) : $(call gb_ResTarget_get_target,$(1))
338 $(call gb_ResTarget_get_outdir_target,$(1)) : ILSTTARGET = $(call gb_ResTarget_get_outdir_imagelist_target,$(1))
339 $(call gb_Deliver_add_deliverable,$(call gb_ResTarget_get_outdir_target,$(1)),$(call gb_ResTarget_get_target,$(1)),$(1))
340 $(call gb_Deliver_add_deliverable,$(call gb_ResTarget_get_outdir_imagelist_target,$(1)),$(call gb_ResTarget_get_imagelist_target,$(1)),$(1))
342 endef
344 define gb_ResTarget_add_file
345 $(call gb_ResTarget_get_target,$(1)) : $(2)
347 endef
349 define gb_ResTarget_add_one_srs
350 $(call gb_ResTarget_add_file,$(1),$(call gb_SrsTarget_get_target,$(2)))
351 $(call gb_ResTarget_get_clean_target,$(1)) : $(call gb_SrsTarget_get_clean_target,$(2))
353 endef
355 define gb_ResTarget_add_files
356 $(foreach file,$(2),\
357 $(call gb_ResTarget_add_file,$(1),$(file)))
359 endef
361 define gb_ResTarget_add_srs
362 $(foreach srs,$(2),\
363 $(call gb_ResTarget_add_one_srs,$(1),$(srs)))
365 endef
367 define gb_ResTarget_set_reslocation
368 $(call gb_ResTarget_get_target,$(1)) : RESLOCATION = $(2)
370 endef
373 # AllLangResTarget
375 gb_AllLangResTarget_LANGS := en-US $(filter-out en-US,$(gb_WITH_LANG))
377 define gb_AllLangResTarget_set_langs
378 gb_AllLangResTarget_LANGS := $(1)
379 endef
381 $(call gb_AllLangResTarget_get_clean_target,%) :
382 $(call gb_Helper_abbreviate_dirs,\
383 rm -f $(call gb_AllLangResTarget_get_target,$*))
385 $(call gb_AllLangResTarget_get_target,%) :
386 $(call gb_Helper_abbreviate_dirs,\
387 mkdir -p $(dir $@) && touch $@)
389 define gb_AllLangResTarget_AllLangResTarget
390 $(foreach lang,$(gb_AllLangResTarget_LANGS),\
391 $(call gb_ResTarget_ResTarget,$(1)$(lang),$(1),$(lang)))
392 $$(eval $$(call gb_Module_register_target,$(call gb_AllLangResTarget_get_target,$(1)),$(call gb_AllLangResTarget_get_clean_target,$(1))))
394 endef
396 define gb_AllLangResTarget_add_one_srs
397 $(foreach lang,$(gb_AllLangResTarget_LANGS),\
398 $(call gb_ResTarget_add_one_srs,$(1)$(lang),$(2)))
400 endef
402 define gb_AllLangResTarget_add_srs
403 $(foreach srs,$(2),\
404 $(call gb_AllLangResTarget_add_one_srs,$(1),$(srs)))
406 endef
408 define gb_AllLangResTarget_set_reslocation
409 $(foreach lang,$(gb_AllLangResTarget_LANGS),\
410 $(call gb_ResTarget_set_reslocation,$(1)$(lang),$(2)))
412 endef
414 # vim: set noet sw=4: