nokogiri 1.14.5 → 1.16.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +19 -15
  3. data/README.md +4 -1
  4. data/dependencies.yml +9 -8
  5. data/ext/nokogiri/extconf.rb +69 -26
  6. data/ext/nokogiri/html4_document.c +1 -2
  7. data/ext/nokogiri/html4_element_description.c +19 -14
  8. data/ext/nokogiri/html4_sax_parser_context.c +10 -16
  9. data/ext/nokogiri/html4_sax_push_parser.c +3 -3
  10. data/ext/nokogiri/nokogiri.c +46 -24
  11. data/ext/nokogiri/nokogiri.h +23 -5
  12. data/ext/nokogiri/test_global_handlers.c +1 -1
  13. data/ext/nokogiri/xml_attr.c +1 -1
  14. data/ext/nokogiri/xml_cdata.c +30 -17
  15. data/ext/nokogiri/xml_comment.c +1 -1
  16. data/ext/nokogiri/xml_document.c +113 -25
  17. data/ext/nokogiri/xml_document_fragment.c +1 -1
  18. data/ext/nokogiri/xml_dtd.c +1 -1
  19. data/ext/nokogiri/xml_element_content.c +32 -29
  20. data/ext/nokogiri/xml_element_decl.c +5 -5
  21. data/ext/nokogiri/xml_encoding_handler.c +12 -4
  22. data/ext/nokogiri/xml_entity_reference.c +1 -1
  23. data/ext/nokogiri/xml_namespace.c +11 -16
  24. data/ext/nokogiri/xml_node.c +13 -16
  25. data/ext/nokogiri/xml_node_set.c +125 -105
  26. data/ext/nokogiri/xml_processing_instruction.c +1 -1
  27. data/ext/nokogiri/xml_reader.c +61 -74
  28. data/ext/nokogiri/xml_relax_ng.c +66 -79
  29. data/ext/nokogiri/xml_sax_parser.c +24 -5
  30. data/ext/nokogiri/xml_sax_parser_context.c +50 -25
  31. data/ext/nokogiri/xml_sax_push_parser.c +30 -9
  32. data/ext/nokogiri/xml_schema.c +94 -115
  33. data/ext/nokogiri/xml_syntax_error.c +3 -3
  34. data/ext/nokogiri/xml_text.c +26 -13
  35. data/ext/nokogiri/xml_xpath_context.c +153 -83
  36. data/ext/nokogiri/xslt_stylesheet.c +111 -53
  37. data/gumbo-parser/Makefile +18 -0
  38. data/gumbo-parser/src/error.c +8 -4
  39. data/gumbo-parser/src/foreign_attrs.c +13 -14
  40. data/gumbo-parser/src/foreign_attrs.gperf +1 -1
  41. data/gumbo-parser/src/parser.c +21 -5
  42. data/gumbo-parser/src/tokenizer.c +1 -0
  43. data/lib/nokogiri/css/parser_extras.rb +1 -1
  44. data/lib/nokogiri/css/xpath_visitor.rb +3 -23
  45. data/lib/nokogiri/extension.rb +1 -1
  46. data/lib/nokogiri/html4/document.rb +1 -1
  47. data/lib/nokogiri/html4/document_fragment.rb +1 -1
  48. data/lib/nokogiri/html4/element_description_defaults.rb +1821 -353
  49. data/lib/nokogiri/html4/encoding_reader.rb +1 -1
  50. data/lib/nokogiri/html5/document_fragment.rb +1 -1
  51. data/lib/nokogiri/html5/node.rb +5 -0
  52. data/lib/nokogiri/html5.rb +0 -63
  53. data/lib/nokogiri/version/constant.rb +1 -1
  54. data/lib/nokogiri/version/info.rb +6 -5
  55. data/lib/nokogiri/xml/attr.rb +2 -2
  56. data/lib/nokogiri/xml/attribute_decl.rb +4 -2
  57. data/lib/nokogiri/xml/document.rb +4 -5
  58. data/lib/nokogiri/xml/document_fragment.rb +3 -3
  59. data/lib/nokogiri/xml/element_content.rb +10 -2
  60. data/lib/nokogiri/xml/element_decl.rb +4 -2
  61. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  62. data/lib/nokogiri/xml/namespace.rb +1 -2
  63. data/lib/nokogiri/xml/node/save_options.rb +8 -0
  64. data/lib/nokogiri/xml/node.rb +53 -37
  65. data/lib/nokogiri/xml/node_set.rb +3 -3
  66. data/lib/nokogiri/xml/pp/node.rb +23 -12
  67. data/lib/nokogiri/xml/reader.rb +10 -9
  68. data/lib/nokogiri/xml/sax/document.rb +1 -1
  69. data/lib/nokogiri/xml/searchable.rb +21 -13
  70. data/lib/nokogiri/xml/syntax_error.rb +1 -1
  71. data/lib/nokogiri/xml.rb +1 -1
  72. data/lib/nokogiri/xslt/stylesheet.rb +29 -7
  73. data/lib/nokogiri/xslt.rb +74 -4
  74. data/lib/nokogiri.rb +13 -5
  75. data/lib/xsd/xmlparser/nokogiri.rb +1 -1
  76. data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
  77. data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
  78. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  79. data/ports/archives/libxml2-2.12.7.tar.xz +0 -0
  80. data/ports/archives/libxslt-1.1.39.tar.xz +0 -0
  81. metadata +14 -12
  82. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +0 -3037
  83. data/ports/archives/libxml2-2.10.4.tar.xz +0 -0
  84. data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
@@ -36,16 +36,19 @@ module Nokogiri
36
36
  # node.search('.//address[@domestic=$value]', nil, {:value => 'Yes'})
37
37
  #
38
38
  # 💡 Custom XPath functions and CSS pseudo-selectors may also be defined. To define custom
39
- # functions create a class and implement the function you want to define. The first argument
40
- # to the method will be the current matching NodeSet. Any other arguments are ones that you
41
- # pass in. Note that this class may appear anywhere in the argument list. For example:
39
+ # functions create a class and implement the function you want to define, which will be in the
40
+ # `nokogiri` namespace in XPath queries.
41
+ #
42
+ # The first argument to the method will be the current matching NodeSet. Any other arguments
43
+ # are ones that you pass in. Note that this class may appear anywhere in the argument
44
+ # list. For example:
42
45
  #
43
46
  # handler = Class.new {
44
47
  # def regex node_set, regex
45
48
  # node_set.find_all { |node| node['some_attribute'] =~ /#{regex}/ }
46
49
  # end
47
50
  # }.new
48
- # node.search('.//title[regex(., "\w+")]', 'div.employee:regex("[0-9]+")', handler)
51
+ # node.search('.//title[nokogiri:regex(., "\w+")]', 'div.employee:regex("[0-9]+")', handler)
49
52
  #
50
53
  # See Searchable#xpath and Searchable#css for further usage help.
51
54
  def search(*args)
@@ -160,16 +163,18 @@ module Nokogiri
160
163
  # node.xpath('.//address[@domestic=$value]', nil, {:value => 'Yes'})
161
164
  #
162
165
  # 💡 Custom XPath functions may also be defined. To define custom functions create a class and
163
- # implement the function you want to define. The first argument to the method will be the
164
- # current matching NodeSet. Any other arguments are ones that you pass in. Note that this
165
- # class may appear anywhere in the argument list. For example:
166
+ # implement the function you want to define, which will be in the `nokogiri` namespace.
167
+ #
168
+ # The first argument to the method will be the current matching NodeSet. Any other arguments
169
+ # are ones that you pass in. Note that this class may appear anywhere in the argument
170
+ # list. For example:
166
171
  #
167
172
  # handler = Class.new {
168
173
  # def regex(node_set, regex)
169
174
  # node_set.find_all { |node| node['some_attribute'] =~ /#{regex}/ }
170
175
  # end
171
176
  # }.new
172
- # node.xpath('.//title[regex(., "\w+")]', handler)
177
+ # node.xpath('.//title[nokogiri:regex(., "\w+")]', handler)
173
178
  #
174
179
  def xpath(*args)
175
180
  paths, handler, ns, binds = extract_params(args)
@@ -194,7 +199,7 @@ module Nokogiri
194
199
  #
195
200
  # Search this node's immediate children using CSS selector +selector+
196
201
  def >(selector) # rubocop:disable Naming/BinaryOperatorParameterName
197
- ns = (document.root&.namespaces || {})
202
+ ns = document.root&.namespaces || {}
198
203
  xpath(CSS.xpath_for(selector, prefix: "./", ns: ns).first)
199
204
  end
200
205
 
@@ -224,7 +229,7 @@ module Nokogiri
224
229
  def xpath_impl(node, path, handler, ns, binds)
225
230
  ctx = XPathContext.new(node)
226
231
  ctx.register_namespaces(ns)
227
- path = path.gsub(/xmlns:/, " :") unless Nokogiri.uses_libxml?
232
+ path = path.gsub("xmlns:", " :") unless Nokogiri.uses_libxml?
228
233
 
229
234
  binds&.each do |key, value|
230
235
  ctx.register_variable(key.to_s, value)
@@ -243,8 +248,11 @@ module Nokogiri
243
248
  doctype: document.xpath_doctype,
244
249
  )
245
250
  self.class::IMPLIED_XPATH_CONTEXTS.map do |implied_xpath_context|
246
- CSS.xpath_for(rule.to_s, { prefix: implied_xpath_context, ns: ns,
247
- visitor: visitor, })
251
+ CSS.xpath_for(rule.to_s, {
252
+ prefix: implied_xpath_context,
253
+ ns: ns,
254
+ visitor: visitor,
255
+ })
248
256
  end.join(" | ")
249
257
  end
250
258
 
@@ -261,7 +269,7 @@ module Nokogiri
261
269
  end
262
270
  ns, binds = hashes.reverse
263
271
 
264
- ns ||= (document.root&.namespaces || {})
272
+ ns ||= document.root&.namespaces || {}
265
273
 
266
274
  [params, handler, ns, binds]
267
275
  end
@@ -63,7 +63,7 @@ module Nokogiri
63
63
  end
64
64
 
65
65
  def location_to_s
66
- return nil if nil_or_zero?(line) && nil_or_zero?(column)
66
+ return if nil_or_zero?(line) && nil_or_zero?(column)
67
67
 
68
68
  "#{line}:#{column}"
69
69
  end
data/lib/nokogiri/xml.rb CHANGED
@@ -11,7 +11,7 @@ module Nokogiri
11
11
 
12
12
  module XML
13
13
  # Original C14N 1.0 spec canonicalization
14
- XML_C14N_1_0 = 0
14
+ XML_C14N_1_0 = 0
15
15
  # Exclusive C14N 1.0 spec canonicalization
16
16
  XML_C14N_EXCLUSIVE_1_0 = 1
17
17
  # C14N 1.1 spec canonicalization
@@ -10,15 +10,37 @@ module Nokogiri
10
10
  # doc = Nokogiri::XML(File.read('some_file.xml'))
11
11
  # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
12
12
  #
13
- # puts xslt.transform(doc)
13
+ # xslt.transform(doc) # => Nokogiri::XML::Document
14
14
  #
15
- # See Nokogiri::XSLT::Stylesheet#transform for more transformation
16
- # information.
15
+ # Many XSLT transformations include serialization behavior to emit a non-XML document. For these
16
+ # cases, please take care to invoke the #serialize method on the result of the transformation:
17
+ #
18
+ # doc = Nokogiri::XML(File.read('some_file.xml'))
19
+ # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
20
+ # xslt.serialize(xslt.transform(doc)) # => String
21
+ #
22
+ # or use the #apply_to method, which is a shortcut for `serialize(transform(document))`:
23
+ #
24
+ # doc = Nokogiri::XML(File.read('some_file.xml'))
25
+ # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
26
+ # xslt.apply_to(doc) # => String
27
+ #
28
+ # See Nokogiri::XSLT::Stylesheet#transform for more information and examples.
17
29
  class Stylesheet
18
- ###
19
- # Apply an XSLT stylesheet to an XML::Document.
20
- # +params+ is an array of strings used as XSLT parameters.
21
- # returns serialized document
30
+ # :call-seq:
31
+ # apply_to(document, params = []) -> String
32
+ #
33
+ # Apply an XSLT stylesheet to an XML::Document and serialize it properly. This method is
34
+ # equivalent to calling #serialize on the result of #transform.
35
+ #
36
+ # [Parameters]
37
+ # - +document+ is an instance of XML::Document to transform
38
+ # - +params+ is an array of strings used as XSLT parameters, passed into #transform
39
+ #
40
+ # [Returns]
41
+ # A string containing the serialized result of the transformation.
42
+ #
43
+ # See Nokogiri::XSLT::Stylesheet#transform for more information and examples.
22
44
  def apply_to(document, params = [])
23
45
  serialize(transform(document, params))
24
46
  end
data/lib/nokogiri/xslt.rb CHANGED
@@ -20,8 +20,59 @@ module Nokogiri
20
20
  # Stylesheet object.
21
21
  module XSLT
22
22
  class << self
23
- ###
24
- # Parse the stylesheet in +string+, register any +modules+
23
+ # :call-seq:
24
+ # parse(xsl) Nokogiri::XSLT::Stylesheet
25
+ # parse(xsl, modules) → Nokogiri::XSLT::Stylesheet
26
+ #
27
+ # Parse the stylesheet in +xsl+, registering optional +modules+ as custom class handlers.
28
+ #
29
+ # [Parameters]
30
+ # - +xsl+ (String) XSL content to be parsed into a stylesheet
31
+ # - +modules+ (Hash<String ⇒ Class>) A hash of URI-to-handler relations for linking a
32
+ # namespace to a custom function handler.
33
+ #
34
+ # ⚠ The XSLT handler classes are registered *globally*.
35
+ #
36
+ # Also see Nokogiri::XSLT.register
37
+ #
38
+ # *Example*
39
+ #
40
+ # xml = Nokogiri.XML(<<~XML)
41
+ # <nodes>
42
+ # <node>Foo</node>
43
+ # <node>Bar</node>
44
+ # </nodes>
45
+ # XML
46
+ #
47
+ # handler = Class.new do
48
+ # def reverse(node)
49
+ # node.text.reverse
50
+ # end
51
+ # end
52
+ #
53
+ # xsl = <<~XSL
54
+ # <xsl:stylesheet version="1.0"
55
+ # xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
56
+ # xmlns:myfuncs="http://nokogiri.org/xslt/myfuncs"
57
+ # extension-element-prefixes="myfuncs">
58
+ # <xsl:template match="/">
59
+ # <reversed>
60
+ # <xsl:for-each select="nodes/node">
61
+ # <reverse><xsl:copy-of select="myfuncs:reverse(.)"/></reverse>
62
+ # </xsl:for-each>
63
+ # </reversed>
64
+ # </xsl:template>
65
+ # </xsl:stylesheet>
66
+ # XSL
67
+ #
68
+ # xsl = Nokogiri.XSLT(xsl, "http://nokogiri.org/xslt/myfuncs" => handler)
69
+ # xsl.transform(xml).to_xml
70
+ # # => "<?xml version=\"1.0\"?>\n" +
71
+ # # "<reversed>\n" +
72
+ # # " <reverse>ooF</reverse>\n" +
73
+ # # " <reverse>raB</reverse>\n" +
74
+ # # "</reversed>\n"
75
+ #
25
76
  def parse(string, modules = {})
26
77
  modules.each do |url, klass|
27
78
  XSLT.register(url, klass)
@@ -49,8 +100,8 @@ module Nokogiri
49
100
  def quote_params(params)
50
101
  params.flatten.each_slice(2).with_object([]) do |kv, quoted_params|
51
102
  key, value = kv.map(&:to_s)
52
- value = if /'/.match?(value)
53
- "concat('#{value.gsub(/'/, %q{', "'", '})}')"
103
+ value = if value.include?("'")
104
+ "concat('#{value.gsub("'", %q{', "'", '})}')"
54
105
  else
55
106
  "'#{value}'"
56
107
  end
@@ -58,6 +109,25 @@ module Nokogiri
58
109
  quoted_params << value
59
110
  end
60
111
  end
112
+
113
+ # call-seq:
114
+ # register(uri, custom_handler_class)
115
+ #
116
+ # Register a class that implements custom XSLT transformation functions.
117
+ #
118
+ # ⚠ The XSLT handler classes are registered *globally*.
119
+ #
120
+ # [Parameters}
121
+ # - +uri+ (String) The namespace for the custom handlers
122
+ # - +custom_handler_class+ (Class) A class with ruby methods that can be called during
123
+ # transformation
124
+ #
125
+ # See Nokogiri::XSLT.parse for usage.
126
+ #
127
+ def register(uri, custom_handler_class)
128
+ # NOTE: this is implemented in the C extension, see ext/nokogiri/xslt_stylesheet.c
129
+ raise NotImplementedError, "Nokogiri::XSLT.register is not implemented on JRuby"
130
+ end if Nokogiri.jruby?
61
131
  end
62
132
  end
63
133
  end
data/lib/nokogiri.rb CHANGED
@@ -45,11 +45,19 @@ module Nokogiri
45
45
  # Expect an HTML indicator to appear within the first 512
46
46
  # characters of a document. (<?xml ?> + <?xml-stylesheet ?>
47
47
  # shouldn't be that long)
48
- Nokogiri.HTML4(string, url, encoding,
49
- options || XML::ParseOptions::DEFAULT_HTML)
48
+ Nokogiri.HTML4(
49
+ string,
50
+ url,
51
+ encoding,
52
+ options || XML::ParseOptions::DEFAULT_HTML,
53
+ )
50
54
  else
51
- Nokogiri.XML(string, url, encoding,
52
- options || XML::ParseOptions::DEFAULT_XML)
55
+ Nokogiri.XML(
56
+ string,
57
+ url,
58
+ encoding,
59
+ options || XML::ParseOptions::DEFAULT_XML,
60
+ )
53
61
  end.tap do |doc|
54
62
  yield doc if block_given?
55
63
  end
@@ -86,7 +94,7 @@ module Nokogiri
86
94
 
87
95
  # :nodoc:
88
96
  def install_default_aliases
89
- warn("Nokogiri.install_default_aliases is deprecated and will be removed in a future version of Nokogiri. Please call Nokogiri::EncodingHandler.install_default_aliases instead.")
97
+ warn("Nokogiri.install_default_aliases is deprecated. Please call Nokogiri::EncodingHandler.install_default_aliases instead. This will become an error in Nokogiri v1.17.0.", uplevel: 1, category: :deprecated) # deprecated in v1.14.0, remove in v1.17.0
90
98
  Nokogiri::EncodingHandler.install_default_aliases
91
99
  end
92
100
  end
@@ -71,7 +71,7 @@ module XSD
71
71
  # +prefix+ is the namespace prefix for the element
72
72
  # +uri+ is the associated namespace URI
73
73
  # +ns+ is a hash of namespace prefix:urls associated with the element
74
- def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
74
+ def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) # rubocop:disable Metrics/ParameterLists
75
75
  ###
76
76
  # Deal with SAX v1 interface
77
77
  name = [prefix, name].compact.join(":")
@@ -0,0 +1,224 @@
1
+ From 27578ad4e4960beb30bfef38bfc23ec2ab9d7ee1 Mon Sep 17 00:00:00 2001
2
+ From: Wenlong Zhang <zhangwenlong@loongson.cn>
3
+ Date: Tue, 14 Mar 2023 01:38:58 +0000
4
+ Subject: [PATCH] update config.guess and config.sub for libxml2
5
+
6
+ curl -sL -o config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
7
+ curl -sL -o config.sub 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
8
+ ---
9
+ config.guess | 46 +++++++++++++++++++++++++++++++++-------------
10
+ config.sub | 35 ++++++++++++++++++++++++++---------
11
+ 2 files changed, 59 insertions(+), 22 deletions(-)
12
+
13
+ diff --git a/config.guess b/config.guess
14
+ index 7f76b62..69188da 100755
15
+ --- a/config.guess
16
+ +++ b/config.guess
17
+ @@ -1,10 +1,10 @@
18
+ #! /bin/sh
19
+ # Attempt to guess a canonical system name.
20
+ -# Copyright 1992-2022 Free Software Foundation, Inc.
21
+ +# Copyright 1992-2023 Free Software Foundation, Inc.
22
+
23
+ # shellcheck disable=SC2006,SC2268 # see below for rationale
24
+
25
+ -timestamp='2022-01-09'
26
+ +timestamp='2023-01-01'
27
+
28
+ # This file is free software; you can redistribute it and/or modify it
29
+ # under the terms of the GNU General Public License as published by
30
+ @@ -60,7 +60,7 @@ version="\
31
+ GNU config.guess ($timestamp)
32
+
33
+ Originally written by Per Bothner.
34
+ -Copyright 1992-2022 Free Software Foundation, Inc.
35
+ +Copyright 1992-2023 Free Software Foundation, Inc.
36
+
37
+ This is free software; see the source for copying conditions. There is NO
38
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
39
+ @@ -966,6 +966,12 @@ EOF
40
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
41
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
42
+ ;;
43
+ + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
44
+ + GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
45
+ + ;;
46
+ + *:[Mm]anagarm:*:*)
47
+ + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
48
+ + ;;
49
+ *:Minix:*:*)
50
+ GUESS=$UNAME_MACHINE-unknown-minix
51
+ ;;
52
+ @@ -1036,7 +1042,7 @@ EOF
53
+ k1om:Linux:*:*)
54
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
55
+ ;;
56
+ - loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
57
+ + loongarch32:Linux:*:* | loongarch64:Linux:*:*)
58
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
59
+ ;;
60
+ m32r*:Linux:*:*)
61
+ @@ -1151,16 +1157,27 @@ EOF
62
+ ;;
63
+ x86_64:Linux:*:*)
64
+ set_cc_for_build
65
+ + CPU=$UNAME_MACHINE
66
+ LIBCABI=$LIBC
67
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
68
+ - if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
69
+ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
70
+ - grep IS_X32 >/dev/null
71
+ - then
72
+ - LIBCABI=${LIBC}x32
73
+ - fi
74
+ + ABI=64
75
+ + sed 's/^ //' << EOF > "$dummy.c"
76
+ + #ifdef __i386__
77
+ + ABI=x86
78
+ + #else
79
+ + #ifdef __ILP32__
80
+ + ABI=x32
81
+ + #endif
82
+ + #endif
83
+ +EOF
84
+ + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
85
+ + eval "$cc_set_abi"
86
+ + case $ABI in
87
+ + x86) CPU=i686 ;;
88
+ + x32) LIBCABI=${LIBC}x32 ;;
89
+ + esac
90
+ fi
91
+ - GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
92
+ + GUESS=$CPU-pc-linux-$LIBCABI
93
+ ;;
94
+ xtensa*:Linux:*:*)
95
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
96
+ @@ -1367,8 +1384,11 @@ EOF
97
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
98
+ GUESS=i586-pc-haiku
99
+ ;;
100
+ - x86_64:Haiku:*:*)
101
+ - GUESS=x86_64-unknown-haiku
102
+ + ppc:Haiku:*:*) # Haiku running on Apple PowerPC
103
+ + GUESS=powerpc-apple-haiku
104
+ + ;;
105
+ + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
106
+ + GUESS=$UNAME_MACHINE-unknown-haiku
107
+ ;;
108
+ SX-4:SUPER-UX:*:*)
109
+ GUESS=sx4-nec-superux$UNAME_RELEASE
110
+ diff --git a/config.sub b/config.sub
111
+ index dba16e8..de4259e 100755
112
+ --- a/config.sub
113
+ +++ b/config.sub
114
+ @@ -1,10 +1,10 @@
115
+ #! /bin/sh
116
+ # Configuration validation subroutine script.
117
+ -# Copyright 1992-2022 Free Software Foundation, Inc.
118
+ +# Copyright 1992-2023 Free Software Foundation, Inc.
119
+
120
+ # shellcheck disable=SC2006,SC2268 # see below for rationale
121
+
122
+ -timestamp='2022-01-03'
123
+ +timestamp='2023-01-21'
124
+
125
+ # This file is free software; you can redistribute it and/or modify it
126
+ # under the terms of the GNU General Public License as published by
127
+ @@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
128
+ version="\
129
+ GNU config.sub ($timestamp)
130
+
131
+ -Copyright 1992-2022 Free Software Foundation, Inc.
132
+ +Copyright 1992-2023 Free Software Foundation, Inc.
133
+
134
+ This is free software; see the source for copying conditions. There is NO
135
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
136
+ @@ -145,7 +145,7 @@ case $1 in
137
+ nto-qnx* | linux-* | uclinux-uclibc* \
138
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
139
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
140
+ - | storm-chaos* | os2-emx* | rtmk-nova*)
141
+ + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
142
+ basic_machine=$field1
143
+ basic_os=$maybe_os
144
+ ;;
145
+ @@ -1075,7 +1075,7 @@ case $cpu-$vendor in
146
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
147
+ cpu=i586
148
+ ;;
149
+ - pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
150
+ + pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
151
+ cpu=i686
152
+ ;;
153
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
154
+ @@ -1207,7 +1207,7 @@ case $cpu-$vendor in
155
+ | k1om \
156
+ | le32 | le64 \
157
+ | lm32 \
158
+ - | loongarch32 | loongarch64 | loongarchx32 \
159
+ + | loongarch32 | loongarch64 \
160
+ | m32c | m32r | m32rle \
161
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
162
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
163
+ @@ -1341,6 +1341,10 @@ EOF
164
+ kernel=linux
165
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
166
+ ;;
167
+ + managarm*)
168
+ + kernel=managarm
169
+ + os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
170
+ + ;;
171
+ *)
172
+ kernel=
173
+ os=$basic_os
174
+ @@ -1754,7 +1758,7 @@ case $os in
175
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
176
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
177
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
178
+ - | fiwix* )
179
+ + | fiwix* | mlibc* )
180
+ ;;
181
+ # This one is extra strict with allowed versions
182
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
183
+ @@ -1762,6 +1766,9 @@ case $os in
184
+ ;;
185
+ none)
186
+ ;;
187
+ + kernel* )
188
+ + # Restricted further below
189
+ + ;;
190
+ *)
191
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
192
+ exit 1
193
+ @@ -1772,16 +1779,26 @@ esac
194
+ # (given a valid OS), if there is a kernel.
195
+ case $kernel-$os in
196
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
197
+ - | linux-musl* | linux-relibc* | linux-uclibc* )
198
+ + | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
199
+ ;;
200
+ uclinux-uclibc* )
201
+ ;;
202
+ - -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
203
+ + managarm-mlibc* | managarm-kernel* )
204
+ + ;;
205
+ + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
206
+ # These are just libc implementations, not actual OSes, and thus
207
+ # require a kernel.
208
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
209
+ exit 1
210
+ ;;
211
+ + -kernel* )
212
+ + echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
213
+ + exit 1
214
+ + ;;
215
+ + *-kernel* )
216
+ + echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
217
+ + exit 1
218
+ + ;;
219
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
220
+ ;;
221
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
222
+ --
223
+ 2.33.0
224
+
@@ -0,0 +1,30 @@
1
+ From fb618bd27ac7a9fd32973320016c7ff28dd2f60e Mon Sep 17 00:00:00 2001
2
+ From: Mike Dalessio <mike.dalessio@gmail.com>
3
+ Date: Fri, 5 May 2023 10:10:43 -0400
4
+ Subject: [PATCH] rip out libxml2's libc_single_threaded support
5
+
6
+ This is a preventative measure because this feature relies on a glibc
7
+ version we can't realistically require of users today. We're not yet
8
+ precompiling on a system with a modern-enough glibc to make this an
9
+ actual problem, but I'm doing it while all of this context is fresh.
10
+ ---
11
+ threads.c | 3 ++-
12
+ 1 file changed, 2 insertions(+), 1 deletion(-)
13
+
14
+ diff --git a/threads.c b/threads.c
15
+ index 60dbce4c..eb1c12e5 100644
16
+ --- a/threads.c
17
+ +++ b/threads.c
18
+ @@ -27,7 +27,8 @@
19
+
20
+ #if defined(HAVE_POSIX_THREADS) && \
21
+ defined(__GLIBC__) && \
22
+ - __GLIBC__ * 100 + __GLIBC_MINOR__ >= 234
23
+ + __GLIBC__ * 100 + __GLIBC_MINOR__ >= 234 && \
24
+ + !defined(NOKOGIRI_PRECOMPILED_LIBRARIES)
25
+
26
+ /*
27
+ * The modern way available since glibc 2.32.
28
+ --
29
+ 2.40.1
30
+