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')
+