nokogiri 1.14.2 → 1.16.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (85) 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/jruby/nokogiri_jars.rb +9 -9
  54. data/lib/nokogiri/version/constant.rb +1 -1
  55. data/lib/nokogiri/version/info.rb +6 -5
  56. data/lib/nokogiri/xml/attr.rb +2 -2
  57. data/lib/nokogiri/xml/attribute_decl.rb +4 -2
  58. data/lib/nokogiri/xml/document.rb +4 -5
  59. data/lib/nokogiri/xml/document_fragment.rb +3 -3
  60. data/lib/nokogiri/xml/element_content.rb +10 -2
  61. data/lib/nokogiri/xml/element_decl.rb +4 -2
  62. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  63. data/lib/nokogiri/xml/namespace.rb +1 -2
  64. data/lib/nokogiri/xml/node/save_options.rb +8 -0
  65. data/lib/nokogiri/xml/node.rb +53 -37
  66. data/lib/nokogiri/xml/node_set.rb +3 -3
  67. data/lib/nokogiri/xml/pp/node.rb +23 -12
  68. data/lib/nokogiri/xml/reader.rb +10 -9
  69. data/lib/nokogiri/xml/sax/document.rb +1 -1
  70. data/lib/nokogiri/xml/searchable.rb +21 -13
  71. data/lib/nokogiri/xml/syntax_error.rb +1 -1
  72. data/lib/nokogiri/xml.rb +1 -1
  73. data/lib/nokogiri/xslt/stylesheet.rb +29 -7
  74. data/lib/nokogiri/xslt.rb +74 -4
  75. data/lib/nokogiri.rb +13 -5
  76. data/lib/xsd/xmlparser/nokogiri.rb +1 -1
  77. data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
  78. data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
  79. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  80. data/ports/archives/libxml2-2.12.8.tar.xz +0 -0
  81. data/ports/archives/libxslt-1.1.39.tar.xz +0 -0
  82. metadata +16 -12
  83. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +0 -3037
  84. data/ports/archives/libxml2-2.10.3.tar.xz +0 -0
  85. data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
@@ -3,9 +3,11 @@
3
3
  module Nokogiri
4
4
  module XML
5
5
  ###
6
- # Nokogiri::XML::Reader parses an XML document similar to the way a cursor
7
- # would move. The Reader is given an XML document, and yields nodes
8
- # to an each block.
6
+ # Nokogiri::XML::Reader parses an XML document similar to the way a cursor would move. The
7
+ # Reader is given an XML document, and yields nodes to an each block.
8
+ #
9
+ # The Reader parser might be good for when you need the speed and low memory usage of the SAX
10
+ # parser, but do not want to write a Document handler.
9
11
  #
10
12
  # Here is an example of usage:
11
13
  #
@@ -22,13 +24,12 @@ module Nokogiri
22
24
  #
23
25
  # end
24
26
  #
25
- # Note that Nokogiri::XML::Reader#each can only be called once!! Once
26
- # the cursor moves through the entire document, you must parse the
27
- # document again. So make sure that you capture any information you
28
- # need during the first iteration.
27
+ # Nokogiri::XML::Reader#each can only be called once! Once the cursor moves through the entire
28
+ # document, you must parse the document again. It may be better to capture all information you
29
+ # need during a single iteration.
29
30
  #
30
- # The Reader parser is good for when you need the speed of a SAX parser,
31
- # but do not want to write a Document handler.
31
+ # libxml2 does not support error recovery in the Reader parser. The `RECOVER` ParseOption is
32
+ # ignored. If a syntax error is encountered during parsing, an exception will be raised.
32
33
  class Reader
33
34
  include Enumerable
34
35
 
@@ -100,7 +100,7 @@ module Nokogiri
100
100
  # +prefix+ is the namespace prefix for the element
101
101
  # +uri+ is the associated namespace URI
102
102
  # +ns+ is a hash of namespace prefix:urls associated with the element
103
- def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
103
+ def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) # rubocop:disable Metrics/ParameterLists
104
104
  ###
105
105
  # Deal with SAX v1 interface
106
106
  name = [prefix, name].compact.join(":")
@@ -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
+