1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
2 #*************************************************************************
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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
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_TRANSEXCOMMAND
:= \
52 $(gb_Helper_set_ld_path
) $(gb_SrsPartMergeTarget_TRANSEXTARGET
)
54 define gb_SrsPartMergeTarget__command
55 $(call gb_Output_announce
,$(3),$(true
),srs
,1)
56 MERGEINPUT
=`$(gb_MKTEMP)` && \
57 echo
$(POFILES
) > $${MERGEINPUT} && \
58 $(call gb_Helper_abbreviate_dirs
,\
59 mkdir
-p
$(dir $(1)) && \
60 $(gb_SrsPartMergeTarget_TRANSEXCOMMAND
) \
61 -p
$(firstword $(subst /, ,$(2))) \
70 $(call gb_SrsPartMergeTarget_get_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
) $(gb_SrsPartMergeTarget_TRANSEXTARGET
)
71 $(if
$(filter $(words $(POFILES
)),$(words $(wildcard $(POFILES
)))),\
72 $(call gb_SrsPartMergeTarget__command
,$@
,$*,$<),\
73 mkdir
-p
$(dir $@
) && cp
$< $@
)
75 define gb_SrsPartMergeTarget_SrsPartMergeTarget
76 $(call gb_SrsPartMergeTarget__SrsPartMergeTarget_impl
,$(1),$(if
$(2),$(foreach lang
,$(filter-out qtz
,$(filter-out en-US
,$(gb_WITH_LANG
))),$(gb_POLOCATION
)/$(lang
)/$(patsubst %/,%,$(dir $(1))).po
)))
79 define gb_SrsPartMergeTarget__SrsPartMergeTarget_impl
80 $(call gb_SrsPartMergeTarget_get_target
,$(1)) : POFILES
:= $(2)
81 $(call gb_SrsPartMergeTarget_get_target
,$(1)) : $(2)
88 # gb_SrsPartTarget__command_dep
90 gb_ResTarget_RSCTARGET
:= $(call gb_Executable_get_target_for_build
,rsc
)
91 gb_ResTarget_RSCCOMMAND
:= $(gb_Helper_set_ld_path
) SOLARBINDIR
=$(OUTDIR_FOR_BUILD
)/bin
$(gb_ResTarget_RSCTARGET
)
93 define gb_SrsPartTarget__command
94 $(call gb_Helper_abbreviate_dirs
,\
95 mkdir
-p
$(dir $(1)) && \
96 RESPONSEFILE
=`$(gb_MKTEMP)` && \
102 $(if $(MERGEDFILE),$(MERGEDFILE),$<)" > $${RESPONSEFILE} && \
103 $(gb_ResTarget_RSCCOMMAND
) -presponse @
$${RESPONSEFILE} && \
104 rm -rf
$${RESPONSEFILE})
108 $(call gb_SrsPartTarget_get_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
) \
109 $(gb_ResTarget_RSCTARGET
)
110 $(call gb_SrsPartTarget__command_dep
,$*,$<)
111 $(call gb_SrsPartTarget__command
,$@
,$*,$<)
113 ifeq ($(gb_FULLDEPS
),$(true
))
114 $(call gb_SrsPartTarget_get_dep_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
)
115 $(call gb_Helper_abbreviate_dirs
,\
116 mkdir
-p
$(dir $@
) && \
117 echo
'$(call gb_SrsPartTarget_get_target,$*) : $(gb_Helper_PHONY)' > $@
)
121 define gb_SrsPartTarget_SrsPartTarget
122 ifeq ($(strip $(gb_WITH_LANG
)),)
123 $(call gb_SrsPartTarget_get_target
,$(1)) : MERGEDFILE
:=
125 $(call gb_SrsPartTarget_get_target
,$(1)) : MERGEDFILE
:= $(call gb_SrsPartMergeTarget_get_target
,$(1))
126 $(call gb_SrsPartTarget_get_target
,$(1)) : $(call gb_SrsPartMergeTarget_get_target
,$(1))
127 $(call gb_SrsPartMergeTarget_SrsPartMergeTarget
,$(1),$(2))
132 # SrsTemplatePartTarget class
134 define gb_SrsTemplatePartTarget_SrsTemplatePartTarget
135 $(call gb_SrsTemplatePartTarget_get_target
,$(1)) : $(call gb_SrsPartMergeTarget_get_target
,$(1))
136 $$(call gb_Helper_abbreviate_dirs
,\
137 mkdir
-p
$$(dir $$@
) && \
139 ifneq ($(strip $(gb_WITH_LANG
)),)
140 $(call gb_SrsPartMergeTarget_SrsPartMergeTarget
,$(1),$(true
))
145 # SrsTemplateTarget class
147 # This class handles src templates.
149 # Templates are src files that contain only macros that are then used
150 # from other src files, but these macros contain translatable strings.
151 # Because the processing of src files is done in two phases: 1/
152 # localization and 2/ merging, templates must be translated
153 # independently from the src files that include them. Special care must
154 # be taken to ensure that the right file (i.e., the localized one) is
155 # included; in order to do that, the templates in the source tree are
156 # called foo_tmpl.src, but the localization phase produces foo.src, and
157 # these names (i.e., without the _tmpl suffix) must be placed in
158 # #include statements in other src files.
160 define gb_SrsTemplateTarget__command
161 $(call gb_Helper_abbreviate_dirs
,\
162 mkdir
-p
$(dir $(1)) && \
166 # This machinery ensures that templates are regenerated when switching
167 # from localized to unlocalized configuration and back.
170 # We let _get_target depend on _get_update_target, so after they are
171 # done, _get_target is newer than _get_update_target. If
172 # gb_WITH_LANG changes (from nonempty to empty or the other way around),
173 # _get_target and _get_update_target are switched, therefore _get_target
174 # is now _older_ than _get_update_target and must be regenerated :-)
175 gb_SrsTemplateTarget__get_merged_target
= $(call gb_SrsTemplateTarget_get_target
,$(1))_merged_last
176 gb_SrsTemplateTarget__get_unmerged_target
= $(call gb_SrsTemplateTarget_get_target
,$(1))_unmerged_last
178 ifeq ($(strip $(gb_WITH_LANG
)),)
179 gb_SrsTemplateTarget__get_target
= $(call gb_SrsTemplateTarget__get_unmerged_target
,$(1))
180 gb_SrsTemplateTarget__get_update_target
= $(call gb_SrsTemplateTarget__get_merged_target
,$(1))
182 gb_SrsTemplateTarget__get_target
= $(call gb_SrsTemplateTarget__get_merged_target
,$(1))
183 gb_SrsTemplateTarget__get_update_target
= $(call gb_SrsTemplateTarget__get_unmerged_target
,$(1))
186 define gb_SrsTemplateTarget_SrsTemplateTarget
187 $(call gb_SrsTemplateTarget_get_target
,$(1)) : PARTS
:=
188 $(call gb_SrsTemplateTarget_get_clean_target
,$(1)) : PARTS
:=
189 $(call gb_SrsTemplateTarget_get_target
,$(1)) : $(call gb_SrsTemplateTarget__get_target
,$(1))
190 $(call gb_SrsTemplateTarget__get_target
,$(1)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
194 .PHONY
: $(call gb_SrsTemplateTarget_get_target
,%_last
)
195 $(call gb_SrsTemplateTarget_get_target
,%_last
) :
196 $(call gb_SrsTemplateTarget__command
,$@
)
198 .PHONY
: $(call gb_SrsTemplateTarget_get_target
,%)
199 $(call gb_SrsTemplateTarget_get_target
,%) :
200 $(if
$(strip $(PARTS
)),$(call gb_Output_announce
,$*,$(true
),SRT
,4))
201 $(call gb_SrsTemplateTarget__command
,$@
)
203 .PHONY
: $(call gb_SrsTemplateTarget_get_clean_target
,%)
204 $(call gb_SrsTemplateTarget_get_clean_target
,%) :
205 $(if
$(strip $(PARTS
)),$(call gb_Output_announce
,$*,$(false
),SRT
,4))
206 -$(call gb_Helper_abbreviate_dirs
,\
207 rm -f
$(call gb_SrsTemplateTarget_get_target
,$*) \
208 $(call gb_SrsTemplateTarget__get_merged_target
,$*) \
209 $(call gb_SrsTemplateTarget__get_unmerged_target
,$*) \
210 $(foreach part
,$(PARTS
),$(call gb_SrsTemplatePartTarget_get_target
,$(part
))) \
211 $(foreach part
,$(PARTS
),$(call gb_SrsPartMergeTarget_get_target
,$(part
))))
213 define gb_SrsTemplateTarget_add_file
214 $(call gb_SrsTemplatePartTarget_SrsTemplatePartTarget
,$(2))
215 $(call gb_SrsTemplateTarget_get_target
,$(1)) : PARTS
+= $(2)
216 $(call gb_SrsTemplateTarget_get_clean_target
,$(1)) : PARTS
+= $(2)
217 $(call gb_SrsTemplateTarget__get_target
,$(1)) : $(call gb_SrsTemplatePartTarget_get_target
,$(2))
218 $(call gb_SrsTemplatePartTarget_get_target
,$(2)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
219 $(call gb_SrsPartMergeTarget_get_target
,$(2)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
225 gb_SrsTarget_DEFAULTDEFS
:= $(gb_GLOBALDEFS
)
227 .PHONY
: $(call gb_SrsTarget_get_clean_target
,%)
228 $(call gb_SrsTarget_get_clean_target
,%) :
229 $(call gb_Output_announce
,$*,$(false
),SRS
,1)
230 -$(call gb_Helper_abbreviate_dirs
,\
231 rm -f
$(call gb_SrsTarget_get_target
,$*) \
232 $(call gb_SrsTarget_get_dep_target
,$*) \
233 $(foreach part
,$(PARTS
),$(call gb_SrsPartTarget_get_target
,$(part
))) \
234 $(foreach part
,$(PARTS
),$(call gb_SrsPartTarget_get_dep_target
,$(part
))) \
235 $(foreach part
,$(PARTS
),$(call gb_SrsPartMergeTarget_get_target
,$(part
))))
237 ifeq ($(gb_FULLDEPS
),$(true
))
238 define gb_SrsTarget__command_dep
239 $(call gb_Output_announce
,SRS
:$(2),$(true
),DEP
,1)
240 $(call gb_Helper_abbreviate_dirs
,\
241 mkdir
-p
$(dir $(1)) && \
246 $(call gb_SrsTarget_get_external_headers_target
,%) :
247 $(call gb_Helper_abbreviate_dirs
,\
248 mkdir
-p
$(dir $@
) && touch
$@
)
250 $(call gb_SrsTarget_get_target
,%) :
251 $(call gb_Output_announce
,$*,$(true
),SRS
,1)
252 $(call gb_Helper_abbreviate_dirs
,\
253 mkdir
-p
$(dir $@
) && \
256 ifeq ($(gb_FULLDEPS
),$(true
))
257 $(call gb_SrsTarget_get_dep_target
,%) :
258 $(call gb_SrsTarget__command_dep
,$@
,$*,$^
)
261 define gb_SrsTarget_SrsTarget
262 $(call gb_SrsTemplateTarget_SrsTemplateTarget
,$(1))
263 $(call gb_SrsTarget_get_target
,$(1)) : DEFS
:= $(gb_SrsTarget_DEFAULTDEFS
)
264 $(call gb_SrsTarget_get_target
,$(1)) : INCLUDE
:= $(SOLARINC
)
265 $(call gb_SrsTarget_get_clean_target
,$(1)) : PARTS
:=
266 $(call gb_SrsTarget_get_target
,$(1)) : PARTS
:=
267 $(call gb_SrsTarget_get_target
,$(1)) : $(call gb_SrsTemplateTarget_get_target
,$(1))
268 $(call gb_SrsTarget_get_clean_target
,$(1)) : $(call gb_SrsTemplateTarget_get_clean_target
,$(1))
269 ifeq ($(gb_FULLDEPS
),$(true
))
270 -include $(call gb_SrsTarget_get_dep_target
,$(1))
275 define gb_SrsTarget_set_defs
276 $(call gb_SrsTarget_get_target
,$(1)) : DEFS
:= $(2)
277 ifeq ($(gb_FULLDEPS
),$(true
))
278 $(call gb_SrsTarget_get_dep_target
,$(1)) : DEFS
:= $(2)
283 define gb_SrsTarget_set_include
284 $(call gb_SrsTarget_get_target
,$(1)) : INCLUDE
:= $(2)
285 ifeq ($(gb_FULLDEPS
),$(true
))
286 $(call gb_SrsTarget_get_dep_target
,$(1)) : INCLUDE
:= $(2)
291 define gb_SrsTarget__add_file
292 ifeq ($(gb_FULLDEPS
),$(true
))
293 $(call gb_SrsTarget_get_dep_target
,$(1)) : $(call gb_SrsPartTarget_get_dep_target
,$(2))
295 $(call gb_SrsPartTarget_SrsPartTarget
,$(2),$(3))
296 $(call gb_SrsTarget_get_target
,$(1)) : $(call gb_SrsPartTarget_get_target
,$(2))
297 $(call gb_SrsPartTarget_get_target
,$(2)) :|
$(call gb_SrsTarget_get_external_headers_target
,$(1))
298 $(call gb_SrsPartTarget_get_target
,$(2)) :|
$(call gb_SrsTemplateTarget_get_target
,$(1))
299 $(call gb_SrsTarget_get_clean_target
,$(1)) : PARTS
+= $(2)
300 $(call gb_SrsTarget_get_target
,$(1)) : PARTS
+= $(2)
304 define gb_SrsTarget_add_file
305 $(call gb_SrsTarget__add_file
,$(1),$(2),$(true
))
309 define gb_SrsTarget_add_files
310 $(foreach file
,$(2),$(call gb_SrsTarget_add_file
,$(1),$(file
)))
314 # Add a srs file that does not have any localizable content.
316 # This only exists to allow dependencies on SDF files. It must be used
317 # if neither of the srs files in a directory have any localizable
318 # content, because in that case there is going to be no SDF generated
319 # for the directory. Therefore we must avoid depending on the SDF.
321 # gb_SrsTarget_add_nonlocalized_file srs file
322 define gb_SrsTarget_add_nonlocalized_file
323 $(call gb_SrsTarget__add_file
,$(1),$(2),$(false
))
327 # Add srs files that do not have any localizable content.
329 # gb_SrsTarget_add_nonlocalized_files srs file(s)
330 define gb_SrsTarget_add_nonlocalized_files
331 $(foreach file
,$(2),$(call gb_SrsTarget_add_nonlocalized_file
,$(1),$(file
)))
335 define gb_SrsTarget_add_template
336 $(call gb_SrsTemplateTarget_add_file
,$(1),$(2))
340 define gb_SrsTarget_add_templates
341 $(foreach template
,$(2),$(call gb_SrsTarget_add_template
,$(1),$(template
)))
345 define gb_SrsTarget_use_package
346 $(call gb_SrsTarget_get_external_headers_target
,$(1)) : $(call gb_Package_get_target
,$(2))
350 define gb_SrsTarget_use_packages
351 $(foreach package
,$(2),$(call gb_SrsTarget_use_package
,$(1),$(package
)))
358 gb_ResTarget_DEFIMAGESLOCATION
:= $(SRCDIR
)/icon-themes
/galaxy
/
360 $(call gb_ResTarget_get_clean_target
,%) :
361 $(call gb_Output_announce
,$*,$(false
),RES
,2)
362 $(call gb_Helper_abbreviate_dirs
,\
363 rm -f
$(call gb_ResTarget_get_target
,$*) $(call gb_ResTarget_get_imagelist_target
,$*) $(call gb_ResTarget_get_outdir_target
,$*))
365 $(call gb_ResTarget_get_target
,%) : $(gb_Helper_MISCDUMMY
) \
366 $(gb_ResTarget_RSCTARGET
)
367 $(call gb_Output_announce
,$*,$(true
),RES
,2)
368 $(call gb_Helper_abbreviate_dirs
,\
369 mkdir
-p
$(dir $@
) $(OUTDIR
)/bin \
370 $(dir $(call gb_ResTarget_get_imagelist_target
,$*)) && \
371 RESPONSEFILE
=`$(gb_MKTEMP)` && \
375 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/$(LIBRARY) \
376 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst/$(LANGUAGE) \
377 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst \
378 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/$(LANGUAGE) \
379 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res \
380 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION) \
381 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res/$(LANGUAGE) \
382 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res \
383 -subMODULE=$(gb_ResTarget_DEFIMAGESLOCATION) \
384 -subGLOBALRES=$(gb_ResTarget_DEFIMAGESLOCATION)res \
385 -oil=$(dir $(call gb_ResTarget_get_imagelist_target,$*)) \
386 $(filter-out $(gb_Helper_MISCDUMMY) $(gb_ResTarget_RSCTARGET),$^)" \
387 > $${RESPONSEFILE} && \
388 $(gb_ResTarget_RSCCOMMAND
) @
$${RESPONSEFILE} && \
389 rm -f
$${RESPONSEFILE})
391 $(call gb_ResTarget_get_outdir_target
,%) :
392 $(call gb_Deliver_deliver
,$<,$@
)
394 define gb_ResTarget_ResTarget
395 $(call gb_ResTarget_get_target
,$(1)) : LIBRARY
= $(2)
396 $(call gb_ResTarget_get_target
,$(1)) : LANGUAGE
= $(3)
397 $(call gb_ResTarget_get_target
,$(1)) : RESLOCATION
= $(2)
398 $(call gb_AllLangResTarget_get_target
,$(2)) : $(call gb_ResTarget_get_outdir_target
,$(1))
399 $(call gb_AllLangResTarget_get_clean_target
,$(2)) : $(call gb_ResTarget_get_clean_target
,$(1))
400 $(call gb_ResTarget_get_imagelist_target
,$(1)) : $(call gb_ResTarget_get_target
,$(1))
402 $(call gb_ResTarget_get_outdir_target
,$(1)) : $(call gb_ResTarget_get_target
,$(1))
403 $(call gb_Deliver_add_deliverable
,$(call gb_ResTarget_get_outdir_target
,$(1)),$(call gb_ResTarget_get_target
,$(1)),$(1))
407 define gb_ResTarget_add_file
408 $(call gb_ResTarget_get_target
,$(1)) : $(2)
412 define gb_ResTarget_add_one_srs
413 $(call gb_ResTarget_add_file
,$(1),$(call gb_SrsTarget_get_target
,$(2)))
414 $(call gb_ResTarget_get_clean_target
,$(1)) : $(call gb_SrsTarget_get_clean_target
,$(2))
418 define gb_ResTarget_add_files
419 $(foreach file
,$(2),\
420 $(call gb_ResTarget_add_file
,$(1),$(file
)))
424 define gb_ResTarget_add_srs
426 $(call gb_ResTarget_add_one_srs
,$(1),$(srs
)))
430 define gb_ResTarget_set_reslocation
431 $(call gb_ResTarget_get_target
,$(1)) : RESLOCATION
= $(2)
438 gb_AllLangResTarget_LANGS
:= en-US
$(filter-out en-US
,$(gb_WITH_LANG
))
440 define gb_AllLangResTarget_set_langs
441 gb_AllLangResTarget_LANGS
:= $(1)
444 $(call gb_AllLangResTarget_get_clean_target
,%) :
445 $(call gb_Helper_abbreviate_dirs
,\
446 rm -f
$(call gb_AllLangResTarget_get_target
,$*))
448 $(call gb_AllLangResTarget_get_target
,%) :
449 $(call gb_Helper_abbreviate_dirs
,\
450 mkdir
-p
$(dir $@
) && touch
$@
)
452 define gb_AllLangResTarget_AllLangResTarget
453 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
454 $(call gb_ResTarget_ResTarget
,$(1)$(lang
),$(1),$(lang
)))
455 $$(eval
$$(call gb_Module_register_target
,$(call gb_AllLangResTarget_get_target
,$(1)),$(call gb_AllLangResTarget_get_clean_target
,$(1))))
459 define gb_AllLangResTarget_add_one_srs
460 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
461 $(call gb_ResTarget_add_one_srs
,$(1)$(lang
),$(2)))
465 define gb_AllLangResTarget_add_srs
467 $(call gb_AllLangResTarget_add_one_srs
,$(1),$(srs
)))
471 define gb_AllLangResTarget_set_reslocation
472 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
473 $(call gb_ResTarget_set_reslocation
,$(1)$(lang
),$(2)))
477 # vim: set noet sw=4: