Skip to content

Commit baf78cf

Browse files
committed
Build pyexpat module on Windows too
Fixes #469
1 parent d4044b1 commit baf78cf

File tree

8 files changed

+112
-241
lines changed

8 files changed

+112
-241
lines changed

graalpython/com.oracle.graal.python.cext/CMakeLists.txt

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -226,28 +226,28 @@ if(NOT WIN32)
226226
# variable 'TARGET_LIBBZ2' is defined in file 'LIBBZ2_BUILD_FILE'
227227
target_link_libraries(${TARGET_BZ2} ${TARGET_LIBBZ2})
228228
endif()
229-
230-
231-
###################### PYEXPAT ######################
232-
set(TARGET_PYEXPAT "pyexpat")
233-
simple_native_module(${TARGET_PYEXPAT})
234-
set(EXPAT_SRC "${SRC_DIR}/expat")
235-
set(PYEXPAT_HEADERS
236-
${EXPAT_SRC}/ascii.h ${EXPAT_SRC}/asciitab.h ${EXPAT_SRC}/expat.h ${EXPAT_SRC}/expat_config.h
237-
${EXPAT_SRC}/expat_external.h ${EXPAT_SRC}/internal.h ${EXPAT_SRC}/latin1tab.h ${EXPAT_SRC}/utf8tab.h
238-
${EXPAT_SRC}/xmlrole.h ${EXPAT_SRC}/xmltok.h ${EXPAT_SRC}/xmltok_impl.h
239-
)
240-
target_sources(${TARGET_PYEXPAT} PRIVATE ${PYEXPAT_HEADERS})
241-
target_sources(${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC}/xmlparse.c ${EXPAT_SRC}/xmlrole.c ${EXPAT_SRC}/xmltok.c)
242-
target_include_directories(${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC})
243-
# bpo-30947: Python uses best available entropy sources to call XML_SetHashSalt(),
244-
# expat entropy sources are not needed
245-
target_compile_definitions(${TARGET_PYEXPAT} PRIVATE
246-
HAVE_EXPAT_CONFIG_H=1
247-
XML_POOR_ENTROPY=1
248-
)
249229
endif()
250230

231+
###################### PYEXPAT ######################
232+
set(TARGET_PYEXPAT "pyexpat")
233+
simple_native_module(${TARGET_PYEXPAT})
234+
set(EXPAT_SRC "${SRC_DIR}/expat")
235+
set(PYEXPAT_HEADERS
236+
${EXPAT_SRC}/ascii.h ${EXPAT_SRC}/asciitab.h ${EXPAT_SRC}/expat.h ${EXPAT_SRC}/expat_config.h
237+
${EXPAT_SRC}/expat_external.h ${EXPAT_SRC}/internal.h ${EXPAT_SRC}/latin1tab.h ${EXPAT_SRC}/utf8tab.h
238+
${EXPAT_SRC}/xmlrole.h ${EXPAT_SRC}/xmltok.h ${EXPAT_SRC}/xmltok_impl.h
239+
)
240+
target_sources(${TARGET_PYEXPAT} PRIVATE ${PYEXPAT_HEADERS})
241+
target_sources(${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC}/xmlparse.c ${EXPAT_SRC}/xmlrole.c ${EXPAT_SRC}/xmltok.c)
242+
target_include_directories(${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC})
243+
# bpo-30947: Python uses best available entropy sources to call XML_SetHashSalt(),
244+
# expat entropy sources are not needed
245+
target_compile_definitions(${TARGET_PYEXPAT} PRIVATE
246+
HAVE_EXPAT_CONFIG_H=1
247+
XML_POOR_ENTROPY=1
248+
XML_DTD=1
249+
)
250+
251251
target_sources(${TARGET_LIBPYTHON} PRIVATE ${SRC_FILES})
252252
target_include_directories(${TARGET_LIBPYTHON} PRIVATE
253253
"${SRC_DIR}/include/internal"
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
__ __ _
3+
___\ \/ /_ __ __ _| |_
4+
/ _ \\ /| '_ \ / _` | __|
5+
| __// \| |_) | (_| | |_
6+
\___/_/\_\ .__/ \__,_|\__|
7+
|_| XML parser
8+
9+
Copyright (c) 2000 Clark Cooper <[email protected]>
10+
Copyright (c) 2002 Greg Stein <[email protected]>
11+
Copyright (c) 2005 Karl Waclawek <[email protected]>
12+
Copyright (c) 2017-2021 Sebastian Pipping <[email protected]>
13+
Licensed under the MIT license:
14+
15+
Permission is hereby granted, free of charge, to any person obtaining
16+
a copy of this software and associated documentation files (the
17+
"Software"), to deal in the Software without restriction, including
18+
without limitation the rights to use, copy, modify, merge, publish,
19+
distribute, sublicense, and/or sell copies of the Software, and to permit
20+
persons to whom the Software is furnished to do so, subject to the
21+
following conditions:
22+
23+
The above copyright notice and this permission notice shall be included
24+
in all copies or substantial portions of the Software.
25+
26+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29+
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
30+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
31+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32+
USE OR OTHER DEALINGS IN THE SOFTWARE.
33+
*/
34+
35+
#ifndef WINCONFIG_H
36+
#define WINCONFIG_H
37+
38+
#define WIN32_LEAN_AND_MEAN
39+
#include <windows.h>
40+
#undef WIN32_LEAN_AND_MEAN
41+
42+
#include <memory.h>
43+
#include <string.h>
44+
45+
#endif /* ndef WINCONFIG_H */
Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
1-
test.test_pyexpat.BufferTextTest.test1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
2-
test.test_pyexpat.BufferTextTest.test2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
3-
test.test_pyexpat.BufferTextTest.test3 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
4-
test.test_pyexpat.BufferTextTest.test4 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
5-
test.test_pyexpat.BufferTextTest.test5 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
6-
test.test_pyexpat.BufferTextTest.test6 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
7-
test.test_pyexpat.BufferTextTest.test7 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
8-
test.test_pyexpat.BufferTextTest.test_buffering_enabled @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
9-
test.test_pyexpat.BufferTextTest.test_default_to_disabled @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
10-
test.test_pyexpat.ChardataBufferTest.test_1000_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
11-
test.test_pyexpat.ChardataBufferTest.test_1025_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
12-
test.test_pyexpat.ChardataBufferTest.test_change_size_1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
13-
test.test_pyexpat.ChardataBufferTest.test_change_size_2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
14-
test.test_pyexpat.ChardataBufferTest.test_disabling_buffer @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
15-
test.test_pyexpat.ChardataBufferTest.test_unchanged_size @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
16-
test.test_pyexpat.ChardataBufferTest.test_wrong_size @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
17-
test.test_pyexpat.ErrorMessageTest.test_codes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
18-
test.test_pyexpat.ErrorMessageTest.test_expaterror @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
19-
test.test_pyexpat.ForeignDTDTests.test_ignore_use_foreign_dtd @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
20-
test.test_pyexpat.ForeignDTDTests.test_use_foreign_dtd @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
21-
test.test_pyexpat.InterningTest.test @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
22-
test.test_pyexpat.InterningTest.test_issue9402 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
23-
test.test_pyexpat.MalformedInputTest.test1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
24-
test.test_pyexpat.MalformedInputTest.test2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
25-
test.test_pyexpat.NamespaceSeparatorTest.test_illegal @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
26-
test.test_pyexpat.NamespaceSeparatorTest.test_legal @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
27-
test.test_pyexpat.NamespaceSeparatorTest.test_zero_length @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
28-
test.test_pyexpat.ParseTest.test_parse_again @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
29-
test.test_pyexpat.ParseTest.test_parse_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
30-
test.test_pyexpat.ParseTest.test_parse_file @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
31-
test.test_pyexpat.ParseTest.test_parse_str @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
32-
test.test_pyexpat.PositionTest.test @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
33-
test.test_pyexpat.SetAttributeTest.test_buffer_text @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
34-
test.test_pyexpat.SetAttributeTest.test_invalid_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
35-
test.test_pyexpat.SetAttributeTest.test_namespace_prefixes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
36-
test.test_pyexpat.SetAttributeTest.test_ordered_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
37-
test.test_pyexpat.SetAttributeTest.test_specified_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
38-
test.test_pyexpat.sf1296433Test.test_parse_only_xml_data @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64
1+
test.test_pyexpat.BufferTextTest.test1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
2+
test.test_pyexpat.BufferTextTest.test2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
3+
test.test_pyexpat.BufferTextTest.test3 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
4+
test.test_pyexpat.BufferTextTest.test4 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
5+
test.test_pyexpat.BufferTextTest.test5 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
6+
test.test_pyexpat.BufferTextTest.test6 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
7+
test.test_pyexpat.BufferTextTest.test7 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
8+
test.test_pyexpat.BufferTextTest.test_buffering_enabled @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
9+
test.test_pyexpat.BufferTextTest.test_default_to_disabled @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
10+
test.test_pyexpat.ChardataBufferTest.test_1000_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
11+
test.test_pyexpat.ChardataBufferTest.test_1025_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
12+
test.test_pyexpat.ChardataBufferTest.test_change_size_1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
13+
test.test_pyexpat.ChardataBufferTest.test_change_size_2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
14+
test.test_pyexpat.ChardataBufferTest.test_disabling_buffer @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
15+
test.test_pyexpat.ChardataBufferTest.test_unchanged_size @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
16+
test.test_pyexpat.ChardataBufferTest.test_wrong_size @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
17+
test.test_pyexpat.ErrorMessageTest.test_codes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
18+
test.test_pyexpat.ErrorMessageTest.test_expaterror @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
19+
test.test_pyexpat.ForeignDTDTests.test_ignore_use_foreign_dtd @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
20+
test.test_pyexpat.ForeignDTDTests.test_use_foreign_dtd @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
21+
test.test_pyexpat.InterningTest.test @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
22+
test.test_pyexpat.InterningTest.test_issue9402 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
23+
test.test_pyexpat.MalformedInputTest.test1 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
24+
test.test_pyexpat.MalformedInputTest.test2 @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
25+
test.test_pyexpat.NamespaceSeparatorTest.test_illegal @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
26+
test.test_pyexpat.NamespaceSeparatorTest.test_legal @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
27+
test.test_pyexpat.NamespaceSeparatorTest.test_zero_length @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
28+
test.test_pyexpat.ParseTest.test_parse_again @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
29+
test.test_pyexpat.ParseTest.test_parse_bytes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
30+
test.test_pyexpat.ParseTest.test_parse_file @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
31+
test.test_pyexpat.ParseTest.test_parse_str @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
32+
test.test_pyexpat.PositionTest.test @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
33+
test.test_pyexpat.SetAttributeTest.test_buffer_text @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
34+
test.test_pyexpat.SetAttributeTest.test_invalid_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
35+
test.test_pyexpat.SetAttributeTest.test_namespace_prefixes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
36+
test.test_pyexpat.SetAttributeTest.test_ordered_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
37+
test.test_pyexpat.SetAttributeTest.test_specified_attributes @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64
38+
test.test_pyexpat.sf1296433Test.test_parse_only_xml_data @ darwin-arm64,darwin-x86_64,linux-aarch64,linux-x86_64,win32-AMD64

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2024, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2025, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -46,8 +46,8 @@
4646
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
4747

4848
import java.io.IOException;
49-
import java.io.StringWriter;
5049
import java.io.PrintWriter;
50+
import java.io.StringWriter;
5151
import java.math.BigInteger;
5252
import java.util.ArrayList;
5353
import java.util.Arrays;
@@ -59,10 +59,6 @@
5959
import java.util.ServiceLoader;
6060
import java.util.logging.Level;
6161

62-
import com.oracle.graal.python.builtins.objects.foreign.ForeignBooleanBuiltins;
63-
import com.oracle.graal.python.builtins.objects.foreign.ForeignNumberBuiltins;
64-
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
65-
import com.oracle.graal.python.nodes.object.GetForeignObjectClassNode;
6662
import org.graalvm.nativeimage.ImageInfo;
6763

6864
import com.oracle.graal.python.PythonLanguage;
@@ -104,7 +100,6 @@
104100
import com.oracle.graal.python.builtins.modules.PosixShMemModuleBuiltins;
105101
import com.oracle.graal.python.builtins.modules.PosixSubprocessModuleBuiltins;
106102
import com.oracle.graal.python.builtins.modules.PwdModuleBuiltins;
107-
import com.oracle.graal.python.builtins.modules.PyExpatModuleBuiltins;
108103
import com.oracle.graal.python.builtins.modules.QueueModuleBuiltins;
109104
import com.oracle.graal.python.builtins.modules.RandomModuleBuiltins;
110105
import com.oracle.graal.python.builtins.modules.ReadlineModuleBuiltins;
@@ -264,6 +259,8 @@
264259
import com.oracle.graal.python.builtins.objects.exception.UnicodeTranslateErrorBuiltins;
265260
import com.oracle.graal.python.builtins.objects.floats.FloatBuiltins;
266261
import com.oracle.graal.python.builtins.objects.floats.PFloat;
262+
import com.oracle.graal.python.builtins.objects.foreign.ForeignBooleanBuiltins;
263+
import com.oracle.graal.python.builtins.objects.foreign.ForeignNumberBuiltins;
267264
import com.oracle.graal.python.builtins.objects.foreign.ForeignObjectBuiltins;
268265
import com.oracle.graal.python.builtins.objects.frame.FrameBuiltins;
269266
import com.oracle.graal.python.builtins.objects.function.AbstractFunctionBuiltins;
@@ -360,6 +357,7 @@
360357
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins;
361358
import com.oracle.graal.python.builtins.objects.tuple.TupleGetterBuiltins;
362359
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
360+
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
363361
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
364362
import com.oracle.graal.python.builtins.objects.type.TpSlots;
365363
import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
@@ -372,6 +370,7 @@
372370
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromPythonObjectNode;
373371
import com.oracle.graal.python.nodes.attributes.WriteAttributeToPythonObjectNode;
374372
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
373+
import com.oracle.graal.python.nodes.object.GetForeignObjectClassNode;
375374
import com.oracle.graal.python.nodes.statement.AbstractImportNode;
376375
import com.oracle.graal.python.pegparser.FutureFeature;
377376
import com.oracle.graal.python.pegparser.InputType;
@@ -676,8 +675,6 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
676675
PythonImageBuildOptions.WITHOUT_DIGEST ? null : new Blake2sObjectBuiltins(),
677676
PythonImageBuildOptions.WITHOUT_DIGEST ? null : new HashlibModuleBuiltins(),
678677

679-
new PyExpatModuleBuiltins(),
680-
681678
// itertools
682679
new AccumulateBuiltins(),
683680
new CombinationsBuiltins(),

0 commit comments

Comments
 (0)