aboutsummaryrefslogtreecommitdiff
path: root/net/samba413/files/patch-waf-2.0.21
diff options
context:
space:
mode:
Diffstat (limited to 'net/samba413/files/patch-waf-2.0.21')
-rw-r--r--net/samba413/files/patch-waf-2.0.21703
1 files changed, 0 insertions, 703 deletions
diff --git a/net/samba413/files/patch-waf-2.0.21 b/net/samba413/files/patch-waf-2.0.21
deleted file mode 100644
index 01b2d6e6cafe..000000000000
--- a/net/samba413/files/patch-waf-2.0.21
+++ /dev/null
@@ -1,703 +0,0 @@
-From 6718b5e6d059e5668fc538be802ebd9fbe5ce9af Mon Sep 17 00:00:00 2001
-From: Stefan Metzmacher <metze@samba.org>
-Date: Wed, 25 Nov 2020 16:29:06 +0100
-Subject: [PATCH] waf: upgrade to 2.0.21
-
-This commit message was wrong:
-
- commit 5fc3a71d0f54b176d3cb2e399718d0468507e797
- Author: David Mulder <dmulder@suse.com>
- Date: Mon Aug 24 13:12:46 2020 -0600
-
- waf: upgrade to 2.0.20
-
- This contain an important change:
- "Fix gccdeps.scan() returning nodes that no longer exist on disk."
- https://gitlab.com/ita1024/waf/-/merge_requests/2293
-
- Signed-off-by: David Mulder <dmulder@suse.com>
- Reviewed-by: Stefan Metzmacher <metze@samba.org>
-Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-
-The fix was in in waf master, but not included in 2.0.20,
-but it's now included in 2.0.21.
-
-Signed-off-by: Stefan Metzmacher <metze@samba.org>
-Reviewed-by: Andrew Bartlett <abartlet@samba.org>
----
- buildtools/bin/waf | 2 +-
- buildtools/wafsamba/wafsamba.py | 2 +-
- third_party/waf/waflib/Build.py | 6 ++-
- third_party/waf/waflib/Context.py | 8 ++--
- third_party/waf/waflib/Tools/asm.py | 5 +-
- third_party/waf/waflib/Tools/c_config.py | 1 +
- third_party/waf/waflib/Tools/msvc.py | 8 +++-
- third_party/waf/waflib/Tools/qt5.py | 26 +++++++++--
- third_party/waf/waflib/Tools/waf_unit_test.py | 10 +++-
- third_party/waf/waflib/extras/boost.py | 5 +-
- .../waf/waflib/extras/c_dumbpreproc.py | 2 +-
- third_party/waf/waflib/extras/doxygen.py | 4 +-
- .../waf/waflib/extras/file_to_object.py | 9 +++-
- third_party/waf/waflib/extras/gccdeps.py | 21 +++++++--
- third_party/waf/waflib/extras/msvcdeps.py | 27 +++++++++--
- third_party/waf/waflib/extras/pch.py | 4 +-
- third_party/waf/waflib/extras/sphinx.py | 40 ++++++++++++----
- third_party/waf/waflib/extras/wafcache.py | 46 +++++++++++++++----
- third_party/waf/waflib/extras/xcode6.py | 18 ++++----
- 19 files changed, 181 insertions(+), 63 deletions(-)
-
-diff --git buildtools/bin/waf buildtools/bin/waf
-index feabe25d131..041450fc131 100755
---- buildtools/bin/waf
-+++ buildtools/bin/waf
-@@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE.
-
- import os, sys, inspect
-
--VERSION="2.0.20"
-+VERSION="2.0.21"
- REVISION="x"
- GIT="x"
- INSTALL="x"
-diff --git buildtools/wafsamba/wafsamba.py buildtools/wafsamba/wafsamba.py
-index 9dd6d05b91b..d1baa3b4940 100644
---- buildtools/wafsamba/wafsamba.py
-+++ buildtools/wafsamba/wafsamba.py
-@@ -38,7 +38,7 @@ LIB_PATH="shared"
-
- os.environ['PYTHONUNBUFFERED'] = '1'
-
--if Context.HEXVERSION not in (0x2001400,):
-+if Context.HEXVERSION not in (0x2001500,):
- Logs.error('''
- Please use the version of waf that comes with Samba, not
- a system installed version. See http://wiki.samba.org/index.php/Waf
-diff --git third_party/waf/waflib/Build.py third_party/waf/waflib/Build.py
-index 39f0991918b..52837618577 100644
---- third_party/waf/waflib/Build.py
-+++ third_party/waf/waflib/Build.py
-@@ -753,10 +753,12 @@ class BuildContext(Context.Context):
- else:
- ln = self.launch_node()
- if ln.is_child_of(self.bldnode):
-- Logs.warn('Building from the build directory, forcing --targets=*')
-+ if Logs.verbose > 1:
-+ Logs.warn('Building from the build directory, forcing --targets=*')
- ln = self.srcnode
- elif not ln.is_child_of(self.srcnode):
-- Logs.warn('CWD %s is not under %s, forcing --targets=* (run distclean?)', ln.abspath(), self.srcnode.abspath())
-+ if Logs.verbose > 1:
-+ Logs.warn('CWD %s is not under %s, forcing --targets=* (run distclean?)', ln.abspath(), self.srcnode.abspath())
- ln = self.srcnode
-
- def is_post(tg, ln):
-diff --git third_party/waf/waflib/Context.py third_party/waf/waflib/Context.py
-index 3f1b4fa48ab..0ce9df6e91f 100644
---- third_party/waf/waflib/Context.py
-+++ third_party/waf/waflib/Context.py
-@@ -18,13 +18,13 @@ else:
- import imp
-
- # the following 3 constants are updated on each new release (do not touch)
--HEXVERSION=0x2001400
-+HEXVERSION=0x2001500
- """Constant updated on new releases"""
-
--WAFVERSION="2.0.20"
-+WAFVERSION="2.0.21"
- """Constant updated on new releases"""
-
--WAFREVISION="668769470956da8c5b60817cb8884cd7d0f87cd4"
-+WAFREVISION="edde20a6425a5c3eb6b47d5f3f5c4fbc93fed5f4"
- """Git revision when the waf version is updated"""
-
- WAFNAME="waf"
-@@ -530,7 +530,7 @@ class Context(ctx):
- """
- Prints a configuration message of the form ``msg: result``.
- The second part of the message will be in colors. The output
-- can be disabled easly by setting ``in_msg`` to a positive value::
-+ can be disabled easily by setting ``in_msg`` to a positive value::
-
- def configure(conf):
- self.in_msg = 1
-diff --git third_party/waf/waflib/Tools/asm.py third_party/waf/waflib/Tools/asm.py
-index a57e83bb5ec..1d34ddaca7f 100644
---- third_party/waf/waflib/Tools/asm.py
-+++ third_party/waf/waflib/Tools/asm.py
-@@ -56,13 +56,11 @@ class asm(Task.Task):
- Compiles asm files by gas/nasm/yasm/...
- """
- color = 'BLUE'
-- run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
-+ run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${ASMDEFINES_ST:DEFINES} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
-
- def scan(self):
- if self.env.ASM_NAME == 'gas':
- return c_preproc.scan(self)
-- Logs.warn('There is no dependency scanner for Nasm!')
-- return [[], []]
- elif self.env.ASM_NAME == 'nasm':
- Logs.warn('The Nasm dependency scanner is incomplete!')
-
-@@ -106,3 +104,4 @@ class asmstlib(stlink_task):
-
- def configure(conf):
- conf.env.ASMPATH_ST = '-I%s'
-+ conf.env.ASMDEFINES_ST = '-D%s'
-diff --git third_party/waf/waflib/Tools/c_config.py third_party/waf/waflib/Tools/c_config.py
-index 98187fac2e2..03b6bf61bc0 100644
---- third_party/waf/waflib/Tools/c_config.py
-+++ third_party/waf/waflib/Tools/c_config.py
-@@ -68,6 +68,7 @@ MACRO_TO_DEST_CPU = {
- '__s390__' : 's390',
- '__sh__' : 'sh',
- '__xtensa__' : 'xtensa',
-+'__e2k__' : 'e2k',
- }
-
- @conf
-diff --git third_party/waf/waflib/Tools/msvc.py third_party/waf/waflib/Tools/msvc.py
-index f169c7f441b..37233be8242 100644
---- third_party/waf/waflib/Tools/msvc.py
-+++ third_party/waf/waflib/Tools/msvc.py
-@@ -99,7 +99,13 @@ all_icl_platforms = [ ('intel64', 'amd64'), ('em64t', 'amd64'), ('ia32', 'x86'),
- """List of icl platforms"""
-
- def options(opt):
-- opt.add_option('--msvc_version', type='string', help = 'msvc version, eg: "msvc 10.0,msvc 9.0"', default='')
-+ default_ver = ''
-+ vsver = os.getenv('VSCMD_VER')
-+ if vsver:
-+ m = re.match(r'(^\d+\.\d+).*', vsver)
-+ if m:
-+ default_ver = 'msvc %s' % m.group(1)
-+ opt.add_option('--msvc_version', type='string', help = 'msvc version, eg: "msvc 10.0,msvc 9.0"', default=default_ver)
- opt.add_option('--msvc_targets', type='string', help = 'msvc targets, eg: "x64,arm"', default='')
- opt.add_option('--no-msvc-lazy', action='store_false', help = 'lazily check msvc target environments', default=True, dest='msvc_lazy')
-
-diff --git third_party/waf/waflib/Tools/qt5.py third_party/waf/waflib/Tools/qt5.py
-index 99e021bae61..cff2028174f 100644
---- third_party/waf/waflib/Tools/qt5.py
-+++ third_party/waf/waflib/Tools/qt5.py
-@@ -57,7 +57,23 @@ A few options (--qt{dir,bin,...}) and environment variables
- (QT5_{ROOT,DIR,MOC,UIC,XCOMPILE}) allow finer tuning of the tool,
- tool path selection, etc; please read the source for more info.
-
--The detection uses pkg-config on Linux by default. To force static library detection use:
-+The detection uses pkg-config on Linux by default. The list of
-+libraries to be requested to pkg-config is formulated by scanning
-+in the QTLIBS directory (that can be passed via --qtlibs or by
-+setting the environment variable QT5_LIBDIR otherwise is derived
-+by querying qmake for QT_INSTALL_LIBS directory) for shared/static
-+libraries present.
-+Alternatively the list of libraries to be requested via pkg-config
-+can be set using the qt5_vars attribute, ie:
-+
-+ conf.qt5_vars = ['Qt5Core', 'Qt5Gui', 'Qt5Widgets', 'Qt5Test'];
-+
-+This can speed up configuration phase if needed libraries are
-+known beforehand, can improve detection on systems with a
-+sparse QT5 libraries installation (ie. NIX) and can improve
-+detection of some header-only Qt modules (ie. Qt5UiPlugin).
-+
-+To force static library detection use:
- QT5_XCOMPILE=1 QT5_FORCE_STATIC=1 waf configure
- """
-
-@@ -466,6 +482,9 @@ def configure(self):
-
- The detection uses the program ``pkg-config`` through :py:func:`waflib.Tools.config_c.check_cfg`
- """
-+ if 'COMPILER_CXX' not in self.env:
-+ self.fatal('No CXX compiler defined: did you forget to configure compiler_cxx first?')
-+
- self.find_qt5_binaries()
- self.set_qt5_libs_dir()
- self.set_qt5_libs_to_check()
-@@ -478,9 +497,6 @@ def configure(self):
- if not has_xml:
- Logs.error('No xml.sax support was found, rcc dependencies will be incomplete!')
-
-- if 'COMPILER_CXX' not in self.env:
-- self.fatal('No CXX compiler defined: did you forget to configure compiler_cxx first?')
--
- # Qt5 may be compiled with '-reduce-relocations' which requires dependent programs to have -fPIE or -fPIC?
- frag = '#include <QMap>\nint main(int argc, char **argv) {QMap<int,int> m;return m.keys().size();}\n'
- uses = 'QT5CORE'
-@@ -637,7 +653,7 @@ def set_qt5_libs_dir(self):
- except Errors.WafError:
- qtdir = self.cmd_and_log(env.QMAKE + ['-query', 'QT_INSTALL_PREFIX']).strip()
- qtlibs = os.path.join(qtdir, 'lib')
-- self.msg('Found the Qt5 libraries in', qtlibs)
-+ self.msg('Found the Qt5 library path', qtlibs)
- env.QTLIBS = qtlibs
-
- @conf
-diff --git third_party/waf/waflib/Tools/waf_unit_test.py third_party/waf/waflib/Tools/waf_unit_test.py
-index 6ff6f72739f..dc66fe9c184 100644
---- third_party/waf/waflib/Tools/waf_unit_test.py
-+++ third_party/waf/waflib/Tools/waf_unit_test.py
-@@ -97,6 +97,7 @@ def make_interpreted_test(self):
- if isinstance(v, str):
- v = v.split(os.pathsep)
- self.ut_env[k] = os.pathsep.join(p + v)
-+ self.env.append_value('UT_DEPS', ['%r%r' % (key, self.ut_env[key]) for key in self.ut_env])
-
- @feature('test')
- @after_method('apply_link', 'process_use')
-@@ -108,7 +109,8 @@ def make_test(self):
- tsk = self.create_task('utest', self.link_task.outputs)
- if getattr(self, 'ut_str', None):
- self.ut_run, lst = Task.compile_fun(self.ut_str, shell=getattr(self, 'ut_shell', False))
-- tsk.vars = lst + tsk.vars
-+ tsk.vars = tsk.vars + lst
-+ self.env.append_value('UT_DEPS', self.ut_str)
-
- self.handle_ut_cwd('ut_cwd')
-
-@@ -139,6 +141,10 @@ def make_test(self):
- if not hasattr(self, 'ut_cmd'):
- self.ut_cmd = getattr(Options.options, 'testcmd', False)
-
-+ self.env.append_value('UT_DEPS', str(self.ut_cmd))
-+ self.env.append_value('UT_DEPS', self.ut_paths)
-+ self.env.append_value('UT_DEPS', ['%r%r' % (key, self.ut_env[key]) for key in self.ut_env])
-+
- @taskgen_method
- def add_test_results(self, tup):
- """Override and return tup[1] to interrupt the build immediately if a test does not run"""
-@@ -159,7 +165,7 @@ class utest(Task.Task):
- """
- color = 'PINK'
- after = ['vnum', 'inst']
-- vars = []
-+ vars = ['UT_DEPS']
-
- def runnable_status(self):
- """
-diff --git third_party/waf/waflib/extras/boost.py third_party/waf/waflib/extras/boost.py
-index c2aaaa938a2..93b312a1e6e 100644
---- third_party/waf/waflib/extras/boost.py
-+++ third_party/waf/waflib/extras/boost.py
-@@ -270,10 +270,12 @@ def boost_get_libs(self, *k, **kw):
- return file
- return None
-
-+ # extensions from Tools.ccroot.lib_patterns
-+ wo_ext = re.compile(r"\.(a|so|lib|dll|dylib)(\.[0-9\.]+)?$")
- def format_lib_name(name):
- if name.startswith('lib') and self.env.CC_NAME != 'msvc':
- name = name[3:]
-- return name[:name.rfind('.')]
-+ return wo_ext.sub("", name)
-
- def match_libs(lib_names, is_static):
- libs = []
-@@ -522,4 +524,3 @@ def install_boost(self):
- except:
- continue
- install_boost.done = False
--
-diff --git third_party/waf/waflib/extras/c_dumbpreproc.py third_party/waf/waflib/extras/c_dumbpreproc.py
-index ce9e1a400b9..1fdd5c364ae 100644
---- third_party/waf/waflib/extras/c_dumbpreproc.py
-+++ third_party/waf/waflib/extras/c_dumbpreproc.py
-@@ -66,7 +66,7 @@ class dumb_parser(parser):
- if x == c_preproc.POPFILE:
- self.currentnode_stack.pop()
- continue
-- self.tryfind(y)
-+ self.tryfind(y, env=env)
-
- c_preproc.c_parser = dumb_parser
-
-diff --git third_party/waf/waflib/extras/doxygen.py third_party/waf/waflib/extras/doxygen.py
-index de75bc2738a..0fda70361f3 100644
---- third_party/waf/waflib/extras/doxygen.py
-+++ third_party/waf/waflib/extras/doxygen.py
-@@ -208,10 +208,10 @@ def process_doxy(self):
- self.bld.fatal('doxygen file %s not found' % self.doxyfile)
-
- # the task instance
-- dsk = self.create_task('doxygen', node)
-+ dsk = self.create_task('doxygen', node, always_run=getattr(self, 'always', False))
-
- if getattr(self, 'doxy_tar', None):
-- tsk = self.create_task('tar')
-+ tsk = self.create_task('tar', always_run=getattr(self, 'always', False))
- tsk.input_tasks = [dsk]
- tsk.set_outputs(self.path.find_or_declare(self.doxy_tar))
- if self.doxy_tar.endswith('bz2'):
-diff --git third_party/waf/waflib/extras/file_to_object.py third_party/waf/waflib/extras/file_to_object.py
-index 1393b511d63..13d2aef37df 100644
---- third_party/waf/waflib/extras/file_to_object.py
-+++ third_party/waf/waflib/extras/file_to_object.py
-@@ -31,7 +31,7 @@ Known issues:
-
- """
-
--import os
-+import os, sys
- from waflib import Task, TaskGen, Errors
-
- def filename_c_escape(x):
-@@ -95,12 +95,17 @@ class file_to_object_c(Task.Task):
-
- name = "_binary_" + "".join(name)
-
-+ def char_to_num(ch):
-+ if sys.version_info[0] < 3:
-+ return ord(ch)
-+ return ch
-+
- data = self.inputs[0].read('rb')
- lines, line = [], []
- for idx_byte, byte in enumerate(data):
- line.append(byte)
- if len(line) > 15 or idx_byte == size-1:
-- lines.append(", ".join(("0x%02x" % ord(x)) for x in line))
-+ lines.append(", ".join(("0x%02x" % char_to_num(x)) for x in line))
- line = []
- data = ",\n ".join(lines)
-
-diff --git third_party/waf/waflib/extras/gccdeps.py third_party/waf/waflib/extras/gccdeps.py
-index c3a809e252a..1fc9373489a 100644
---- third_party/waf/waflib/extras/gccdeps.py
-+++ third_party/waf/waflib/extras/gccdeps.py
-@@ -163,10 +163,25 @@ def post_run(self):
- def sig_implicit_deps(self):
- if not self.__class__.__name__ in self.env.ENABLE_GCCDEPS:
- return super(self.derived_gccdeps, self).sig_implicit_deps()
-+ bld = self.generator.bld
-+
- try:
-- return Task.Task.sig_implicit_deps(self)
-- except Errors.WafError:
-- return Utils.SIG_NIL
-+ return self.compute_sig_implicit_deps()
-+ except Errors.TaskNotReady:
-+ raise ValueError("Please specify the build order precisely with gccdeps (asm/c/c++ tasks)")
-+ except EnvironmentError:
-+ # If a file is renamed, assume the dependencies are stale and must be recalculated
-+ for x in bld.node_deps.get(self.uid(), []):
-+ if not x.is_bld() and not x.exists():
-+ try:
-+ del x.parent.children[x.name]
-+ except KeyError:
-+ pass
-+
-+ key = self.uid()
-+ bld.node_deps[key] = []
-+ bld.raw_deps[key] = []
-+ return Utils.SIG_NIL
-
- def wrap_compiled_task(classname):
- derived_class = type(classname, (Task.classes[classname],), {})
-diff --git third_party/waf/waflib/extras/msvcdeps.py third_party/waf/waflib/extras/msvcdeps.py
-index 873a4193150..52985dce058 100644
---- third_party/waf/waflib/extras/msvcdeps.py
-+++ third_party/waf/waflib/extras/msvcdeps.py
-@@ -150,11 +150,25 @@ def scan(self):
- def sig_implicit_deps(self):
- if self.env.CC_NAME not in supported_compilers:
- return super(self.derived_msvcdeps, self).sig_implicit_deps()
-+ bld = self.generator.bld
-
- try:
-- return Task.Task.sig_implicit_deps(self)
-- except Errors.WafError:
-- return Utils.SIG_NIL
-+ return self.compute_sig_implicit_deps()
-+ except Errors.TaskNotReady:
-+ raise ValueError("Please specify the build order precisely with msvcdeps (c/c++ tasks)")
-+ except EnvironmentError:
-+ # If a file is renamed, assume the dependencies are stale and must be recalculated
-+ for x in bld.node_deps.get(self.uid(), []):
-+ if not x.is_bld() and not x.exists():
-+ try:
-+ del x.parent.children[x.name]
-+ except KeyError:
-+ pass
-+
-+ key = self.uid()
-+ bld.node_deps[key] = []
-+ bld.raw_deps[key] = []
-+ return Utils.SIG_NIL
-
- def exec_command(self, cmd, **kw):
- if self.env.CC_NAME not in supported_compilers:
-@@ -211,11 +225,14 @@ def exec_command(self, cmd, **kw):
- # get one from the exception object
- ret = getattr(e, 'returncode', 1)
-
-+ Logs.debug('msvcdeps: Running for: %s' % self.inputs[0])
- for line in raw_out.splitlines():
- if line.startswith(INCLUDE_PATTERN):
-- inc_path = line[len(INCLUDE_PATTERN):].strip()
-+ # Only strip whitespace after log to preserve
-+ # dependency structure in debug output
-+ inc_path = line[len(INCLUDE_PATTERN):]
- Logs.debug('msvcdeps: Regex matched %s', inc_path)
-- self.msvcdeps_paths.append(inc_path)
-+ self.msvcdeps_paths.append(inc_path.strip())
- else:
- out.append(line)
-
-diff --git third_party/waf/waflib/extras/pch.py third_party/waf/waflib/extras/pch.py
-index 103e752838c..b44c7a2e8fd 100644
---- third_party/waf/waflib/extras/pch.py
-+++ third_party/waf/waflib/extras/pch.py
-@@ -90,7 +90,7 @@ def apply_pch(self):
-
- if getattr(self, 'name', None):
- try:
-- task = self.bld.pch_tasks["%s.%s" % (self.name, self.idx)]
-+ task = self.bld.pch_tasks[self.name]
- self.bld.fatal("Duplicated 'pch' task with name %r" % "%s.%s" % (self.name, self.idx))
- except KeyError:
- pass
-@@ -104,7 +104,7 @@ def apply_pch(self):
-
- self.pch_task = task
- if getattr(self, 'name', None):
-- self.bld.pch_tasks["%s.%s" % (self.name, self.idx)] = task
-+ self.bld.pch_tasks[self.name] = task
-
- @TaskGen.feature('cxx')
- @TaskGen.after_method('process_source', 'propagate_uselib_vars')
-diff --git third_party/waf/waflib/extras/sphinx.py third_party/waf/waflib/extras/sphinx.py
-index ce11110e634..71d1028393b 100644
---- third_party/waf/waflib/extras/sphinx.py
-+++ third_party/waf/waflib/extras/sphinx.py
-@@ -20,7 +20,7 @@ def build(bld):
-
- from waflib.Node import Node
- from waflib import Utils
--from waflib.Task import Task
-+from waflib import Task
- from waflib.TaskGen import feature, after_method
-
-
-@@ -55,13 +55,9 @@ def build_sphinx(self):
- sphinx_build_task.set_outputs(self.path.get_bld())
-
- # the sphinx-build results are in <build + output_format> directory
-- sphinx_output_directory = self.path.get_bld().make_node(self.env.SPHINX_OUTPUT_FORMAT)
-- sphinx_output_directory.mkdir()
-+ self.sphinx_output_directory = self.path.get_bld().make_node(self.env.SPHINX_OUTPUT_FORMAT)
-+ self.sphinx_output_directory.mkdir()
- Utils.def_attrs(self, install_path=get_install_path(self))
-- self.add_install_files(install_to=self.install_path,
-- install_from=sphinx_output_directory.ant_glob('**/*'),
-- cwd=sphinx_output_directory,
-- relative_trick=True)
-
-
- def get_install_path(tg):
-@@ -73,9 +69,37 @@ def get_install_path(tg):
- return tg.env.DOCDIR
-
-
--class SphinxBuildingTask(Task):
-+class SphinxBuildingTask(Task.Task):
- color = 'BOLD'
- run_str = '${SPHINX_BUILD} -M ${SPHINX_OUTPUT_FORMAT} ${SRC} ${TGT} ${SPHINX_OPTIONS}'
-
- def keyword(self):
- return 'Compiling (%s)' % self.env.SPHINX_OUTPUT_FORMAT
-+
-+ def runnable_status(self):
-+
-+ for x in self.run_after:
-+ if not x.hasrun:
-+ return Task.ASK_LATER
-+
-+ self.signature()
-+ ret = Task.Task.runnable_status(self)
-+ if ret == Task.SKIP_ME:
-+ # in case the files were removed
-+ self.add_install()
-+ return ret
-+
-+
-+ def post_run(self):
-+ self.add_install()
-+ return Task.Task.post_run(self)
-+
-+
-+ def add_install(self):
-+ nodes = self.generator.sphinx_output_directory.ant_glob('**/*', quiet=True)
-+ self.outputs += nodes
-+ self.generator.add_install_files(install_to=self.generator.install_path,
-+ install_from=nodes,
-+ postpone=False,
-+ cwd=self.generator.sphinx_output_directory,
-+ relative_trick=True)
-diff --git third_party/waf/waflib/extras/wafcache.py third_party/waf/waflib/extras/wafcache.py
-index 8b9567faf14..088fd0d098d 100644
---- third_party/waf/waflib/extras/wafcache.py
-+++ third_party/waf/waflib/extras/wafcache.py
-@@ -16,10 +16,19 @@ The following environment variables may be set:
- - URL to a cache server, for example:
- export WAFCACHE=http://localhost:8080/files/
- in that case, GET/POST requests are made to urls of the form
-- http://localhost:8080/files/000000000/0 (cache management is then up to the server)
-- - GCS or S3 bucket
-- gs://my-bucket/
-- s3://my-bucket/
-+ http://localhost:8080/files/000000000/0 (cache management is delegated to the server)
-+ - GCS, S3 or MINIO bucket
-+ gs://my-bucket/ (uses gsutil command line tool or WAFCACHE_CMD)
-+ s3://my-bucket/ (uses aws command line tool or WAFCACHE_CMD)
-+ minio://my-bucket/ (uses mc command line tool or WAFCACHE_CMD)
-+* WAFCACHE_CMD: bucket upload/download command, for example:
-+ WAFCACHE_CMD="gsutil cp %{SRC} %{TGT}"
-+ Note that the WAFCACHE bucket value is used for the source or destination
-+ depending on the operation (upload or download). For example, with:
-+ WAFCACHE="gs://mybucket/"
-+ the following commands may be run:
-+ gsutil cp build/myprogram gs://mybucket/aa/aaaaa/1
-+ gsutil cp gs://mybucket/bb/bbbbb/2 build/somefile
- * WAFCACHE_NO_PUSH: if set, disables pushing to the cache
- * WAFCACHE_VERBOSITY: if set, displays more detailed cache operations
-
-@@ -30,6 +39,7 @@ File cache specific options:
- * WAFCACHE_EVICT_MAX_BYTES: maximum amount of cache size in bytes (10GB)
- * WAFCACHE_EVICT_INTERVAL_MINUTES: minimum time interval to try
- and trim the cache (3 minutess)
-+
- Usage::
-
- def build(bld):
-@@ -41,7 +51,7 @@ To troubleshoot::
- waf clean build --zones=wafcache
- """
-
--import atexit, base64, errno, fcntl, getpass, os, shutil, sys, time, traceback, urllib3
-+import atexit, base64, errno, fcntl, getpass, os, re, shutil, sys, time, traceback, urllib3, shlex
- try:
- import subprocess32 as subprocess
- except ImportError:
-@@ -53,6 +63,7 @@ if not os.path.isdir(base_cache):
- default_wafcache_dir = os.path.join(base_cache, 'wafcache_' + getpass.getuser())
-
- CACHE_DIR = os.environ.get('WAFCACHE', default_wafcache_dir)
-+WAFCACHE_CMD = os.environ.get('WAFCACHE_CMD')
- TRIM_MAX_FOLDERS = int(os.environ.get('WAFCACHE_TRIM_MAX_FOLDER', 1000000))
- EVICT_INTERVAL_MINUTES = int(os.environ.get('WAFCACHE_EVICT_INTERVAL_MINUTES', 3))
- EVICT_MAX_BYTES = int(os.environ.get('WAFCACHE_EVICT_MAX_BYTES', 10**10))
-@@ -60,6 +71,8 @@ WAFCACHE_NO_PUSH = 1 if os.environ.get('WAFCACHE_NO_PUSH') else 0
- WAFCACHE_VERBOSITY = 1 if os.environ.get('WAFCACHE_VERBOSITY') else 0
- OK = "ok"
-
-+re_waf_cmd = re.compile('(?P<src>%{SRC})|(?P<tgt>%{TGT})')
-+
- try:
- import cPickle
- except ImportError:
-@@ -233,8 +246,9 @@ def build(bld):
- # already called once
- return
-
-- for x in range(bld.jobs):
-- process_pool.append(get_process())
-+ # pre-allocation
-+ processes = [get_process() for x in range(bld.jobs)]
-+ process_pool.extend(processes)
-
- Task.Task.can_retrieve_cache = can_retrieve_cache
- Task.Task.put_files_cache = put_files_cache
-@@ -449,10 +463,20 @@ class fcache(object):
-
- class bucket_cache(object):
- def bucket_copy(self, source, target):
-- if CACHE_DIR.startswith('s3://'):
-+ if WAFCACHE_CMD:
-+ def replacer(match):
-+ if match.group('src'):
-+ return source
-+ elif match.group('tgt'):
-+ return target
-+ cmd = [re_waf_cmd.sub(replacer, x) for x in shlex.split(WAFCACHE_CMD)]
-+ elif CACHE_DIR.startswith('s3://'):
- cmd = ['aws', 's3', 'cp', source, target]
-- else:
-+ elif CACHE_DIR.startswith('gs://'):
- cmd = ['gsutil', 'cp', source, target]
-+ else:
-+ cmd = ['mc', 'cp', source, target]
-+
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = proc.communicate()
- if proc.returncode:
-@@ -510,7 +534,9 @@ def loop(service):
- sys.stdout.flush()
-
- if __name__ == '__main__':
-- if CACHE_DIR.startswith('s3://') or CACHE_DIR.startswith('gs://'):
-+ if CACHE_DIR.startswith('s3://') or CACHE_DIR.startswith('gs://') or CACHE_DIR.startswith('minio://'):
-+ if CACHE_DIR.startswith('minio://'):
-+ CACHE_DIR = CACHE_DIR[8:] # minio doesn't need the protocol part, uses config aliases
- service = bucket_cache()
- elif CACHE_DIR.startswith('http'):
- service = netcache()
-diff --git third_party/waf/waflib/extras/xcode6.py third_party/waf/waflib/extras/xcode6.py
-index 91bbff181ec..c5b309120c9 100644
---- third_party/waf/waflib/extras/xcode6.py
-+++ third_party/waf/waflib/extras/xcode6.py
-@@ -99,7 +99,7 @@ env.PROJ_CONFIGURATION = {
- ...
- }
- 'Release': {
-- 'ARCHS' x86_64'
-+ 'ARCHS': x86_64'
- ...
- }
- }
-@@ -163,12 +163,12 @@ class XCodeNode(object):
- result = result + "\t\t}"
- return result
- elif isinstance(value, str):
-- return "\"%s\"" % value
-+ return '"%s"' % value.replace('"', '\\\\\\"')
- elif isinstance(value, list):
- result = "(\n"
- for i in value:
-- result = result + "\t\t\t%s,\n" % self.tostring(i)
-- result = result + "\t\t)"
-+ result = result + "\t\t\t\t%s,\n" % self.tostring(i)
-+ result = result + "\t\t\t)"
- return result
- elif isinstance(value, XCodeNode):
- return value._id
-@@ -565,13 +565,13 @@ def process_xcode(self):
- # Override target specific build settings
- bldsettings = {
- 'HEADER_SEARCH_PATHS': ['$(inherited)'] + self.env['INCPATHS'],
-- 'LIBRARY_SEARCH_PATHS': ['$(inherited)'] + Utils.to_list(self.env.LIBPATH) + Utils.to_list(self.env.STLIBPATH) + Utils.to_list(self.env.LIBDIR) ,
-+ 'LIBRARY_SEARCH_PATHS': ['$(inherited)'] + Utils.to_list(self.env.LIBPATH) + Utils.to_list(self.env.STLIBPATH) + Utils.to_list(self.env.LIBDIR),
- 'FRAMEWORK_SEARCH_PATHS': ['$(inherited)'] + Utils.to_list(self.env.FRAMEWORKPATH),
-- 'OTHER_LDFLAGS': libs + ' ' + frameworks,
-- 'OTHER_LIBTOOLFLAGS': bld.env['LINKFLAGS'],
-+ 'OTHER_LDFLAGS': libs + ' ' + frameworks + ' ' + ' '.join(bld.env['LINKFLAGS']),
- 'OTHER_CPLUSPLUSFLAGS': Utils.to_list(self.env['CXXFLAGS']),
- 'OTHER_CFLAGS': Utils.to_list(self.env['CFLAGS']),
-- 'INSTALL_PATH': []
-+ 'INSTALL_PATH': [],
-+ 'GCC_PREPROCESSOR_DEFINITIONS': self.env['DEFINES']
- }
-
- # Install path
-@@ -591,7 +591,7 @@ def process_xcode(self):
-
- # The keys represents different build configuration, e.g. Debug, Release and so on..
- # Insert our generated build settings to all configuration names
-- keys = set(settings.keys() + bld.env.PROJ_CONFIGURATION.keys())
-+ keys = set(settings.keys()) | set(bld.env.PROJ_CONFIGURATION.keys())
- for k in keys:
- if k in settings:
- settings[k].update(bldsettings)
---
-2.37.3
-