1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
3 # This file is part of the LibreOffice project.
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/.
9 # This file incorporates work covered by the following license notice:
11 # Licensed to the Apache Software Foundation (ASF) under one or more
12 # contributor license agreements. See the NOTICE file distributed
13 # with this work for additional information regarding copyright
14 # ownership. The ASF licenses this file to you under the Apache
15 # License, Version 2.0 (the "License"); you may not use this file
16 # except in compliance with the License. You may obtain a copy of
17 # the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 # Overview of dependencies and tasks of SrsTarget
23 # target task depends on
24 # SrsTarget joining the parts SrsPartTarget
26 # SrsPartTarget preprocessing SrsPartMergeTarget (with l10n)
27 # source file (without l10n)
28 # SrsTemplateTarget handling templates SrsTemplatePartTarget
29 # SrsTemplatePartTarget handling template SrsPartMergeTarget
30 # SrsPartMergeTarget merging/transex source file (only needed with l10n)
32 # Overview of dependencies and tasks of AllLangResTarget
34 # target task depends on
35 # AllLangResTarget nothing ResTarget for all active langs
36 # ResTarget running rsc SrsTarget, resources
39 # SrsPartMergeTarget class
41 gb_SrsPartMergeTarget_TRANSEXDEPS
:= $(call gb_Executable_get_runtime_dependencies
,transex3
)
42 gb_SrsPartMergeTarget_TRANSEXCOMMAND
= $(call gb_Executable_get_command
,transex3
)
44 define gb_SrsPartMergeTarget__command
45 MERGEINPUT
=$(call var2file
,$(shell $(gb_MKTEMP
)),100,$(POFILES
)) && \
46 $(call gb_Helper_abbreviate_dirs
,\
47 mkdir
-p
$(dir $(1)) && \
48 $(gb_SrsPartMergeTarget_TRANSEXCOMMAND
) \
53 $(if
$(filter MSC
,$(COM
)),$(if
$(strip $(gb_WITH_LANG
)),-b
))) && \
58 $(call gb_SrsPartMergeTarget_get_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
) $(gb_SrsPartMergeTarget_TRANSEXDEPS
)
59 $(call gb_Output_announce
,$*,$(true
),SRS
,1)
60 $(if
$(filter $(words $(POFILES
)),$(words $(wildcard $(POFILES
)))),\
61 $(call gb_SrsPartMergeTarget__command
,$@
,$*,$<),\
62 mkdir
-p
$(dir $@
) && cp
$< $@
)
64 # translations are optional - use "wildcard" to avoid spurious re-builds
65 # when they don't exist
66 define gb_SrsPartMergeTarget_SrsPartMergeTarget
67 $(call gb_SrsPartMergeTarget__SrsPartMergeTarget_impl
,$(1),$(if
$(2),$(wildcard $(foreach lang
,$(gb_TRANS_LANGS
),$(gb_POLOCATION
)/$(lang
)/$(patsubst %/,%,$(dir $(1))).po
))))
70 define gb_SrsPartMergeTarget__SrsPartMergeTarget_impl
71 $(call gb_SrsPartMergeTarget_get_target
,$(1)) : POFILES
:= $(2)
72 $(call gb_SrsPartMergeTarget_get_target
,$(1)) : $(2)
79 # gb_SrsPartTarget__command_dep
81 gb_ResTarget_RSCDEPS
:= $(call gb_Executable_get_runtime_dependencies
,rsc
)
82 gb_ResTarget_RSCCOMMAND
= $(call gb_Executable_get_command
,rsc
)
84 define gb_SrsPartTarget__command
85 $(call gb_Helper_abbreviate_dirs
,\
86 mkdir
-p
$(dir $(1)) && \
87 RESPONSEFILE
=`$(gb_MKTEMP)` && \
93 $(if $(MERGEDFILE),$(MERGEDFILE),$<)" > $${RESPONSEFILE} && \
94 $(gb_ResTarget_RSCCOMMAND
) -presponse @
$${RESPONSEFILE} && \
95 rm -rf
$${RESPONSEFILE})
99 $(call gb_SrsPartTarget_get_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
) \
100 $(gb_ResTarget_RSCDEPS
) $(gb_SrsPartTarget__command_target
)
101 $(call gb_SrsPartTarget__command_dep
,$*,$<)
102 $(call gb_SrsPartTarget__command
,$@
,$*,$<)
104 ifeq ($(gb_FULLDEPS
),$(true
))
105 $(call gb_SrsPartTarget_get_dep_target
,%) : $(SRCDIR
)/% $(gb_Helper_MISCDUMMY
)
106 $(call gb_Helper_abbreviate_dirs
,\
111 define gb_SrsPartTarget_SrsPartTarget
112 ifeq ($(strip $(gb_WITH_LANG
)),)
113 $(call gb_SrsPartTarget_get_target
,$(1)) : MERGEDFILE
:=
115 $(call gb_SrsPartTarget_get_target
,$(1)) : MERGEDFILE
:= $(call gb_SrsPartMergeTarget_get_target
,$(1))
116 $(call gb_SrsPartTarget_get_target
,$(1)) : $(call gb_SrsPartMergeTarget_get_target
,$(1))
117 $(call gb_SrsPartMergeTarget_SrsPartMergeTarget
,$(1),$(2))
122 # SrsTemplatePartTarget class
124 define gb_SrsTemplatePartTarget_SrsTemplatePartTarget
125 $(call gb_SrsTemplatePartTarget_get_target
,$(1)) : $(call gb_SrsPartMergeTarget_get_target
,$(1))
126 $$(call gb_Helper_abbreviate_dirs
,\
127 mkdir
-p
$$(dir $$@
) && \
129 ifneq ($(strip $(gb_WITH_LANG
)),)
130 $(call gb_SrsPartMergeTarget_SrsPartMergeTarget
,$(1),$(2))
135 # SrsTemplateTarget class
137 # This class handles src templates.
139 # Templates are src files that contain only macros that are then used
140 # from other src files, but these macros contain translatable strings.
141 # Because the processing of src files is done in two phases: 1/
142 # localization and 2/ merging, templates must be translated
143 # independently from the src files that include them. Special care must
144 # be taken to ensure that the right file (i.e., the localized one) is
145 # included; in order to do that, the templates in the source tree are
146 # called foo_tmpl.src, but the localization phase produces foo.src, and
147 # these names (i.e., without the _tmpl suffix) must be placed in
148 # #include statements in other src files.
150 define gb_SrsTemplateTarget__command
151 $(call gb_Helper_abbreviate_dirs
,\
152 mkdir
-p
$(dir $(1)) && \
156 # This machinery ensures that templates are regenerated when switching
157 # from localized to unlocalized configuration and back.
160 # We let _get_target depend on _get_update_target, so after they are
161 # done, _get_target is newer than _get_update_target. If
162 # gb_WITH_LANG changes (from nonempty to empty or the other way around),
163 # _get_target and _get_update_target are switched, therefore _get_target
164 # is now _older_ than _get_update_target and must be regenerated :-)
165 gb_SrsTemplateTarget__get_merged_target
= $(call gb_SrsTemplateTarget_get_target
,$(1))_merged_last
166 gb_SrsTemplateTarget__get_unmerged_target
= $(call gb_SrsTemplateTarget_get_target
,$(1))_unmerged_last
168 ifeq ($(strip $(gb_WITH_LANG
)),)
169 gb_SrsTemplateTarget__get_target
= $(call gb_SrsTemplateTarget__get_unmerged_target
,$(1))
170 gb_SrsTemplateTarget__get_update_target
= $(call gb_SrsTemplateTarget__get_merged_target
,$(1))
172 gb_SrsTemplateTarget__get_target
= $(call gb_SrsTemplateTarget__get_merged_target
,$(1))
173 gb_SrsTemplateTarget__get_update_target
= $(call gb_SrsTemplateTarget__get_unmerged_target
,$(1))
176 define gb_SrsTemplateTarget_SrsTemplateTarget
177 $(call gb_SrsTemplateTarget_get_target
,$(1)) : PARTS
:=
178 $(call gb_SrsTemplateTarget_get_clean_target
,$(1)) : PARTS
:=
179 $(call gb_SrsTemplateTarget_get_target
,$(1)) : $(call gb_SrsTemplateTarget__get_target
,$(1))
180 $(call gb_SrsTemplateTarget__get_target
,$(1)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
184 .PHONY
: $(call gb_SrsTemplateTarget_get_target
,%_last
)
185 $(call gb_SrsTemplateTarget_get_target
,%_last
) :
186 $(call gb_SrsTemplateTarget__command
,$@
)
188 .PHONY
: $(call gb_SrsTemplateTarget_get_target
,%)
189 $(call gb_SrsTemplateTarget_get_target
,%) :
190 $(if
$(strip $(PARTS
)),$(call gb_Output_announce
,$*,$(true
),SRT
,4))
191 $(call gb_SrsTemplateTarget__command
,$@
)
193 .PHONY
: $(call gb_SrsTemplateTarget_get_clean_target
,%)
194 $(call gb_SrsTemplateTarget_get_clean_target
,%) :
195 $(if
$(strip $(PARTS
)),$(call gb_Output_announce
,$*,$(false
),SRT
,4))
196 -$(call gb_Helper_abbreviate_dirs
,\
197 rm -f
$(call gb_SrsTemplateTarget_get_target
,$*) \
198 $(call gb_SrsTemplateTarget__get_merged_target
,$*) \
199 $(call gb_SrsTemplateTarget__get_unmerged_target
,$*) \
200 $(foreach part
,$(PARTS
),$(call gb_SrsTemplatePartTarget_get_target
,$(part
))) \
201 $(foreach part
,$(PARTS
),$(call gb_SrsPartMergeTarget_get_target
,$(part
))))
203 define gb_SrsTemplateTarget_add_file
204 $(call gb_SrsTemplatePartTarget_SrsTemplatePartTarget
,$(2),$(3))
205 $(call gb_SrsTemplateTarget_get_target
,$(1)) : PARTS
+= $(2)
206 $(call gb_SrsTemplateTarget_get_clean_target
,$(1)) : PARTS
+= $(2)
207 $(call gb_SrsTemplateTarget__get_target
,$(1)) : $(call gb_SrsTemplatePartTarget_get_target
,$(2))
208 $(call gb_SrsTemplatePartTarget_get_target
,$(2)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
209 $(call gb_SrsPartMergeTarget_get_target
,$(2)) : $(call gb_SrsTemplateTarget__get_update_target
,$(1))
215 gb_SrsTarget_DEFAULTDEFS
:= $(gb_GLOBALDEFS
)
217 .PHONY
: $(call gb_SrsTarget_get_clean_target
,%)
218 $(call gb_SrsTarget_get_clean_target
,%) :
219 $(call gb_Output_announce
,$*,$(false
),SRS
,1)
220 -$(call gb_Helper_abbreviate_dirs
,\
221 rm -f
$(call gb_SrsTarget_get_target
,$*) \
222 $(call gb_SrsTarget_get_dep_target
,$*) \
223 $(foreach part
,$(PARTS
),$(call gb_SrsPartTarget_get_target
,$(part
))) \
224 $(foreach part
,$(PARTS
),$(call gb_SrsPartTarget_get_dep_target
,$(part
))) \
225 $(foreach part
,$(PARTS
),$(call gb_SrsPartMergeTarget_get_target
,$(part
))))
227 ifeq ($(gb_FULLDEPS
),$(true
))
228 define gb_SrsTarget__command_dep
229 $(call gb_Output_announce
,SRS
:$(2),$(true
),DEP
,1)
230 $(call gb_Helper_abbreviate_dirs
,\
231 mkdir
-p
$(dir $(1)) && \
232 RESPONSEFILE
=$(call var2file
,$(shell $(gb_MKTEMP
)),200,\
233 $(foreach part
,$(PARTS
),$(call gb_SrsPartTarget_get_dep_target
,$(part
)))) && \
234 $(call gb_Executable_get_command
,concat-deps
) $${RESPONSEFILE} > $(1)) && \
235 rm -f
$${RESPONSEFILE}
239 $(call gb_SrsTarget_get_headers_target
,%) :
240 $(call gb_Helper_abbreviate_dirs
,\
241 mkdir
-p
$(dir $@
) && touch
$@
)
243 # This recipe actually also builds the dep-target as a side-effect, which
244 # is an optimization to reduce incremental build time.
245 $(call gb_SrsTarget_get_target
,%) :
246 ifeq ($(gb_FULLDEPS
),$(true
))
247 $(call gb_SrsTarget__command_dep
,$(call gb_SrsTarget_get_dep_target
,$*),$*)
249 $(call gb_Output_announce
,$*,$(true
),SRS
,1)
250 $(call gb_Helper_abbreviate_dirs
,\
251 mkdir
-p
$(dir $@
) && \
254 ifeq ($(gb_FULLDEPS
),$(true
))
255 $(call gb_SrsTarget_get_dep_target
,%) : \
256 $(call gb_Executable_get_runtime_dependencies
,concat-deps
)
257 $(call gb_SrsTarget__command_dep
,$@
,$*)
260 define gb_SrsTarget_SrsTarget
261 $(call gb_SrsTemplateTarget_SrsTemplateTarget
,$(1))
262 $(call gb_SrsTarget_get_target
,$(1)) : DEFS
:= $(gb_SrsTarget_DEFAULTDEFS
)
263 $(call gb_SrsTarget_get_target
,$(1)) : INCLUDE
:= $(SOLARINC
)
264 $(call gb_SrsTarget_get_clean_target
,$(1)) : PARTS
:=
265 $(call gb_SrsTarget_get_target
,$(1)) : PARTS
:=
266 $(call gb_SrsTarget_get_target
,$(1)) : $(call gb_SrsTemplateTarget_get_target
,$(1))
267 $(call gb_SrsTarget_get_clean_target
,$(1)) : $(call gb_SrsTemplateTarget_get_clean_target
,$(1))
268 ifeq ($(gb_FULLDEPS
),$(true
))
269 $(call gb_SrsTarget_get_dep_target
,$(1)) : PARTS
:=
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_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)
301 ifeq ($(gb_FULLDEPS
),$(true
))
302 $(call gb_SrsTarget_get_dep_target
,$(1)) : PARTS
+= $(2)
307 define gb_SrsTarget_add_file
308 $(call gb_SrsTarget__add_file
,$(1),$(2),$(true
))
312 define gb_SrsTarget_add_files
313 $(foreach file
,$(2),$(call gb_SrsTarget_add_file
,$(1),$(file
)))
317 # Add a srs file that does not have any localizable content.
318 # These files will be copied instead of parsing them with transex3.
320 # gb_SrsTarget_add_nonlocalizable_file srs file
321 define gb_SrsTarget_add_nonlocalizable_file
322 $(call gb_SrsTarget__add_file
,$(1),$(2),$(false
))
326 # Add srs files that do not have any localizable content.
328 # gb_SrsTarget_add_nonlocalizable_files srs file(s)
329 define gb_SrsTarget_add_nonlocalizable_files
330 $(foreach file
,$(2),$(call gb_SrsTarget_add_nonlocalizable_file
,$(1),$(file
)))
334 define gb_SrsTarget_add_template
335 $(call gb_SrsTemplateTarget_add_file
,$(1),$(2),$(true
))
339 define gb_SrsTarget_add_templates
340 $(foreach template
,$(2),$(call gb_SrsTarget_add_template
,$(1),$(template
)))
344 # Add a srs template that does not have any localizable content.
345 # These files will be copied instead of parsing them with transex3.
347 # gb_SrsTarget_add_nonlocalizable_template srs template
348 define gb_SrsTarget_add_nonlocalizable_template
349 $(call gb_SrsTemplateTarget_add_file
,$(1),$(2),$(false
))
353 # Add srs templates that do not have any localizable content.
355 # gb_SrsTarget_add_nonlocalizable_templates srs template(s)
356 define gb_SrsTarget_add_nonlocalizable_templates
357 $(foreach template
,$(2),$(call gb_SrsTarget_add_nonlocalizable_template
,$(1),$(template
)))
362 # Use templates built by another SrsTarget.
364 # gb_SrsTarget_use_srstarget srs other-srs
365 define gb_SrsTarget_use_srstarget
366 $(call gb_SrsTarget_get_headers_target
,$(1)) : $(call gb_SrsTemplateTarget_get_target
,$(2))
370 # Use templates built by other SrsTargets.
372 # gb_SrsTarget_use_srstargets srs other-srs(s)
373 define gb_SrsTarget_use_srstargets
374 $(foreach srstarget
,$(2),$(call gb_SrsTarget_use_srstarget
,$(1),$(srstarget
)))
381 gb_ResTarget_DEFIMAGESLOCATION
:= $(SRCDIR
)/icon-themes
/galaxy
/
383 $(call gb_ResTarget_get_clean_target
,%) :
384 $(call gb_Output_announce
,$*,$(false
),RES
,2)
385 $(call gb_Helper_abbreviate_dirs
,\
387 $(call gb_ResTarget_get_target
,$*) \
388 $(call gb_ResTarget_get_install_target
,$*) \
389 $(call gb_ResTarget_get_imagelist_target
,$*))
391 $(call gb_ResTarget_get_target
,%) : $(gb_Helper_MISCDUMMY
) \
392 $(gb_ResTarget_RSCDEPS
)
393 $(call gb_Output_announce
,$*,$(true
),RES
,2)
394 $(call gb_Helper_abbreviate_dirs
,\
396 $(dir $(call gb_ResTarget_get_imagelist_target
,$*)) && \
397 RESPONSEFILE
=`$(gb_MKTEMP)` && \
401 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/$(LIBRARY) \
402 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst/$(LANGUAGE) \
403 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst \
404 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/$(LANGUAGE) \
405 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res \
406 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION) \
407 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res/$(LANGUAGE) \
408 -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res \
409 -subMODULE=$(gb_ResTarget_DEFIMAGESLOCATION) \
410 -subGLOBALRES=$(gb_ResTarget_DEFIMAGESLOCATION)res \
411 -oil=$(dir $(call gb_ResTarget_get_imagelist_target,$*)) \
412 $(filter-out $(gb_Helper_MISCDUMMY) $(gb_ResTarget_RSCDEPS),$^)" \
413 > $${RESPONSEFILE} && \
414 $(gb_ResTarget_RSCCOMMAND
) @
$${RESPONSEFILE} && \
415 rm -f
$${RESPONSEFILE})
417 #$(info $(call gb_ResTarget_get_target,$(1)))
418 define gb_ResTarget_ResTarget
419 $(call gb_ResTarget_get_target
,$(1)) : LIBRARY
= $(2)
420 $(call gb_ResTarget_get_target
,$(1)) : LANGUAGE
= $(3)
421 $(call gb_ResTarget_get_target
,$(1)) : RESLOCATION
= $(2)
422 $(call gb_AllLangResTarget_get_clean_target
,$(2)) : $(call gb_ResTarget_get_clean_target
,$(1))
423 $(call gb_ResTarget_get_imagelist_target
,$(1)) : $(call gb_ResTarget_get_target
,$(1))
427 define gb_ResTarget_add_file
428 $(call gb_ResTarget_get_target
,$(1)) : $(2)
432 define gb_ResTarget_add_one_srs
433 $(call gb_ResTarget_add_file
,$(1),$(call gb_SrsTarget_get_target
,$(2)))
434 $(call gb_ResTarget_get_clean_target
,$(1)) : $(call gb_SrsTarget_get_clean_target
,$(2))
438 define gb_ResTarget_add_files
439 $(foreach file
,$(2),\
440 $(call gb_ResTarget_add_file
,$(1),$(file
)))
444 define gb_ResTarget_add_srs
446 $(call gb_ResTarget_add_one_srs
,$(1),$(srs
)))
450 define gb_ResTarget_set_reslocation
451 $(call gb_ResTarget_get_target
,$(1)) : RESLOCATION
= $(2)
458 gb_AllLangResTarget_LANGS
:= en-US
$(filter-out en-US
,$(gb_WITH_LANG
))
460 define gb_AllLangResTarget_set_langs
461 gb_AllLangResTarget_LANGS
:= $(1)
464 $(call gb_AllLangResTarget_get_clean_target
,%) :
465 $(call gb_Helper_abbreviate_dirs
,\
466 rm -f
$(call gb_AllLangResTarget_get_target
,$*))
468 $(call gb_AllLangResTarget_get_target
,%) :
469 $(call gb_Helper_abbreviate_dirs
,\
470 mkdir
-p
$(dir $@
) && touch
$@
)
472 gb_ResTarget_get_install_target
= $(INSTROOT
)/$(LIBO_SHARE_RESOURCE_FOLDER
)/$(1).res
474 gb_AllLangResTarget_ALLTARGETS
:=
475 define gb_AllLangResTarget_AllLangResTarget
476 gb_AllLangResTarget_ALLTARGETS
+= $(1)
477 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
478 $(call gb_ResTarget_ResTarget
,$(1)$(lang
),$(1),$(lang
)))
480 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
481 $(call gb_Helper_install
,$(call gb_AllLangResTarget_get_target
,$(1)), \
482 $(call gb_ResTarget_get_install_target
,$(1)$(lang
)), \
483 $(call gb_ResTarget_get_target
,$(1)$(lang
))))
485 $$(eval
$$(call gb_Module_register_target
,$(call gb_AllLangResTarget_get_target
,$(1)),$(call gb_AllLangResTarget_get_clean_target
,$(1))))
486 $(call gb_Helper_make_userfriendly_targets
,$(1),AllLangResTarget
)
487 $(call gb_Postprocess_register_target
,AllResources
,AllLangResTarget
,$(1))
491 define gb_AllLangResTarget_add_one_srs
492 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
493 $(call gb_ResTarget_add_one_srs
,$(1)$(lang
),$(2)))
497 define gb_AllLangResTarget_add_srs
499 $(call gb_AllLangResTarget_add_one_srs
,$(1),$(srs
)))
503 define gb_AllLangResTarget_set_reslocation
504 $(foreach lang
,$(gb_AllLangResTarget_LANGS
),\
505 $(call gb_ResTarget_set_reslocation
,$(1)$(lang
),$(2)))
509 # vim: set noet sw=4: