Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/scons-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@ jobs:
steps:
- uses: actions/checkout@v4

# We can't build with > 3.12 for now: no usable lxml wheel from 3.13 on
- name: Set up Python 3.12
- name: Set up Python 3.14
uses: actions/setup-python@v5
with:
python-version: '3.12'
python-version: '3.14'
cache: 'pip'

- name: Install dependencies
Expand Down
5 changes: 4 additions & 1 deletion CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ NOTE: Since SCons 4.9.0, Python 3.7.0 or above is required.

RELEASE VERSION/DATE TO BE FILLED IN LATER

From John Doe:
From John Doe:

- Whatever John Doe did.

From William Deegan:
- Fix SCons Docbook schema to work with lxml > 5


RELEASE 4.10.1 - Sun, 16 Nov 2025 10:51:57 -0700

Expand Down
3 changes: 3 additions & 0 deletions RELEASE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ DOCUMENTATION
typo fixes, even if they're mentioned in src/CHANGES.txt to give
the contributor credit)

- Fix SCons Docbook schema to work with lxml > 5


DEVELOPMENT
-----------

Expand Down
3 changes: 2 additions & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@ env.Alias("tar-gz", wheel[1])
zip_file = env.Command(
target='$DISTDIR/SCons-${VERSION}.zip',
source=['pyproject.toml', 'setup.py', 'SCons/__init__.py'] + man_pages,
action='$PYTHON setup.py sdist --format=zip',
action="echo NOT WORKING FOR NOW"
# action='$PYTHON setup.py sdist --format=zip',
)
env.Alias("zip", zip_file)

Expand Down
7 changes: 7 additions & 0 deletions bin/SConsDoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@

try:
from lxml import etree
HAS_LXML = True
except ImportError:
HAS_LXML = False
try:
import xml.etree.ElementTree as etree
except ImportError:
Expand Down Expand Up @@ -344,6 +346,11 @@ def newXmlTree(self, root):

@staticmethod
def validateXml(fpath, xmlschema_context):
if not HAS_LXML:
raise RuntimeError(
"lxml is required for XML validation but is not installed. "
"Install it with: pip install lxml"
)

if TreeFactory.xmlschema is None:
TreeFactory.xmlschema = etree.XMLSchema(xmlschema_context)
Expand Down
176 changes: 76 additions & 100 deletions doc/editor_configs/serna/scons/xsd/dbpoolx.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,6 @@
<xs:element ref="linespecific.class"/>
<xs:element ref="informal.class"/>
<xs:element ref="formal.class"/>
<xs:element ref="sconstruct"/>
<xs:element ref="scons_example"/>
<xs:element ref="scons_example_file"/>
<xs:element ref="scons_output"/>
<xs:element ref="sconsdoc"/>
</xs:choice>
</xs:group>
Expand All @@ -318,17 +314,12 @@
<xs:group name="tool.mix">
<xs:choice>
<xs:element ref="summary"/>
<xs:element ref="sets"/>
<xs:element ref="uses"/>
</xs:choice>
</xs:choice>
</xs:group>
<xs:group name="scons_function.mix">
<xs:choice>
<xs:element ref="arguments"/>
<xs:element ref="summary"/>
<xs:element ref="sets"/>
<xs:element ref="uses"/>
</xs:choice>
</xs:choice>
</xs:group>
<xs:group name="admon.mix">
<xs:choice>
Expand Down Expand Up @@ -433,106 +424,92 @@
d. Just Acronym, Emphasis, and Trademark; no other word elements.
-->
<xs:group name="para.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlineobj.char.class"/>
<xs:element ref="synop.class"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlineobj.char.class"/>
<xs:element ref="synop.class"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:group>
<xs:group name="title.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlineobj.char.class"/>
<xs:element ref="ndxterm.class"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlineobj.char.class"/>
<xs:element ref="ndxterm.class"/>
</xs:choice>
</xs:group>
<xs:group name="ndxterm.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="xref.char.class"/>
<xs:element ref="gen.char.class"/>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:element ref="docinfo.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
</xs:choice>
</xs:group>
<xs:group name="cptr.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="link.char.class"/>
<xs:element ref="tech.char.class"/>
<xs:group ref="base.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:group>
<xs:group name="smallcptr.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="replaceable"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="replaceable"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:group>
<xs:group name="word.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="acronym"/>
<xs:element ref="emphasis"/>
<xs:element ref="trademark"/>
<xs:element ref="link.char.class"/>
<xs:group ref="base.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="acronym"/>
<xs:element ref="emphasis"/>
<xs:element ref="trademark"/>
<xs:element ref="link.char.class"/>
<xs:group ref="base.char.class"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
<xs:element ref="beginpage"/>
</xs:choice>
</xs:group>
<xs:group name="docinfo.char.mix">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="link.char.class"/>
<xs:element ref="emphasis"/>
<xs:element ref="trademark"/>
<xs:element ref="replaceable"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
</xs:choice>
</xs:sequence>
<xs:choice>
<xs:element ref="link.char.class"/>
<xs:element ref="emphasis"/>
<xs:element ref="trademark"/>
<xs:element ref="replaceable"/>
<xs:group ref="other.char.class"/>
<xs:element ref="inlinegraphic"/>
<xs:element ref="inlinemediaobject"/>
<xs:element ref="ndxterm.class"/>
</xs:choice>
</xs:group>
<!-- ENTITY % bibliocomponent.mix (see Bibliographic section, below) -->
<!-- ENTITY % person.ident.mix (see Bibliographic section, below) -->
Expand Down Expand Up @@ -2454,7 +2431,6 @@
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="component.mix"/>
<xs:group ref="summary.mix"/>
</xs:choice>
<xs:attributeGroup ref="summary.attlist"/>
</xs:complexType>
Expand Down
Loading