Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package scons for openSUSE:Factory checked in at 2025-04-02 17:05:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/scons (Old) and /work/SRC/openSUSE:Factory/.scons.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "scons" Wed Apr 2 17:05:35 2025 rev:52 rq:1265575 version:4.9.1 Changes: -------- --- /work/SRC/openSUSE:Factory/scons/scons.changes 2025-03-16 18:58:52.945211804 +0100 +++ /work/SRC/openSUSE:Factory/.scons.new.1907/scons.changes 2025-04-02 17:06:17.563567295 +0200 @@ -1,0 +2,7 @@ +Sat Mar 29 22:51:55 UTC 2025 - Andreas Stieger <andreas.stie...@gmx.de> + +- SCons 4.9.1: + * Fix CacheDir initialization code failed on Python 3.7 + * developer visible fixes and changes for other platforms + +------------------------------------------------------------------- Old: ---- SCons-4.9.0.tar.gz New: ---- SCons-4.9.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ scons.spec ++++++ --- /var/tmp/diff_new_pack.08zzvg/_old 2025-04-02 17:06:18.463605001 +0200 +++ /var/tmp/diff_new_pack.08zzvg/_new 2025-04-02 17:06:18.463605001 +0200 @@ -2,7 +2,7 @@ # spec file for package scons # # Copyright (c) 2025 SUSE LLC -# Copyright (c) 2024 Andreas Stieger <andreas.stie...@gmx.de> +# Copyright (c) 2025 Andreas Stieger <andreas.stie...@gmx.de> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,7 +20,7 @@ %define pythons python3 %{?sle15_python_module_pythons} Name: scons -Version: 4.9.0 +Version: 4.9.1 Release: 0 Summary: Replacement for Make License: MIT ++++++ SCons-4.9.0.tar.gz -> SCons-4.9.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/PKG-INFO new/scons-4.9.1/PKG-INFO --- old/scons-4.9.0/PKG-INFO 2025-03-02 23:34:06.363333000 +0100 +++ new/scons-4.9.1/PKG-INFO 2025-03-28 23:25:07.689819000 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: SCons -Version: 4.9.0 +Version: 4.9.1 Summary: Open Source next-generation build tool. Author-email: William Deegan <b...@baddogconsulting.com> License: MIT @@ -33,6 +33,7 @@ Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE +Dynamic: license-file SCons - a Software Construction Tool #################################### diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/SCons/CacheDir.py new/scons-4.9.1/SCons/CacheDir.py --- old/scons-4.9.0/SCons/CacheDir.py 2024-12-22 00:20:04.000000000 +0100 +++ new/scons-4.9.1/SCons/CacheDir.py 2025-03-27 19:31:55.000000000 +0100 @@ -27,6 +27,7 @@ import atexit import json import os +import shutil import stat import sys import tempfile @@ -76,7 +77,6 @@ def CacheRetrieveString(target, source, env) -> str: t = target[0] - fs = t.fs cd = env.get_CacheDir() cachedir, cachefile = cd.cachepath(t) if t.fs.exists(cachefile): @@ -210,21 +210,44 @@ return False try: - tempdir = tempfile.TemporaryDirectory(dir=os.path.dirname(directory)) + # TODO: Python 3.7. See comment below. + # tempdir = tempfile.TemporaryDirectory(dir=os.path.dirname(directory)) + tempdir = tempfile.mkdtemp(dir=os.path.dirname(directory)) except OSError as e: msg = "Failed to create cache directory " + path raise SCons.Errors.SConsEnvironmentError(msg) from e - self._add_config(tempdir.name) - with tempdir: - try: - os.rename(tempdir.name, directory) - return True - except Exception as e: - # did someone else get there first? - if os.path.isdir(directory): - return False - msg = "Failed to create cache directory " + path - raise SCons.Errors.SConsEnvironmentError(msg) from e + + # TODO: Python 3.7: the context manager raises exception on cleanup + # if the temporary was moved successfully (File Not Found). + # Fixed in 3.8+. In the replacement below we manually clean up if + # the move failed as mkdtemp() does not. TemporaryDirectory's + # cleanup is more sophisitcated so prefer when we can use it. + # self._add_config(tempdir.name) + # with tempdir: + # try: + # os.replace(tempdir.name, directory) + # return True + # except OSError as e: + # # did someone else get there first? + # if os.path.isdir(directory): + # return False # context manager cleans up + # msg = "Failed to create cache directory " + path + # raise SCons.Errors.SConsEnvironmentError(msg) from e + + self._add_config(tempdir) + try: + os.replace(tempdir, directory) + return True + except OSError as e: + # did someone else get there first? attempt cleanup. + if os.path.isdir(directory): + try: + shutil.rmtree(tempdir) + except Exception: # we tried, don't worry about it + pass + return False + msg = "Failed to create cache directory " + path + raise SCons.Errors.SConsEnvironmentError(msg) from e def _readconfig(self, path: str) -> None: """Read the cache config from *path*. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/SCons/Tool/docbook/__init__.py new/scons-4.9.1/SCons/Tool/docbook/__init__.py --- old/scons-4.9.0/SCons/Tool/docbook/__init__.py 2024-09-22 03:25:14.000000000 +0200 +++ new/scons-4.9.1/SCons/Tool/docbook/__init__.py 2025-03-27 19:31:55.000000000 +0100 @@ -157,16 +157,22 @@ # TODO: Set minimum version of saxon-xslt to be 8.x (lower than this only supports xslt 1.0. # see: https://saxon.sourceforge.net/saxon6.5.5/ # see: https://saxon.sourceforge.net/ -xsltproc_com = {'xsltproc' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE', - 'saxon' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS', - # Note if saxon-xslt is version 5.5 the proper arguments are: (swap order of docbook_xsl and source) - # 'saxon-xslt' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $SOURCE $DOCBOOK_XSL $DOCBOOK_XSLTPROCPARAMS', - 'saxon-xslt' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS', - 'xalan' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -q -out $TARGET -xsl $DOCBOOK_XSL -in $SOURCE'} -xmllint_com = {'xmllint' : '$DOCBOOK_XMLLINT $DOCBOOK_XMLLINTFLAGS --xinclude $SOURCE > $TARGET'} -fop_com = {'fop' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -fo $SOURCE -pdf $TARGET', - 'xep' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -valid -fo $SOURCE -pdf $TARGET', - 'jw' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -f docbook -b pdf $SOURCE -o $TARGET'} +xsltproc_com = { + 'xsltproc': '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE', + 'saxon': '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS', + # Note if saxon-xslt is version 5.5 the proper arguments are: (swap order of docbook_xsl and source) + # 'saxon-xslt' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $SOURCE $DOCBOOK_XSL $DOCBOOK_XSLTPROCPARAMS', + 'saxon-xslt': '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS', + 'xalan': '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -q -out $TARGET -xsl $DOCBOOK_XSL -in $SOURCE', +} +xmllint_com = { + 'xmllint': '$DOCBOOK_XMLLINT $DOCBOOK_XMLLINTFLAGS --xinclude $SOURCE > $TARGET' +} +fop_com = { + 'fop': '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -fo $SOURCE -pdf $TARGET', + 'xep': '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -valid -fo $SOURCE -pdf $TARGET', + 'jw': '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -f docbook -b pdf $SOURCE -o $TARGET', +} def __detect_cl_tool(env, chainkey, cdict, cpriority=None) -> None: """ @@ -180,11 +186,11 @@ cpriority = cdict.keys() for cltool in cpriority: if __debug_tool_location: - print("DocBook: Looking for %s"%cltool) + print(f"DocBook: Looking for {cltool}") clpath = env.WhereIs(cltool) if clpath: if __debug_tool_location: - print("DocBook: Found:%s"%cltool) + print(f"DocBook: Found:{cltool}") env[chainkey] = clpath if not env[chainkey + 'COM']: env[chainkey + 'COM'] = cdict[cltool] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/SCons/Util/__init__.py new/scons-4.9.1/SCons/Util/__init__.py --- old/scons-4.9.0/SCons/Util/__init__.py 2024-11-20 19:52:33.000000000 +0100 +++ new/scons-4.9.1/SCons/Util/__init__.py 2025-03-27 19:31:55.000000000 +0100 @@ -1297,36 +1297,70 @@ return print_time -def wait_for_process_to_die(pid) -> None: +def wait_for_process_to_die(pid: int) -> None: """ - Wait for specified process to die, or alternatively kill it - NOTE: This function operates best with psutil pypi package + Wait for the specified process to die. + TODO: Add timeout which raises exception """ # wait for the process to fully killed try: import psutil # pylint: disable=import-outside-toplevel while True: + # TODO: this should use psutil.process_exists() or psutil.Process.wait() + # The psutil docs explicitly recommend against using process_iter()/pids() + # for checking the existence of a process. if pid not in [proc.pid for proc in psutil.process_iter()]: break time.sleep(0.1) except ImportError: # if psutil is not installed we can do this the hard way - while True: - if sys.platform == 'win32': - import ctypes # pylint: disable=import-outside-toplevel - PROCESS_QUERY_INFORMATION = 0x1000 - processHandle = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) - if processHandle == 0: - break - ctypes.windll.kernel32.CloseHandle(processHandle) - time.sleep(0.1) - else: - try: - os.kill(pid, 0) - except OSError: - break - time.sleep(0.1) + _wait_for_process_to_die_non_psutil(pid, timeout=-1.0) + + +def _wait_for_process_to_die_non_psutil(pid: int, timeout: float = 60.0) -> None: + start_time = time.time() + while True: + if not _is_process_alive(pid): + break + if timeout >= 0.0 and time.time() - start_time > timeout: + raise TimeoutError(f"timed out waiting for process {pid}") + time.sleep(0.1) + + +if sys.platform == 'win32': + def _is_process_alive(pid: int) -> bool: + import ctypes # pylint: disable=import-outside-toplevel + PROCESS_QUERY_INFORMATION = 0x1000 + STILL_ACTIVE = 259 + + processHandle = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) + if processHandle == 0: + return False + + # OpenProcess() may successfully return a handle even for terminated + # processes when something else in the system is still holding a + # reference to their handle. Call GetExitCodeProcess() to check if the + # process has already exited. + try: + exit_code = ctypes.c_ulong() + success = ctypes.windll.kernel32.GetExitCodeProcess( + processHandle, ctypes.byref(exit_code)) + if success: + return exit_code.value == STILL_ACTIVE + finally: + ctypes.windll.kernel32.CloseHandle(processHandle) + + return True + +else: + def _is_process_alive(pid: int) -> bool: + try: + os.kill(pid, 0) + return True + except OSError: + return False + # From: https://stackoverflow.com/questions/1741972/how-to-use-different-formatters-with-the-same-logging-handler-in-python class DispatchingFormatter(Formatter): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/SCons/__init__.py new/scons-4.9.1/SCons/__init__.py --- old/scons-4.9.0/SCons/__init__.py 2025-03-02 23:33:50.000000000 +0100 +++ new/scons-4.9.1/SCons/__init__.py 2025-03-28 23:25:05.000000000 +0100 @@ -1,9 +1,9 @@ -__version__="4.9.0" +__version__="4.9.1" __copyright__="Copyright (c) 2001 - 2025 The SCons Foundation" __developer__="bdbaddog" -__date__="Sun, 02 Mar 2025 14:33:49 -0700" +__date__="Fri, 28 Mar 2025 15:25:00 -0700" __buildsys__="M1Dog2021" -__revision__="f6f2fd98b2a94871b506e517873af4d6faf04ed9" -__build__="f6f2fd98b2a94871b506e517873af4d6faf04ed9" +__revision__="dfd6b7e45985eb73462d2efa878651c92745099c" +__build__="dfd6b7e45985eb73462d2efa878651c92745099c" # make sure compatibility is always in place import SCons.compat # noqa \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/SCons.egg-info/PKG-INFO new/scons-4.9.1/SCons.egg-info/PKG-INFO --- old/scons-4.9.0/SCons.egg-info/PKG-INFO 2025-03-02 23:34:06.000000000 +0100 +++ new/scons-4.9.1/SCons.egg-info/PKG-INFO 2025-03-28 23:25:07.000000000 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: SCons -Version: 4.9.0 +Version: 4.9.1 Summary: Open Source next-generation build tool. Author-email: William Deegan <b...@baddogconsulting.com> License: MIT @@ -33,6 +33,7 @@ Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE +Dynamic: license-file SCons - a Software Construction Tool #################################### diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/scons-time.1 new/scons-4.9.1/scons-time.1 --- old/scons-4.9.0/scons-time.1 2025-03-02 23:34:01.000000000 +0100 +++ new/scons-4.9.1/scons-time.1 2025-03-27 19:44:36.000000000 +0100 @@ -2,12 +2,12 @@ .\" Title: SCONS-TIME .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> -.\" Date: 03/02/2025 -.\" Manual: SCons 4.9.0 -.\" Source: SCons 4.9.0 +.\" Date: 03/27/2025 +.\" Manual: SCons 4.9.1 +.\" Source: SCons 4.9.1 .\" Language: English .\" -.TH "SCONS\-TIME" "1" "03/02/2025" "SCons 4\&.9\&.0" "SCons 4\&.9\&.0" +.TH "SCONS\-TIME" "1" "03/27/2025" "SCons 4\&.9\&.1" "SCons 4\&.9\&.1" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/scons.1 new/scons-4.9.1/scons.1 --- old/scons-4.9.0/scons.1 2025-03-02 23:34:04.000000000 +0100 +++ new/scons-4.9.1/scons.1 2025-03-27 19:44:39.000000000 +0100 @@ -2,12 +2,12 @@ .\" Title: SCONS .\" Author: The SCons Development Team .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> -.\" Date: <pubdate>Released Sun, 02 Mar 2025 14:33:49 -0700</pubdate> -.\" Manual: SCons 4.9.0 -.\" Source: SCons 4.9.0 Version 4.9.0 +.\" Date: <pubdate>Released Thu, 27 Mar 2025 11:44:24 -0700</pubdate> +.\" Manual: SCons 4.9.1 +.\" Source: SCons 4.9.1 Version 4.9.1 .\" Language: English .\" -.TH "SCONS" "1" "<pubdate>Released Sun, 02 Mar 2025 14:33:49 -0700</pubdate>" "SCons 4\&.9\&.0 Version 4.9.0" "SCons 4\&.9\&.0" +.TH "SCONS" "1" "<pubdate>Released Thu, 27 Mar 2025 11:44:24 -0700</pubdate>" "SCons 4\&.9\&.1 Version 4.9.1" "SCons 4\&.9\&.1" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/scons-4.9.0/sconsign.1 new/scons-4.9.1/sconsign.1 --- old/scons-4.9.0/sconsign.1 2025-03-02 23:34:04.000000000 +0100 +++ new/scons-4.9.1/sconsign.1 2025-03-27 19:44:39.000000000 +0100 @@ -2,12 +2,12 @@ .\" Title: SCONSIGN .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> -.\" Date: 03/02/2025 -.\" Manual: SCons 4.9.0 -.\" Source: SCons 4.9.0 +.\" Date: 03/27/2025 +.\" Manual: SCons 4.9.1 +.\" Source: SCons 4.9.1 .\" Language: English .\" -.TH "SCONSIGN" "1" "03/02/2025" "SCons 4\&.9\&.0" "SCons 4\&.9\&.0" +.TH "SCONSIGN" "1" "03/27/2025" "SCons 4\&.9\&.1" "SCons 4\&.9\&.1" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" -----------------------------------------------------------------