nokogiri 1.12.5-x64-mingw32 → 1.13.3-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/README.md +9 -7
  4. data/bin/nokogiri +63 -50
  5. data/dependencies.yml +11 -62
  6. data/ext/nokogiri/extconf.rb +64 -37
  7. data/ext/nokogiri/include/libexslt/exslt.h +6 -0
  8. data/ext/nokogiri/include/libexslt/exsltconfig.h +1 -1
  9. data/ext/nokogiri/include/libexslt/exsltexports.h +3 -3
  10. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +1 -0
  11. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +5 -5
  12. data/ext/nokogiri/include/libxslt/extensions.h +1 -1
  13. data/ext/nokogiri/include/libxslt/preproc.h +1 -1
  14. data/ext/nokogiri/include/libxslt/xsltInternals.h +15 -11
  15. data/ext/nokogiri/include/libxslt/xsltconfig.h +4 -4
  16. data/ext/nokogiri/xml_document.c +35 -35
  17. data/ext/nokogiri/xml_document_fragment.c +0 -2
  18. data/ext/nokogiri/xml_dtd.c +2 -2
  19. data/ext/nokogiri/xml_encoding_handler.c +25 -11
  20. data/ext/nokogiri/xml_node.c +638 -333
  21. data/ext/nokogiri/xml_reader.c +37 -11
  22. data/ext/nokogiri/xml_xpath_context.c +72 -49
  23. data/ext/nokogiri/xslt_stylesheet.c +107 -9
  24. data/lib/nokogiri/2.6/nokogiri.so +0 -0
  25. data/lib/nokogiri/2.7/nokogiri.so +0 -0
  26. data/lib/nokogiri/3.0/nokogiri.so +0 -0
  27. data/lib/nokogiri/class_resolver.rb +67 -0
  28. data/lib/nokogiri/css/node.rb +9 -8
  29. data/lib/nokogiri/css/parser.rb +360 -341
  30. data/lib/nokogiri/css/parser.y +249 -244
  31. data/lib/nokogiri/css/parser_extras.rb +20 -20
  32. data/lib/nokogiri/css/syntax_error.rb +1 -0
  33. data/lib/nokogiri/css/tokenizer.rb +4 -3
  34. data/lib/nokogiri/css/tokenizer.rex +3 -2
  35. data/lib/nokogiri/css/xpath_visitor.rb +179 -82
  36. data/lib/nokogiri/css.rb +38 -6
  37. data/lib/nokogiri/decorators/slop.rb +8 -7
  38. data/lib/nokogiri/extension.rb +1 -1
  39. data/lib/nokogiri/gumbo.rb +1 -0
  40. data/lib/nokogiri/html.rb +16 -10
  41. data/lib/nokogiri/html4/builder.rb +1 -0
  42. data/lib/nokogiri/html4/document.rb +84 -75
  43. data/lib/nokogiri/html4/document_fragment.rb +11 -7
  44. data/lib/nokogiri/html4/element_description.rb +1 -0
  45. data/lib/nokogiri/html4/element_description_defaults.rb +426 -520
  46. data/lib/nokogiri/html4/entity_lookup.rb +2 -1
  47. data/lib/nokogiri/html4/sax/parser.rb +2 -1
  48. data/lib/nokogiri/html4/sax/parser_context.rb +1 -0
  49. data/lib/nokogiri/html4/sax/push_parser.rb +7 -7
  50. data/lib/nokogiri/html4.rb +11 -5
  51. data/lib/nokogiri/html5/document.rb +24 -10
  52. data/lib/nokogiri/html5/document_fragment.rb +5 -2
  53. data/lib/nokogiri/html5/node.rb +6 -3
  54. data/lib/nokogiri/html5.rb +68 -64
  55. data/lib/nokogiri/jruby/dependencies.rb +10 -9
  56. data/lib/nokogiri/syntax_error.rb +1 -0
  57. data/lib/nokogiri/version/constant.rb +2 -1
  58. data/lib/nokogiri/version/info.rb +19 -13
  59. data/lib/nokogiri/version.rb +1 -0
  60. data/lib/nokogiri/xml/attr.rb +5 -3
  61. data/lib/nokogiri/xml/attribute_decl.rb +2 -1
  62. data/lib/nokogiri/xml/builder.rb +32 -32
  63. data/lib/nokogiri/xml/cdata.rb +2 -1
  64. data/lib/nokogiri/xml/character_data.rb +1 -0
  65. data/lib/nokogiri/xml/document.rb +139 -103
  66. data/lib/nokogiri/xml/document_fragment.rb +41 -38
  67. data/lib/nokogiri/xml/dtd.rb +3 -2
  68. data/lib/nokogiri/xml/element_content.rb +1 -0
  69. data/lib/nokogiri/xml/element_decl.rb +2 -1
  70. data/lib/nokogiri/xml/entity_decl.rb +3 -2
  71. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  72. data/lib/nokogiri/xml/namespace.rb +2 -0
  73. data/lib/nokogiri/xml/node/save_options.rb +6 -3
  74. data/lib/nokogiri/xml/node.rb +512 -348
  75. data/lib/nokogiri/xml/node_set.rb +46 -54
  76. data/lib/nokogiri/xml/notation.rb +12 -0
  77. data/lib/nokogiri/xml/parse_options.rb +11 -7
  78. data/lib/nokogiri/xml/pp/character_data.rb +8 -6
  79. data/lib/nokogiri/xml/pp/node.rb +24 -26
  80. data/lib/nokogiri/xml/pp.rb +1 -0
  81. data/lib/nokogiri/xml/processing_instruction.rb +2 -1
  82. data/lib/nokogiri/xml/reader.rb +17 -19
  83. data/lib/nokogiri/xml/relax_ng.rb +1 -0
  84. data/lib/nokogiri/xml/sax/document.rb +20 -19
  85. data/lib/nokogiri/xml/sax/parser.rb +36 -34
  86. data/lib/nokogiri/xml/sax/parser_context.rb +7 -3
  87. data/lib/nokogiri/xml/sax/push_parser.rb +5 -5
  88. data/lib/nokogiri/xml/sax.rb +1 -0
  89. data/lib/nokogiri/xml/schema.rb +7 -6
  90. data/lib/nokogiri/xml/searchable.rb +93 -62
  91. data/lib/nokogiri/xml/syntax_error.rb +4 -4
  92. data/lib/nokogiri/xml/text.rb +1 -0
  93. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  94. data/lib/nokogiri/xml/xpath.rb +12 -0
  95. data/lib/nokogiri/xml/xpath_context.rb +2 -3
  96. data/lib/nokogiri/xml.rb +3 -3
  97. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  98. data/lib/nokogiri/xslt.rb +21 -13
  99. data/lib/nokogiri.rb +19 -16
  100. data/lib/xsd/xmlparser/nokogiri.rb +25 -24
  101. metadata +122 -51
  102. data/lib/nokogiri/2.5/nokogiri.so +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f13f4a2ac4b7b3bfac80539622651cab4ad6e945eba99624f021962bde039289
4
- data.tar.gz: 0bde4d13bff32fdd411862207b0d0f1864ef10a600a839e8ecb5d51201a0e621
3
+ metadata.gz: a3f0d5367a2ed4b24419928f254ef954645ccd52df79aefc5cc57e17360f1298
4
+ data.tar.gz: edecb2e2e3fad8a2c8b89d592e9cdfdf10bebec81d073c96f8b6ed006df5c0a2
5
5
  SHA512:
6
- metadata.gz: cefdd5f1fffcef398cd7b56c5491fdda7f6cbb947ea098ed5d0f4d24a9d0549c921bcef6aa9a3803bdfe21c15c796a074e8e940e350f7ffdf53a22a31c8081ec
7
- data.tar.gz: cb1d6692529a25ed019ebf139f45fb60045c18183c6a88e91cc284f2d410c8d82d6e4a96de20fb892f55fa7e7c193ac5e3cf90895a319a6cf845ac335ebaf40c
6
+ metadata.gz: 5b672dcfd3735e9506c5f069cb50345deda47bda59669b2205429a4d1cee0ae1cf37124db10dfd3687b6069b0bb4d34770aa12897a488878927c373e7a071208
7
+ data.tar.gz: ddcdea876d9a0504c95a214e6a235bc509cff7a938a3942565ab631814cf968d78c77e33f56a6d194314762f781caf482df65ebb3a1f9d57d37998d86460d26a
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Nokogiri
4
4
 
5
- Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for [reading](https://nokogiri.org/tutorials/parsing_an_html_xml_document.html), writing, [modifying](https://nokogiri.org/tutorials/modifying_an_html_xml_document.html), and [querying](https://nokogiri.org/tutorials/searching_a_xml_html_document.html) documents. It is fast and standards-compliant by relying on native parsers like libxml2 (C) and xerces (Java).
5
+ Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for [reading](https://nokogiri.org/tutorials/parsing_an_html_xml_document.html), writing, [modifying](https://nokogiri.org/tutorials/modifying_an_html_xml_document.html), and [querying](https://nokogiri.org/tutorials/searching_a_xml_html_document.html) documents. It is fast and standards-compliant by relying on native parsers like libxml2 (CRuby) and xerces (JRuby).
6
6
 
7
7
  ## Guiding Principles
8
8
 
@@ -30,7 +30,9 @@ Some guiding principles Nokogiri tries to follow:
30
30
  [![Appveyor CI](https://ci.appveyor.com/api/projects/status/xj2pqwvlxwuwgr06/branch/main?svg=true)](https://ci.appveyor.com/project/flavorjones/nokogiri/branch/main)
31
31
 
32
32
  [![Gem Version](https://badge.fury.io/rb/nokogiri.svg)](https://rubygems.org/gems/nokogiri)
33
- [![SemVer compatibility](https://api.dependabot.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score/?dependency-name=nokogiri&package-manager=bundler)
33
+ [![SemVer compatibility](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
34
+
35
+ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5344/badge)](https://bestpractices.coreinfrastructure.org/projects/5344)
34
36
  [![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/nokogiri)](https://tidelift.com/subscription/pkg/rubygems-nokogiri?utm_source=rubygems-nokogiri&utm_medium=referral&utm_campaign=readme)
35
37
 
36
38
 
@@ -78,7 +80,7 @@ Full information and description of our security policy is in [`SECURITY.md`](SE
78
80
 
79
81
  ### Semantic Versioning Policy
80
82
 
81
- Nokogiri follows [Semantic Versioning](https://semver.org/) (since 2017 or so). [![Dependabot's SemVer compatibility score for Nokogiri](https://api.dependabot.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score/?dependency-name=nokogiri&package-manager=bundler)
83
+ Nokogiri follows [Semantic Versioning](https://semver.org/) (since 2017 or so). [![Dependabot's SemVer compatibility score for Nokogiri](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
82
84
 
83
85
  We bump `Major.Minor.Patch` versions following this guidance:
84
86
 
@@ -105,8 +107,8 @@ We bump `Major.Minor.Patch` versions following this guidance:
105
107
 
106
108
  Requirements:
107
109
 
108
- - Ruby >= 2.5
109
- - JRuby >= 9.2.0.0
110
+ - Ruby >= 2.6
111
+ - JRuby >= 9.3.0.0
110
112
 
111
113
 
112
114
  ### Native Gems: Faster, more reliable installation
@@ -115,12 +117,12 @@ Requirements:
115
117
 
116
118
  ### Supported Platforms
117
119
 
118
- As of v1.11.0, Nokogiri ships pre-compiled, "native" gems for the following platforms:
120
+ Nokogiri ships pre-compiled, "native" gems for the following platforms:
119
121
 
120
122
  - Linux: `x86-linux` and `x86_64-linux` (req: `glibc >= 2.17`), including musl platforms like Alpine
121
123
  - Darwin/MacOS: `x86_64-darwin` and `arm64-darwin`
122
124
  - Windows: `x86-mingw32` and `x64-mingw32`
123
- - Java: any platform running JRuby 9.2 or higher
125
+ - Java: any platform running JRuby 9.3 or higher
124
126
 
125
127
  To determine whether your system supports one of these gems, look at the output of `bundle platform` or `ruby -e 'puts Gem::Platform.local.to_s'`.
126
128
 
data/bin/nokogiri CHANGED
@@ -1,61 +1,77 @@
1
1
  #!/usr/bin/env ruby
2
- require 'optparse'
3
- require 'open-uri'
4
- require 'uri'
5
- require 'rubygems'
6
- require 'nokogiri'
7
- autoload :IRB, 'irb'
2
+ # frozen_string_literal: true
3
+
4
+ require "optparse"
5
+ require "open-uri"
6
+ require "uri"
7
+ require "rubygems"
8
+ require "nokogiri"
9
+ autoload :IRB, "irb"
8
10
 
9
11
  parse_class = Nokogiri
10
12
  encoding = nil
11
13
 
12
14
  # This module provides some tunables with the nokogiri CLI for use in
13
15
  # your ~/.nokogirirc.
14
- module Nokogiri::CLI
15
- class << self
16
- # Specify the console engine, defaulted to IRB.
17
- #
18
- # call-seq:
19
- # require 'pry'
20
- # Nokogiri::CLI.console = Pry
21
- attr_writer :console
22
-
23
- def console
24
- case @console
25
- when Symbol
26
- Kernel.const_get(@console)
27
- else
28
- @console
16
+ module Nokogiri
17
+ module CLI
18
+ class << self
19
+ # Specify the console engine, defaulted to IRB.
20
+ #
21
+ # call-seq:
22
+ # require 'pry'
23
+ # Nokogiri::CLI.console = Pry
24
+ attr_writer :console
25
+
26
+ def console
27
+ case @console
28
+ when Symbol
29
+ Kernel.const_get(@console)
30
+ else
31
+ @console
32
+ end
29
33
  end
34
+
35
+ attr_accessor :rcfile
30
36
  end
31
37
 
32
- attr_accessor :rcfile
38
+ self.rcfile = File.expand_path("~/.nokogirirc")
39
+ self.console = :IRB
33
40
  end
41
+ end
34
42
 
35
- self.rcfile = File.expand_path('~/.nokogirirc')
36
- self.console = :IRB
43
+ def safe_read(uri_or_path)
44
+ uri = URI.parse(uri_or_path)
45
+ case uri
46
+ when URI::HTTP
47
+ uri.read
48
+ when URI::File
49
+ File.read(uri.path)
50
+ else
51
+ File.read(uri_or_path)
52
+ end
37
53
  end
38
54
 
39
55
  opts = OptionParser.new do |opts|
40
56
  opts.banner = "Nokogiri: an HTML, XML, SAX, and Reader parser"
41
- opts.define_head "Usage: nokogiri <uri|path> [options]"
42
- opts.separator ""
43
- opts.separator "Examples:"
44
- opts.separator " nokogiri https://www.ruby-lang.org/"
45
- opts.separator " nokogiri ./public/index.html"
46
- opts.separator " curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'"
47
- opts.separator ""
48
- opts.separator "Options:"
57
+ opts.define_head("Usage: nokogiri <uri|path> [options]")
58
+ opts.separator("")
59
+ opts.separator("Examples:")
60
+ opts.separator(" nokogiri https://www.ruby-lang.org/")
61
+ opts.separator(" nokogiri ./public/index.html")
62
+ opts.separator(" curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'")
63
+ opts.separator("")
64
+ opts.separator("Options:")
49
65
 
50
66
  opts.on("--type type", "Parse as type: xml or html (default: auto)", [:xml, :html]) do |v|
51
- parse_class = {:xml => Nokogiri::XML, :html => Nokogiri::HTML}[v]
67
+ parse_class = { xml: Nokogiri::XML, html: Nokogiri::HTML }[v]
52
68
  end
53
69
 
54
70
  opts.on("-C file", "Specifies initialization file to load (default #{Nokogiri::CLI.rcfile})") do |v|
55
71
  Nokogiri::CLI.rcfile = v
56
72
  end
57
73
 
58
- opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding || 'none'})") do |v|
74
+ opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding || "none"})") do |v|
59
75
  encoding = v
60
76
  end
61
77
 
@@ -64,7 +80,7 @@ opts = OptionParser.new do |opts|
64
80
  end
65
81
 
66
82
  opts.on("--rng <uri|path>", "Validate using this rng file.") do |v|
67
- @rng = open(v) {|f| Nokogiri::XML::RelaxNG(f)}
83
+ @rng = Nokogiri::XML::RelaxNG(safe_read(v))
68
84
  end
69
85
 
70
86
  opts.on_tail("-?", "--help", "Show this message") do
@@ -90,15 +106,10 @@ if File.file?(Nokogiri::CLI.rcfile)
90
106
  load Nokogiri::CLI.rcfile
91
107
  end
92
108
 
93
- if url || $stdin.tty?
94
- case uri = (URI(url) rescue url)
95
- when URI::HTTP
96
- @doc = parse_class.parse(uri.read, url, encoding)
97
- else
98
- @doc = parse_class.parse(open(url).read, nil, encoding)
99
- end
109
+ @doc = if url || $stdin.tty?
110
+ parse_class.parse(safe_read(url), url, encoding)
100
111
  else
101
- @doc = parse_class.parse($stdin, nil, encoding)
112
+ parse_class.parse($stdin, nil, encoding)
102
113
  end
103
114
 
104
115
  $_ = @doc
@@ -107,12 +118,14 @@ if @rng
107
118
  @rng.validate(@doc).each do |error|
108
119
  puts error.message
109
120
  end
110
- else
111
- if @script
112
- eval @script, binding, '<main>'
113
- else
114
- puts "Your document is stored in @doc..."
115
- Nokogiri::CLI.console.start
121
+ elsif @script
122
+ begin
123
+ eval(@script, binding, "<main>") # rubocop:disable Security/Eval
124
+ rescue Exception => e # rubocop:disable Lint/RescueException
125
+ warn("ERROR: Exception raised while evaluating '#{@script}'")
126
+ raise e
116
127
  end
128
+ else
129
+ puts "Your document is stored in @doc..."
130
+ Nokogiri::CLI.console.start
117
131
  end
118
-
data/dependencies.yml CHANGED
@@ -1,62 +1,12 @@
1
1
  libxml2:
2
- version: "2.9.12"
3
- sha256: "c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92"
4
- # manually verified checksum:
5
- #
6
- # $ gpg --verify libxml2-2.9.12.tar.gz.asc ports/archives/libxml2-2.9.12.tar.gz
7
- # gpg: Signature made Thu 13 May 2021 02:59:16 PM EDT
8
- # gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
9
- # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
10
- # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
11
- # gpg: WARNING: This key is not certified with a trusted signature!
12
- # gpg: There is no indication that the signature belongs to the owner.
13
- # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
14
- # Subkey fingerprint: DB46 681B B91A DCEA 170F A2D4 1558 8B26 596B EA5D
15
- #
16
- # using this pgp signature:
17
- #
18
- # -----BEGIN PGP SIGNATURE-----
19
- #
20
- # iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAmCddwQACgkQFViLJllr
21
- # 6l11LQgAioRTdfmcC+uK/7+6HPtF/3c5zkX6j8VGYuvFBwZ0jayqMRBAl++fcpjE
22
- # JUU/JKebSZ/KCYjzyeOWK/i3Gq77iqm3UbZFB85rqu4a5P3gmj/4STWVyAx0KU3z
23
- # G3jKqDhJOt7c0acXb5lh2DngfDa1dn/VGcQcIXsqplNxNr4ET7MnSJjZ3nlxYfW2
24
- # E5vWBdPCMUeXDBl6MjYvw9XnGGBLUAaEJWoFToG6jKmVf4GAd9nza20jj5dtbcJq
25
- # QEOaSDKDr+f9h2NS8haOhJ9vOpy52PdeGzaFlbRkXarGXuAr8kITgATVs8FAqcgv
26
- # MoVhmrO5r2hJf0dCM9fZoYqzpMfmNA==
27
- # =KfJ9
28
- # -----END PGP SIGNATURE-----
29
- #
2
+ version: "2.9.13"
3
+ sha256: "276130602d12fe484ecc03447ee5e759d0465558fbc9d6bd144e3745306ebf0e"
4
+ # sha-256 hash provided in https://download.gnome.org/sources/libxml2/2.9/libxml2-2.9.13.sha256sum
30
5
 
31
6
  libxslt:
32
- version: "1.1.34"
33
- sha256: "98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f"
34
- # manually verified checksum:
35
- #
36
- # $ gpg --verify ~/Downloads/libxslt-1.1.34.tar.gz.asc ports/archives/libxslt-1.1.34.tar.gz
37
- # gpg: Signature made Wed 30 Oct 2019 04:02:48 PM EDT
38
- # gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
39
- # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
40
- # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
41
- # gpg: WARNING: This key is not certified with a trusted signature!
42
- # gpg: There is no indication that the signature belongs to the owner.
43
- # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
44
- # Subkey fingerprint: DB46 681B B91A DCEA 170F A2D4 1558 8B26 596B EA5D
45
- #
46
- # using this pgp signature:
47
- #
48
- # -----BEGIN PGP SIGNATURE-----
49
- #
50
- # iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAl257GgACgkQFViLJllr
51
- # 6l2vVggAjJEHmASiS56SxhPOsGqbfBihM66gQFoIymQfMu2430N1GSTkLsfbkJO8
52
- # 8yBX11NjzK/m9uxwshMW3rVCU7EpL3PUimN3reXdPiQj9hAOAWF1V3BZNevbQC2E
53
- # FCIraioukaidf8sjUG4/sGpK/gOcP/3hYoN0HUoBigCNJjDqhijxM3M3GJJtCASp
54
- # jL4CQbs2OmxW8ixOZbuWEESvFFHUgYRsdZjRVN+GRfSOvJjxypurmYwQ3RjO7JxL
55
- # 2FY8qKQ+xpeID8NV8F5OUEvWBjk1QS133VTqBZNlONdnEtV/og6jNu5k0O/Kvhup
56
- # caR+8TMErOcLr9OgDklO6DoYyAsf9Q==
57
- # =g4i4
58
- # -----END PGP SIGNATURE-----
59
- #
7
+ version: "1.1.35"
8
+ sha256: "8247f33e9a872c6ac859aa45018bc4c4d00b97e2feac9eebc10c93ce1f34dd79"
9
+ # sha-256 hash provided in https://download.gnome.org/sources/libxslt/1.1/libxslt-1.1.35.sha256sum
60
10
 
61
11
  zlib:
62
12
  version: "1.2.11"
@@ -64,11 +14,10 @@ zlib:
64
14
  # SHA-256 hash provided on http://zlib.net/
65
15
 
66
16
  libiconv:
67
- version: "1.15"
68
- sha256: "ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178"
69
- # gpg: Signature made Fri Feb 3 00:38:12 2017 CET
17
+ version: "1.16"
18
+ sha256: "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04"
19
+ # gpg: Signature made Fri 26 Apr 2019 03:36:38 PM EDT
70
20
  # gpg: using RSA key 4F494A942E4616C2
71
- # gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [unknown]
72
- # gpg: WARNING: This key is not certified with a trusted signature!
73
- # gpg: There is no indication that the signature belongs to the owner.
21
+ # gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [expired]
22
+ # gpg: Note: This key has expired!
74
23
  # Primary key fingerprint: 68D9 4D8A AEEA D48A E7DC 5B90 4F49 4A94 2E46 16C2
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
- ENV["RC_ARCHS"] = "" if RUBY_PLATFORM =~ /darwin/
2
+
3
+ # rubocop:disable Style/GlobalVars
4
+
5
+ ENV["RC_ARCHS"] = "" if RUBY_PLATFORM.include?("darwin")
3
6
 
4
7
  require "mkmf"
5
8
  require "rbconfig"
@@ -12,16 +15,14 @@ PACKAGE_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."
12
15
  REQUIRED_LIBXML_VERSION = "2.6.21"
13
16
  RECOMMENDED_LIBXML_VERSION = "2.9.3"
14
17
 
15
- # The gem version constraint in the Rakefile is not respected at install time.
16
- # Keep this version in sync with the one in the Rakefile !
17
- REQUIRED_MINI_PORTILE_VERSION = "~> 2.6.1"
18
+ REQUIRED_MINI_PORTILE_VERSION = "~> 2.8.0" # keep this version in sync with the one in the gemspec
18
19
  REQUIRED_PKG_CONFIG_VERSION = "~> 1.1"
19
20
 
20
21
  # Keep track of what versions of what libraries we build against
21
22
  OTHER_LIBRARY_VERSIONS = {}
22
23
 
23
24
  NOKOGIRI_HELP_MESSAGE = <<~HELP
24
- USAGE: ruby #{$0} [options]
25
+ USAGE: ruby #{$PROGRAM_NAME} [options]
25
26
 
26
27
  Flags that are always valid:
27
28
 
@@ -175,23 +176,23 @@ def config_system_libraries?
175
176
  end
176
177
 
177
178
  def windows?
178
- RbConfig::CONFIG["target_os"] =~ /mingw32|mswin/
179
+ RbConfig::CONFIG["target_os"].match?(/mingw|mswin/)
179
180
  end
180
181
 
181
182
  def solaris?
182
- RbConfig::CONFIG["target_os"] =~ /solaris/
183
+ RbConfig::CONFIG["target_os"].include?("solaris")
183
184
  end
184
185
 
185
186
  def darwin?
186
- RbConfig::CONFIG["target_os"] =~ /darwin/
187
+ RbConfig::CONFIG["target_os"].include?("darwin")
187
188
  end
188
189
 
189
190
  def openbsd?
190
- RbConfig::CONFIG["target_os"] =~ /openbsd/
191
+ RbConfig::CONFIG["target_os"].include?("openbsd")
191
192
  end
192
193
 
193
194
  def aix?
194
- RbConfig::CONFIG["target_os"] =~ /aix/
195
+ RbConfig::CONFIG["target_os"].include?("aix")
195
196
  end
196
197
 
197
198
  def nix?
@@ -210,6 +211,18 @@ def local_have_library(lib, func = nil, headers = nil)
210
211
  have_library(lib, func, headers) || have_library("lib#{lib}", func, headers)
211
212
  end
212
213
 
214
+ def gnome_source
215
+ # As of 2022-02-20, some mirrors have expired SSL certificates. I'm able to retrieve from my home,
216
+ # but whatever host is resolved on the github actions workers see an expired cert.
217
+ #
218
+ # See https://github.com/sparklemotion/nokogiri/runs/5266206403?check_suite_focus=true
219
+ if ENV["NOKOGIRI_USE_CANONICAL_GNOME_SOURCE"]
220
+ "https://download.gnome.org"
221
+ else
222
+ "https://mirror.csclub.uwaterloo.ca/gnome" # old reliable
223
+ end
224
+ end
225
+
213
226
  LOCAL_PACKAGE_RESPONSE = Object.new
214
227
  def LOCAL_PACKAGE_RESPONSE.%(package)
215
228
  package ? "yes: #{package}" : "no"
@@ -284,17 +297,16 @@ ensure
284
297
  end
285
298
 
286
299
  def abort_could_not_find_library(lib)
287
- abort("-----\n#{caller[0]}\n#{lib} is missing. Please locate mkmf.log to investigate how it is failing.\n-----")
300
+ callers = caller(1..2).join("\n")
301
+ abort("-----\n#{callers}\n#{lib} is missing. Please locate mkmf.log to investigate how it is failing.\n-----")
288
302
  end
289
303
 
290
- def chdir_for_build
304
+ def chdir_for_build(&block)
291
305
  # When using rake-compiler-dock on Windows, the underlying Virtualbox shared
292
306
  # folders don't support symlinks, but libiconv expects it for a build on
293
307
  # Linux. We work around this limitation by using the temp dir for cooking.
294
- build_dir = ENV["RCD_HOST_RUBY_PLATFORM"].to_s =~ /mingw|mswin|cygwin/ ? "/tmp" : "."
295
- Dir.chdir(build_dir) do
296
- yield
297
- end
308
+ build_dir = /mingw|mswin|cygwin/.match?(ENV["RCD_HOST_RUBY_PLATFORM"].to_s) ? "/tmp" : "."
309
+ Dir.chdir(build_dir, &block)
298
310
  end
299
311
 
300
312
  def sh_export_path(path)
@@ -402,9 +414,9 @@ def iconv_configure_flags
402
414
  abort_could_not_find_library("libiconv")
403
415
  end
404
416
 
405
- def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
417
+ def process_recipe(name, version, static_p, cross_p, cacheable_p = true)
406
418
  require "rubygems"
407
- gem("mini_portile2", REQUIRED_MINI_PORTILE_VERSION)
419
+ gem("mini_portile2", REQUIRED_MINI_PORTILE_VERSION) # gemspec is not respected at install time
408
420
  require "mini_portile2"
409
421
  message("Using mini_portile version #{MiniPortile::VERSION}\n")
410
422
 
@@ -413,9 +425,13 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
413
425
  end
414
426
 
415
427
  MiniPortile.new(name, version).tap do |recipe|
428
+ def recipe.port_path
429
+ "#{@target}/#{RUBY_PLATFORM}/#{@name}/#{@version}"
430
+ end
431
+
416
432
  recipe.target = File.join(PACKAGE_ROOT_DIR, "ports") if cacheable_p
417
- # Prefer host_alias over host in order to use i586-mingw32msvc as
418
- # correct compiler prefix for cross build, but use host if not set.
433
+ # Prefer host_alias over host in order to use the correct compiler prefix for cross build, but
434
+ # use host if not set.
419
435
  recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
420
436
  recipe.configure_options << "--libdir=#{File.join(recipe.path, "lib")}"
421
437
 
@@ -462,7 +478,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
462
478
  end
463
479
 
464
480
  if RbConfig::CONFIG["target_cpu"] == "universal"
465
- %w[CFLAGS LDFLAGS].each do |key|
481
+ ["CFLAGS", "LDFLAGS"].each do |key|
466
482
  unless env[key].include?("-arch")
467
483
  env[key] = concat_flags(env[key], RbConfig::CONFIG["ARCH_FLAG"])
468
484
  end
@@ -473,7 +489,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
473
489
  "#{key}=#{value.strip}"
474
490
  end
475
491
 
476
- checkpoint = "#{recipe.target}/#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
492
+ checkpoint = "#{recipe.target}/#{recipe.name}-#{recipe.version}-#{RUBY_PLATFORM}.installed"
477
493
  if File.exist?(checkpoint) && !recipe.source_directory
478
494
  message("Building Nokogiri with a packaged version of #{name}-#{version}.\n")
479
495
  else
@@ -487,7 +503,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
487
503
  message("The following patches are being applied:\n")
488
504
 
489
505
  recipe.patch_files.each do |patch|
490
- message(" - %s\n" % File.basename(patch))
506
+ message(format(" - %s\n", File.basename(patch)))
491
507
  end
492
508
  end
493
509
 
@@ -508,6 +524,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
508
524
 
509
525
  EOM
510
526
 
527
+ pp(recipe.files)
511
528
  chdir_for_build { recipe.cook }
512
529
  FileUtils.touch(checkpoint)
513
530
  end
@@ -656,7 +673,7 @@ else
656
673
  if cross_build_p || windows?
657
674
  zlib_recipe = process_recipe("zlib", dependencies["zlib"]["version"], static_p, cross_build_p) do |recipe|
658
675
  recipe.files = [{
659
- url: "http://zlib.net/fossils/#{recipe.name}-#{recipe.version}.tar.gz",
676
+ url: "https://zlib.net/fossils/#{recipe.name}-#{recipe.version}.tar.gz",
660
677
  sha256: dependencies["zlib"]["sha256"],
661
678
  }]
662
679
  if windows?
@@ -700,7 +717,7 @@ else
700
717
  end
701
718
 
702
719
  def compile
703
- if host =~ /darwin/
720
+ if /darwin/.match?(host)
704
721
  execute("compile", "make AR=#{host}-libtool")
705
722
  else
706
723
  super
@@ -714,10 +731,13 @@ else
714
731
  libiconv_recipe = process_recipe("libiconv", dependencies["libiconv"]["version"], static_p,
715
732
  cross_build_p) do |recipe|
716
733
  recipe.files = [{
717
- url: "http://ftp.gnu.org/pub/gnu/libiconv/#{recipe.name}-#{recipe.version}.tar.gz",
734
+ url: "https://ftp.gnu.org/pub/gnu/libiconv/#{recipe.name}-#{recipe.version}.tar.gz",
718
735
  sha256: dependencies["libiconv"]["sha256"],
719
736
  }]
720
737
 
738
+ # The libiconv configure script doesn't accept "arm64" host string but "aarch64"
739
+ recipe.host = recipe.host.gsub("arm64-apple-darwin", "aarch64-apple-darwin")
740
+
721
741
  cflags = concat_flags(ENV["CFLAGS"], "-O2", "-U_FORTIFY_SOURCE", "-g")
722
742
 
723
743
  recipe.configure_options += [
@@ -741,12 +761,21 @@ else
741
761
  Tools" to open the developer site, download the installer for your OS
742
762
  version and run it.
743
763
  -----
744
- EOM
764
+ EOM
745
765
  end
746
766
 
747
- unless windows?
748
- preserving_globals { local_have_library("z", "gzdopen", "zlib.h") } ||
749
- abort("zlib is missing; necessary for building libxml2")
767
+ if zlib_recipe
768
+ append_cppflags("-I#{zlib_recipe.path}/include")
769
+ $LIBPATH = ["#{zlib_recipe.path}/lib"] | $LIBPATH
770
+ ensure_package_configuration(opt: "zlib", pc: "zlib", lib: "z",
771
+ headers: "zlib.h", func: "gzdopen")
772
+ end
773
+
774
+ if libiconv_recipe
775
+ append_cppflags("-I#{libiconv_recipe.path}/include")
776
+ $LIBPATH = ["#{libiconv_recipe.path}/lib"] | $LIBPATH
777
+ ensure_package_configuration(opt: "iconv", pc: "iconv", lib: "iconv",
778
+ headers: "iconv.h", func: "iconv_open")
750
779
  end
751
780
 
752
781
  libxml2_recipe = process_recipe("libxml2", dependencies["libxml2"]["version"], static_p, cross_build_p) do |recipe|
@@ -754,8 +783,9 @@ else
754
783
  if source_dir
755
784
  recipe.source_directory = source_dir
756
785
  else
786
+ minor_version = Gem::Version.new(recipe.version).segments.take(2).join(".")
757
787
  recipe.files = [{
758
- url: "http://xmlsoft.org/sources/#{recipe.name}-#{recipe.version}.tar.gz",
788
+ url: "#{gnome_source}/sources/libxml2/#{minor_version}/#{recipe.name}-#{recipe.version}.tar.xz",
759
789
  sha256: dependencies["libxml2"]["sha256"],
760
790
  }]
761
791
  recipe.patch_files = Dir[File.join(PACKAGE_ROOT_DIR, "patches", "libxml2", "*.patch")].sort
@@ -765,7 +795,6 @@ else
765
795
 
766
796
  if zlib_recipe
767
797
  recipe.configure_options << "--with-zlib=#{zlib_recipe.path}"
768
- cflags = concat_flags(cflags, "-I#{zlib_recipe.path}/include")
769
798
  end
770
799
 
771
800
  if libiconv_recipe
@@ -803,8 +832,9 @@ else
803
832
  if source_dir
804
833
  recipe.source_directory = source_dir
805
834
  else
835
+ minor_version = Gem::Version.new(recipe.version).segments.take(2).join(".")
806
836
  recipe.files = [{
807
- url: "http://xmlsoft.org/sources/#{recipe.name}-#{recipe.version}.tar.gz",
837
+ url: "#{gnome_source}/sources/libxslt/#{minor_version}/#{recipe.name}-#{recipe.version}.tar.xz",
808
838
  sha256: dependencies["libxslt"]["sha256"],
809
839
  }]
810
840
  recipe.patch_files = Dir[File.join(PACKAGE_ROOT_DIR, "patches", "libxslt", "*.patch")].sort
@@ -834,9 +864,6 @@ else
834
864
  append_cppflags("-DNOKOGIRI_PACKAGED_LIBRARIES")
835
865
  append_cppflags("-DNOKOGIRI_PRECOMPILED_LIBRARIES") if cross_build_p
836
866
 
837
- $LIBPATH = ["#{zlib_recipe.path}/lib"] | $LIBPATH if zlib_recipe
838
- $LIBPATH = ["#{libiconv_recipe.path}/lib"] | $LIBPATH if libiconv_recipe
839
-
840
867
  $libs = $libs.shellsplit.tap do |libs|
841
868
  [libxml2_recipe, libxslt_recipe].each do |recipe|
842
869
  libname = recipe.name[/\Alib(.+)\z/, 1]
@@ -929,7 +956,7 @@ libgumbo_recipe = process_recipe("libgumbo", "1.0.0-nokogiri", static_p, cross_b
929
956
 
930
957
  env = { "CC" => gcc_cmd, "CFLAGS" => cflags }
931
958
  if config_cross_build?
932
- if host =~ /darwin/
959
+ if /darwin/.match?(host)
933
960
  env["AR"] = "#{host}-libtool"
934
961
  env["ARFLAGS"] = "-o"
935
962
  else
@@ -1,3 +1,9 @@
1
+ /*
2
+ * Summary: main header file
3
+ *
4
+ * Copy: See Copyright for the status of this software.
5
+ */
6
+
1
7
 
2
8
  #ifndef __EXSLT_H__
3
9
  #define __EXSLT_H__
@@ -18,7 +18,7 @@ extern "C" {
18
18
  *
19
19
  * the version string like "1.2.3"
20
20
  */
21
- #define LIBEXSLT_DOTTED_VERSION "1.1.34"
21
+ #define LIBEXSLT_DOTTED_VERSION "0.8.20"
22
22
 
23
23
  /**
24
24
  * LIBEXSLT_VERSION:
@@ -1,9 +1,9 @@
1
1
  /*
2
- * exsltexports.h : macros for marking symbols as exportable/importable.
2
+ * Summary: macros for marking symbols as exportable/importable.
3
3
  *
4
- * See Copyright for the status of this software.
4
+ * Copy: See Copyright for the status of this software.
5
5
  *
6
- * igor@zlatkovic.com
6
+ * Author: Igor Zlatkovic <igor@zlatkovic.com>
7
7
  */
8
8
 
9
9
  #ifndef __EXSLT_EXPORTS_H__
@@ -209,6 +209,7 @@ typedef enum {
209
209
  XML_ERR_VERSION_MISMATCH, /* 109 */
210
210
  XML_ERR_NAME_TOO_LONG, /* 110 */
211
211
  XML_ERR_USER_STOP, /* 111 */
212
+ XML_ERR_COMMENT_ABRUPTLY_ENDED, /* 112 */
212
213
  XML_NS_ERR_XML_NAMESPACE = 200,
213
214
  XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
214
215
  XML_NS_ERR_QNAME, /* 202 */