You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by da...@apache.org on 2020/07/04 18:44:04 UTC
[openoffice] 01/11: Various changes I forgot about.
This is an automated email from the ASF dual-hosted git repository.
damjan pushed a commit to branch scons-build
in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit e30b3816d3925e7113466223dc890047cc3a6e5d
Author: Damjan Jovanovic <da...@apache.org>
AuthorDate: Mon May 11 17:38:07 2020 +0200
Various changes I forgot about.
Patch by: me
---
main/SConstruct | 1 +
main/site_scons/AllLangRes.py | 66 +++++++++++++
main/site_scons/_alllangres.py | 211 +++++++++++++++++++++++++++++++++++++++++
main/site_scons/config.py | 29 ++++--
main/site_scons/site_init.py | 9 +-
main/store/SConscript | 39 ++++++++
6 files changed, 346 insertions(+), 9 deletions(-)
diff --git a/main/SConstruct b/main/SConstruct
index 05d09bd..2cfa6a8 100644
--- a/main/SConstruct
+++ b/main/SConstruct
@@ -1 +1,2 @@
SConscript('fileaccess/SConscript', variant_dir=WORKDIR+'/scons/fileaccess', duplicate=0)
+SConscript('store/SConscript', variant_dir=WORKDIR+'/scons/store', duplicate=0)
diff --git a/main/site_scons/AllLangRes.py b/main/site_scons/AllLangRes.py
new file mode 100644
index 0000000..91ac44a
--- /dev/null
+++ b/main/site_scons/AllLangRes.py
@@ -0,0 +1,66 @@
+#**************************************************************
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#**************************************************************
+
+from SCons.Script import *
+from config import soenv
+from globals import *
+import SCons.Tool.CScanner
+
+class AllLangResTarget:
+ def __init__(self, name):
+ self.env = DefaultEnvironment().Clone()
+
+ withLang = env.get('AOO_WITH_LANG')
+ if withLang == None or withLang == '':
+ langs = set()
+ else:
+ langs = set(env['AOO_WITH_LANG'].split())
+ if 'en-US' not in langs:
+ langs.add('en-US')
+
+ self.resTargets = []
+ for lang in langs:
+ self.resTargets.add(ResTarget(name, lang))
+
+# FIXME: necessary?
+# def AddSrs(self, srsPath):
+
+
+class ResTarget:
+ def __init__(self, library, lang):
+ self.library = library
+ self.lang = lang
+
+class SrsTarget:
+ def __init__(self, srsPath):
+ self.env = DefaultEnvironment().Clone()
+
+ def SetInclude(self, includes):
+ self.env.Replace(CPPPATH=includes)
+
+ def AddFiles(self, files):
+
+
+class SrsPartTarget:
+ def __init__(self):
+
+class SrsPartMergeTarget:
+ def __init__(self):
diff --git a/main/site_scons/_alllangres.py b/main/site_scons/_alllangres.py
new file mode 100644
index 0000000..7c14c7b
--- /dev/null
+++ b/main/site_scons/_alllangres.py
@@ -0,0 +1,211 @@
+# gbuild's main/solenv/gbuild/AllLangResTarget.mk contains these 5 classes:
+# 1. SrsPartMergeTarget (used in 2 modules)
+# 2. SrsPartTarget (used in 2 modules)
+# 3. SrsTarget (used in many modules)
+# 4. ResTarget (unused in modules)
+# 5. AllLangResTarget (used in many modules)
+
+#
+#
+# AllLangResTarget(name)
+# (meta-target; delivers an empty timestamp file)
+# ^ ^
+# / \
+# / \
+# / \
+# ResTarget(nameen-US,name,en-US) ResTarget(nameen-GB,name,en-GB)
+# $(WORKDIR)/ResTarget/$(resName).res $(WORKDIR)/ResTarget/$(resName).res
+# $(WORKDIR)/ResTarget/nameen-US.res $(WORKDIR)/ResTarget/nameen-GB.res
+# ^ ^ ^
+# | rsc | |
+# | | |
+# SrsTarget SrsTarget SrsTarget
+# $(WORKDIR)/SrsTarget/$(srsName).srs
+# $(WORKDIR)/SrsTarget/uui/res.srs
+# ^
+# | concatenate
+# +----------+
+# | \
+# | \
+# SrcPartTarget SrcPartTarget
+# $(WORKDIR)/SrsPartTarget/$(srsPartName)
+# $(WORKDIR)/SrsPartTarget/uui/source/ids.src
+# ^ ^
+# | rsc | rsc
+# | |
+# (when not translating) | | (when translating)
+# | |
+# | SrcPartMergeTarget
+# | $(WORKDIR)/SrsPartMergeTarget/$(1)
+# | $(WORKDIR)/SrsPartMergeTarget/uui/source/ids.src
+# | ^
+# | /
+# | / transex3
+# | / (when translating)
+# $(srsPartName) /
+# uuid/source/ids.src
+#
+#
+#
+
+
+
+# ====================
+# 5. AllLangResTarget
+# ====================
+# This is just there to create a number of ResTarget objects,
+# one per language, and forward various calls to each one
+# of those (eg. add_srs() is called on every lang's ResTarget).
+#
+# (extensions/pre_SharedLangList.mk)
+if WITH_LANG == 'All':
+ gb_WITH_LANG = $(completelangiso) from $(SOLARENV)/inc/langlist.mk
+else:
+ gb_WITH_LANG = $(WITH_LANG)
+gb_AllLangResTarget_LANGS = unique union of (en-US, gb_WITH_LANG)
+
+# # UNUSED
+# #def gb_AllLangResTarget_set_langs(langs):
+# # gb_AllLangResTarget_LANGS = langs
+# #
+def gb_AllLangResTarget_get_target(name):
+ return $(WORKDIR)/AllLangRes/$(name)
+
+def gb_AllLangResTarget_AllLangResTarget(name):
+ for lang in gb_AllLangResTarget_LANGS:
+ gb_ResTarget_ResTarget($name$lang, name, lang)
+ register the target gb_AllLangResTarget_get_target(name)
+
+def gb_AllLangResTarget_add_srs(name, srs):
+ for s in srs:
+ gb_AllLangResTarget_add_one_srs(name, s)
+
+def gb_AllLangResTarget_add_one_srs(name, srs):
+ for lang in gb_AllLangResTarget_LANGS:
+ gb_ResTarget_add_one_srs($(name)$(lang), srs)
+
+def gb_AllLangResTarget_set_reslocation(name, location):
+ for lang in gb_AllLangResTarget_LANGS:
+ gb_ResTarget_set_reslocation($(name)$(lang), location)
+
+def gb_AllLangResTarget_set_imagelocations(name, location):
+ for lang in gb_AllLangResTarget_LANGS:
+ gb_ResTarget_set_imagelocations($(name)$(lang), location)
+
+# ============================
+# 4. ResTarget
+# ============================
+# Generates $(WORKDIR)/ResTarget/$(resName).res
+# by compiling a number of .srs
+
+def gb_ResTarget_get_target(resName):
+ return $(WORKDIR)/ResTarget/$(resName).res
+
+def gb_ResTarget_ResTarget(resName, allLangResName, lang):
+ on gb_ResTarget_get_target(resName), set:
+ RESLOCATION = allLangResName
+ LIBRARY = allLangResName
+ LANGUAGE = lang
+ add dependencies and deliverables
+
+def gb_ResTarget_add_file(resName, filename):
+ gb_ResTarget_get_target(resName) depends on filename
+
+def gb_ResTarget_add_one_srs(resName, srsName):
+ gb_ResTarget_add_file(resName, gb_SrsTarget_get_target(srsName))
+
+def gb_ResTarget_set_reslocation(resName, location):
+ on gb_ResTarget_get_target(resName), set RESLOCATION=location
+
+def gb_ResTarget_set_imagelocation(resName, location):
+ on gb_ResTarget_get_target(resName), set IMAGELOCATIONS=location
+
+# A SUPER LONG COMPLEX RULE TO GENERATE ANY gb_ResTarget_get_target()
+# FROM ITS DEPENDENCIES USING rsc
+
+# =============================
+# 3. SrsTarget
+# =============================
+# Generates $(WORKDIR)/SrsTarget/$(srsName).srs
+# by catting together its compiled .src dependencies
+def gb_SrsTarget_get_target(srsName):
+ return $(WORKDIR)/SrsTarget/$(srsName).srs
+
+gb_SrsTarget_DEFAULTDEFS = gb_GLOBALDEFS
+
+def gb_SrsTarget_SrsTarget(srsName):
+ on gb_SrsTarget_get_target(srsName), set:
+ DEFS = $(gb_SrsTarget_DEFAULTDEFS)
+ INCLUDE = $(SOLARINC)
+ PARTS =
+ some dependencies
+
+def gb_SrsTarget_set_include(srsName, includes):
+ on gb_SrsTarget_get_target(srsName) set INCLUDE = includes
+
+# file is something like uui/source/ids.src
+def gb_SrsTarget_add_file(srsName, file):
+ gb_SrsPartTarget_SrsPartTarget(file)
+ on gb_SrsPartTarget_get_target(file), add file to PARTS, make us depend on it
+ dependencies
+
+# # UNUSED
+# # def gb_SrsTarget_set_defs
+
+# RULE to generate gb_SrsTarget_get_target():
+# cat together dependencies (file contents) into target file
+#
+# ====================================
+# 2. SrsPartTarget
+# ====================================
+# Generates $(WORKDIR)/SrsPartTarget/$(srsPartName)[.src]
+# by compiling $(srsPartName)[.src]
+
+def gb_SrsPartTarget_get_target(srsPartName):
+ return $(WORKDIR)/SrsPartTarget/$(srsPartName)
+
+# srsPartName is something like uui/source/ids.src
+def gb_SrsPartTarget_SrsPartTarget(srsPartName):
+ if $(gb_WITH_LANG) is empty:
+ on gb_SrsPartTarget_get_target(srsPartName), set MERGEDFILE=
+ else:
+ on gb_SrsPartTarget_get_target(srsPartName), set:
+ MERGEDFILE = gb_SrsPartMergeTarget_get_target(srsPartName)
+ depend on gb_SrsPartMergeTarget_get_target(srsPartName)
+ on gb_SrsPartMergeTarget_get_target(srsPartName):
+ set SDF = $(realpath $(gb_SrsPartMergeTarget_SDFLOCATION)/$(dir $(1))localize.sdf)
+ make gb_SrsPartMergeTarget_get_target(srsPartName) depend on that location
+
+# RULE to generate gb_SrsPartTarget_get_target() from dependencies or MERGEFILE
+# $$(call gb_SrsPartTarget_get_target,%) : $(1)/% $$(gb_Helper_MISCDUMMY) | $$(gb_SrsPartTarget_RSCTARGET)
+# So:
+# $(WORKDIR)/SrsPartTarget/$(srsPartName) solver/450/unxfbsdx/workdir/SrsPartTarget/uui/source/ids.src
+# depends on
+# $(srsPartName) uui/source/ids.src
+# and an rsc command generates the target from the source.
+# If MERGEFILE is set, it is used, otherwise the dependency is used.
+
+# =====================
+# 1. SrsPartMergeTarget
+# =====================
+# Only used when MERGEFILE was set in gb_SrsPartTarget_SrsPartTarget
+#
+#
+
+gb_SrsPartMergeTarget_get_target = $(WORKDIR)/SrsPartMergeTarget/$(1)
+gb_SrsPartMergeTarget_SDFLOCATION := $(LOCDIR)/l10n/$(INPATH)/misc/sdf
+
+# runs rules on each repo
+
+def gb_SrsPartMergeTarget__rules():
+ if SDF is set:
+ gb_SrsPartMergeTarget__command()
+ else:
+ copy sources to target
+
+def gb_SrsPartMergeTarget__command():
+ calls gb_SrsPartMergeTarget_TRANSEXCOMMAND on various args
+
+
+# NOTE: SCons' CPPSUFFIXES could scan .src files for dependencies
+
diff --git a/main/site_scons/config.py b/main/site_scons/config.py
index d7f5455..291280a 100644
--- a/main/site_scons/config.py
+++ b/main/site_scons/config.py
@@ -25,18 +25,31 @@ _siteDir, _myFilename = os.path.split(os.path.abspath(__file__))
_mainDir, _siteDir2 = os.path.split(_siteDir)
# Or should we patch set_soenv to generate us a .py file?
-def _loadJavaProperties(filepath):
+def loadJavaProperties(filepath):
props = {}
+ fullLine = ''
+ appending = False
with open(filepath, "rt") as f:
for line in f:
l = line.strip()
- if l and not l.startswith('#'):
- eq = l.find('=')
- if eq >= 0:
- key = l[:eq].strip()
- value = l[(eq+1):].strip()
- props[key] = value
+ if l:
+ if appending:
+ fullLine += l
+ else:
+ fullLine = l
+
+ if fullLine.endswith('\\'):
+ appending = True
+ fullLine = fullLine[: len(fullLine) - 1]
+ else:
+ appending = False
+ if not l.startswith('#'):
+ eq = l.find('=')
+ if eq >= 0:
+ key = l[:eq].strip()
+ value = l[(eq+1):].strip()
+ props[key] = value
return props
-soenv = _loadJavaProperties(_mainDir + '/ant.properties')
+soenv = loadJavaProperties(_mainDir + '/ant.properties')
diff --git a/main/site_scons/site_init.py b/main/site_scons/site_init.py
index 11a6244..1a750ef 100644
--- a/main/site_scons/site_init.py
+++ b/main/site_scons/site_init.py
@@ -39,12 +39,19 @@ env.Append(CPPDEFINES = GLOBALDEFS)
env.Append(CFLAGS = platform.getCFlags(soenv))
env.Append(CXXFLAGS = platform.getCFlags(soenv))
-## Add some common paths to the SCons environment
+## Add some common paths to the SCons environment, without AOO_ prefix
env['OUTDIR'] = soenv['OUTDIR']
env['WORKDIR'] = soenv['WORKDIR']
env['SOLARENV'] = soenv['SOLARENV']
+## Useful constants
+
+if soenv.get('WITH_LANG') == 'ALL':
+ env['AOO_WITH_LANG'] = loadJavaProperties(SOLENV + '/inc/langlist.mk')['completelangiso']
+else:
+ env['AOO_WITH_LANG'] = soenv.get('WITH_LANG')
+
###########################
# API
###########################
diff --git a/main/store/SConscript b/main/store/SConscript
new file mode 100644
index 0000000..52e1cd9
--- /dev/null
+++ b/main/store/SConscript
@@ -0,0 +1,39 @@
+storeObjects = AOOSharedObjects()
+storeObjects.AddInclude([
+ 'inc',
+ 'inc/pch'
+])
+storeObjects.AddDefs([
+ 'STORE_DLLIMPLEMENTATION'
+])
+storeObjects.AddCxxNoExceptionSources([
+ 'source/lockbyte.cxx',
+ 'source/object.cxx',
+ 'source/storbase.cxx',
+ 'source/storbios.cxx',
+ 'source/storcach.cxx',
+ 'source/stordata.cxx',
+ 'source/stordir.cxx',
+ 'source/store.cxx',
+ 'source/storlckb.cxx',
+ 'source/storpage.cxx',
+ 'source/stortree.cxx'
+])
+store = AOOSharedLibrary(
+ 'store',
+ 'UNOVERLIBS',
+ storeObjects
+)
+store.AddLinkedLibs([
+ SALLIB
+] + STDLIBS)
+store.SetVersionScript('util/store.map')
+store.InstallTo('${OUTDIR}/lib')
+
+Install('${OUTDIR}/inc/store', 'inc/store/dllapi.h')
+Install('${OUTDIR}/inc/store', 'inc/store/store.h')
+Install('${OUTDIR}/inc/store', 'inc/store/store.hxx')
+Install('${OUTDIR}/inc/store', 'inc/store/types.h')
+
+Install('${OUTDIR}/xml', 'util/store.xml')
+