haiku/build/jam/LocaleRules
Ingo Weinhold b0944c78b0 More work towards hybrid support
* All packaging architecture dependent variables do now have a
  respective suffix and are set up for each configured packaging
  architecture, save for the kernel and boot loader variables, which
  are still only set up for the primary architecture.
  For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
  and TARGET_LIBSTDC++ are set to the respective values for the primary
  packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
  multiple packaging architectures. Generally the respective targets are
  (additionally) gristed with the packaging architecture. For libraries
  the additional grist is usually omitted for the primary architecture
  (e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
  Jamfiles for targets built only for the primary architecture don't
  need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
  cross devel package as well as for libbe (untested).
2013-08-01 08:54:06 +02:00

188 lines
6.0 KiB
Plaintext

# Localization rules
# Extract catalog entries from the sourcefile and put the output textfile in
# target. This output file is then used to create the binary catalog with
# linkcatkeys.
rule ExtractCatalogEntries target : sources : signature : regexp
{
# get compiler and defines for the platform
local headers ;
local sysHeaders ;
local cc ;
local defines ;
local includesSeparator ;
local localIncludesOption ;
local systemIncludesOption ;
on $(target) { # use on $(target) variable values
defines = $(DEFINES) ;
headers = $(HAIKU_CONFIG_HEADERS) $(SEARCH_SOURCE) $(SUBDIRHDRS)
$(HDRS) ;
sysHeaders = $(SUBDIRSYSHDRS) $(SYSHDRS) ;
if $(PLATFORM) = host {
sysHeaders += $(HOST_HDRS) ;
defines += $(HOST_DEFINES) ;
cc = $(HOST_CC) ;
if $(USES_BE_API) {
sysHeaders += $(HOST_BE_API_HEADERS) ;
}
includesSeparator = $(HOST_INCLUDES_SEPARATOR) ;
localIncludesOption = $(HOST_LOCAL_INCLUDES_OPTION) ;
systemIncludesOption = $(HOST_SYSTEM_INCLUDES_OPTION) ;
} else {
sysHeaders += $(TARGET_HDRS_$(TARGET_PACKAGING_ARCH)) ;
defines += $(TARGET_DEFINES_$(TARGET_PACKAGING_ARCH))
$(TARGET_DEFINES) ;
cc = $(TARGET_CC_$(TARGET_PACKAGING_ARCH)) ;
includesSeparator
= $(TARGET_INCLUDES_SEPARATOR_$(TARGET_PACKAGING_ARCH)) ;
localIncludesOption
= $(TARGET_LOCAL_INCLUDES_OPTION_$(TARGET_PACKAGING_ARCH)) ;
systemIncludesOption
= $(TARGET_SYSTEM_INCLUDES_OPTION_$(TARGET_PACKAGING_ARCH)) ;
}
}
DEFINES on $(target) = $(defines) ;
CCDEFS on $(target) = [ FDefines $(defines) ] ;
HDRS on $(target) = [ FIncludes $(headers) : $(localIncludesOption) ]
$(includesSeparator)
[ FSysIncludes $(sysHeaders) : $(systemIncludesOption) ] ;
CC on $(target) = $(cc) ;
HAIKU_CATALOG_SIGNATURE on $(target) = $(signature) ;
if $(regexp) = "" {
HAIKU_CATALOG_REGEXP on $(target) = ;
} else {
HAIKU_CATALOG_REGEXP on $(target) = -r $(regexp) ;
}
SEARCH on $(sources) += $(SEARCH_SOURCE) ;
local subdir = [ on $(signature) return $(HAIKU_CATALOGS_SUBDIR) ] ;
MakeLocate $(target) : [ FDirName $(HAIKU_CATALOGS_OBJECT_DIR) $(subdir) ] ;
Depends $(target) : $(sources) <build>collectcatkeys ;
LocalClean clean : $(target).pre ;
ExtractCatalogEntries1 $(target) : <build>collectcatkeys $(sources) ;
}
actions ExtractCatalogEntries1
{
$(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)
cat "$(2[2-])" \
| $(CC) -E $(CCDEFS) -DB_COLLECTING_CATKEYS $(HDRS) - > "$(1)".pre
$(2[1]) $(HAIKU_CATALOG_REGEXP) -s $(HAIKU_CATALOG_SIGNATURE) \
-w -o "$(1)" "$(1)".pre
}
rule LinkApplicationCatalog target : sources : signature : language
{
# Link catalog entries from given catkey file into output compiled catalog
# file. Compiled catalog file will then be copied into the image, but only
# if the fingerprint matches the one from the untranslated catalog for the
# same file.
local subdir = [ on $(signature) return $(HAIKU_CATALOGS_SUBDIR) ] ;
MakeLocate $(target) : [ FDirName $(HAIKU_CATALOGS_OBJECT_DIR) $(subdir) ] ;
Depends $(target) : $(sources) <build>linkcatkeys ;
LocalClean clean : $(target) ;
HAIKU_CATALOG_SIGNATURE on $(target) = $(signature) ;
HAIKU_CATALOG_LANGUAGE on $(target) = $(language) ;
LinkApplicationCatalog1 $(target) : <build>linkcatkeys $(sources) ;
}
actions LinkApplicationCatalog1
{
$(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)
$(2[1]) "$(2[2-])" -l $(HAIKU_CATALOG_LANGUAGE) \
-s $(HAIKU_CATALOG_SIGNATURE) -o "$(1)"
}
rule DoCatalogs target : signature : sources : sourceLanguage : regexp
{
# DoCatalogs <target> : <signature> : <sources> [ : <sourceLanguage> ]
# [ : <regexp> ]
#
# Extracts the catkeys from a target's source files, generates the
# default catalog from them, and also generates catalogs for all
# translations.
#
# target: The target.
# signature: Application MIME signature (must match the one
# declared in the sourcecode).
# sources: List of cpp files where to search keys.
# sourceLanguage Short name of the language of used for the strings in
# the sources. Optional: default is "en".
# regexp The regular expression used to parse the files.
# Optional: default is matching be_catalog->GetString
local subdir ;
if [ on $(SUBDIR) return $(HAIKU_MULTIPLE_LOCALIZED_TARGETS) ] {
subdir = $(SUBDIR_TOKENS[2-]) $(target) ;
} else {
subdir = $(SUBDIR_TOKENS[2-]) ;
}
HAIKU_CATALOGS_SUBDIR on $(signature) = $(subdir) ;
local generatedCatalog
= $(sourceLanguage:G=$(signature):E=en:S=.catalog) ;
MakeLocate $(generatedCatalog)
: [ FDirName $(HAIKU_CATALOGS_OBJECT_DIR) $(subdir) ] ;
# generate catkeys file from sources
ExtractCatalogEntries $(generatedCatalog:S=.catkeys)
: [ FGristFiles $(sources) ] : $(signature) : $(regexp) ;
# find translations
local translationsDir
= [ FDirName $(HAIKU_TOP) data catalogs $(subdir) ] ;
local translations = [ Glob $(translationsDir) : *.catkeys ] ;
translations = [ FGristFiles $(translations:BS) ] ;
SEARCH on $(translations) += $(translationsDir) ;
# generate catalogs from all catkeys files
local catkeysFiles = $(generatedCatalog:S=.catkeys) $(translations) ;
for catkeysFile in $(catkeysFiles) {
LinkApplicationCatalog $(catkeysFile:S=.catalog) : $(catkeysFile)
: $(signature) : $(catkeysFile:B) ;
}
HAIKU_CATALOG_FILES on $(target) = $(catkeysFiles:S=.catalog) ;
HAIKU_CATALOG_SIGNATURE on $(target) = $(signature) ;
# For the pseudo-target LocalizedTargets
HAIKU_LOCALIZED_TARGETS += $(target) ;
# For the pseudo-target catalogs
HAIKU_LOCALE_CATALOGS += $(catkeysFiles:S=.catalog) ;
# For the pseudo-target catkeys
HAIKU_LOCALE_OUTPUT_CATKEYS += $(generatedCatalog:S=.catkeys) ;
}
rule AddCatalogEntryAttribute target
{
# AddCatalogEntryAttribute <target> : <attribute value> ;
#
# <attribute value> should be of the form
# "x-vnd.Haiku-App:context:string"
CATALOG_ENTRY on $(target) = "$(2)" ;
Depends $(target) : <build>addattr ;
AddCatalogEntryAttribute1 $(target)
: <build>addattr ;
}
actions AddCatalogEntryAttribute1
{
$(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)
"$(2)" -t string "SYS:NAME" "$(CATALOG_ENTRY)" "$(1)"
}