commonmarker 1.0.0.pre7 → 1.0.0.pre11

Sign up to get free protection for your applications and to get access to all the features.
data/Cargo.toml ADDED
@@ -0,0 +1,6 @@
1
+ # This Cargo.toml is here to let externals tools (IDEs, etc.) know that this is
2
+ # a Rust project. Your extensions depedencies should be added to the Cargo.toml
3
+ # in the ext/ directory.
4
+
5
+ [workspace]
6
+ members = ["ext/commonmarker"]
data/README.md CHANGED
@@ -131,9 +131,16 @@ Commonmarker.to_html(code, plugins: { syntax_highlighter: nil })
131
131
  Commonmarker.to_html(code, plugins: { syntax_highlighter: { theme: nil } })
132
132
  ```
133
133
 
134
+ You can also provide a `path` to a directory containing `.tmtheme` files to load:
135
+
136
+ ```ruby
137
+
138
+ Commonmarker.to_html(code, plugins: { syntax_highlighter: { theme: "Monokai", path: "./themes" } })
139
+ ```
140
+
134
141
  ##### Available themes
135
142
 
136
- Here's [a list of available themes](https://docs.rs/syntect/5.0.0/syntect/highlighting/struct.ThemeSet.html#implementations):
143
+ Here's [a list of themes available by default](https://docs.rs/syntect/5.0.0/syntect/highlighting/struct.ThemeSet.html#implementations):
137
144
 
138
145
  - `"base16-ocean.dark"`
139
146
  - `"base16-eighties.dark"`
@@ -4,8 +4,9 @@ version = "1.0.0"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]
7
- magnus = "0.4"
8
- comrak = { version = "0.16", features = ["shortcodes"] }
7
+ magnus = "0.6"
8
+ comrak = { version = "0.19", features = ["shortcodes"] }
9
+ syntect = { version = "5.1", features = ["plist-load"] }
9
10
 
10
11
  [lib]
11
12
  name = "commonmarker"
@@ -1,6 +1,4 @@
1
1
  require "mkmf"
2
2
  require "rb_sys/mkmf"
3
3
 
4
- require_relative "_util"
5
-
6
4
  create_rust_makefile("commonmarker/commonmarker")
@@ -1,10 +1,17 @@
1
1
  extern crate core;
2
2
 
3
+ use std::path::PathBuf;
4
+
5
+ use ::syntect::highlighting::ThemeSet;
3
6
  use comrak::{
4
- adapters::SyntaxHighlighterAdapter, markdown_to_html, markdown_to_html_with_plugins,
5
- plugins::syntect::SyntectAdapter, ComrakOptions, ComrakPlugins,
7
+ adapters::SyntaxHighlighterAdapter,
8
+ markdown_to_html, markdown_to_html_with_plugins,
9
+ plugins::syntect::{SyntectAdapter, SyntectAdapterBuilder},
10
+ ComrakOptions, ComrakPlugins,
11
+ };
12
+ use magnus::{
13
+ define_module, exception, function, r_hash::ForEach, scan_args, Error, RHash, Symbol, Value,
6
14
  };
7
- use magnus::{define_module, function, r_hash::ForEach, scan_args, Error, RHash, Symbol, Value};
8
15
 
9
16
  mod options;
10
17
  use options::iterate_options_hash;
@@ -12,7 +19,8 @@ use options::iterate_options_hash;
12
19
  mod plugins;
13
20
  use plugins::{
14
21
  syntax_highlighting::{
15
- fetch_syntax_highlighter_theme, SYNTAX_HIGHLIGHTER_PLUGIN_DEFAULT_THEME,
22
+ fetch_syntax_highlighter_path, fetch_syntax_highlighter_theme,
23
+ SYNTAX_HIGHLIGHTER_PLUGIN_DEFAULT_THEME,
16
24
  },
17
25
  SYNTAX_HIGHLIGHTER_PLUGIN,
18
26
  };
@@ -21,13 +29,9 @@ mod utils;
21
29
 
22
30
  pub const EMPTY_STR: &str = "";
23
31
 
24
- fn commonmark_to_html<'a>(args: &[Value]) -> Result<String, magnus::Error> {
25
- let args = scan_args::scan_args(args)?;
32
+ fn commonmark_to_html(args: &[Value]) -> Result<String, magnus::Error> {
33
+ let args = scan_args::scan_args::<_, (), (), (), _, ()>(args)?;
26
34
  let (rb_commonmark,): (String,) = args.required;
27
- let _: () = args.optional;
28
- let _: () = args.splat;
29
- let _: () = args.trailing;
30
- let _: () = args.block;
31
35
 
32
36
  let kwargs = scan_args::get_kwargs::<_, (), (Option<RHash>, Option<RHash>), ()>(
33
37
  args.keywords,
@@ -52,13 +56,75 @@ fn commonmark_to_html<'a>(args: &[Value]) -> Result<String, magnus::Error> {
52
56
  let adapter: SyntectAdapter;
53
57
 
54
58
  let theme = match rb_plugins.get(Symbol::new(SYNTAX_HIGHLIGHTER_PLUGIN)) {
55
- Some(theme_val) => fetch_syntax_highlighter_theme(theme_val)?,
59
+ Some(syntax_highlighter_options) => {
60
+ fetch_syntax_highlighter_theme(syntax_highlighter_options)?
61
+ }
56
62
  None => SYNTAX_HIGHLIGHTER_PLUGIN_DEFAULT_THEME.to_string(), // no `syntax_highlighter:` defined
57
63
  };
58
64
 
59
- if theme.is_empty() || theme == "none" {
65
+ let path = match rb_plugins.get(Symbol::new(SYNTAX_HIGHLIGHTER_PLUGIN)) {
66
+ Some(syntax_highlighter_options) => {
67
+ fetch_syntax_highlighter_path(syntax_highlighter_options)?
68
+ }
69
+ None => PathBuf::from("".to_string()), // no `syntax_highlighter:` defined
70
+ };
71
+
72
+ if !path.eq(&PathBuf::from("".to_string())) && !path.exists() {
73
+ return Err(Error::new(
74
+ exception::arg_error(),
75
+ "path does not exist".to_string(),
76
+ ));
77
+ }
78
+
79
+ if theme.is_empty() && path.exists() {
80
+ return Err(Error::new(
81
+ exception::arg_error(),
82
+ "`path` also needs `theme` passed into the `syntax_highlighter`",
83
+ ));
84
+ }
85
+ if path.exists() && !path.is_dir() {
86
+ return Err(Error::new(
87
+ exception::arg_error(),
88
+ "`path` needs to be a directory",
89
+ ));
90
+ }
91
+
92
+ if path.exists() {
93
+ let builder = SyntectAdapterBuilder::new();
94
+ let mut ts = ThemeSet::load_defaults();
95
+
96
+ match ts.add_from_folder(&path) {
97
+ Ok(_) => {}
98
+ Err(e) => {
99
+ return Err(Error::new(
100
+ exception::arg_error(),
101
+ format!("failed to load theme set from path: {e}"),
102
+ ));
103
+ }
104
+ }
105
+
106
+ ts.themes.get(&theme).ok_or_else(|| {
107
+ Error::new(
108
+ exception::arg_error(),
109
+ format!("theme `{}` does not exist", theme),
110
+ )
111
+ })?;
112
+
113
+ adapter = builder.theme_set(ts).theme(&theme).build();
114
+
115
+ syntax_highlighter = Some(&adapter);
116
+ } else if theme.is_empty() || theme == "none" {
60
117
  syntax_highlighter = None;
61
118
  } else {
119
+ ThemeSet::load_defaults()
120
+ .themes
121
+ .get(&theme)
122
+ .ok_or_else(|| {
123
+ Error::new(
124
+ exception::arg_error(),
125
+ format!("theme `{}` does not exist", theme),
126
+ )
127
+ })?;
62
128
  adapter = SyntectAdapter::new(&theme);
63
129
  syntax_highlighter = Some(&adapter);
64
130
  }
@@ -2,6 +2,8 @@ use std::borrow::Cow;
2
2
 
3
3
  use comrak::ComrakOptions;
4
4
 
5
+ use magnus::value::ReprValue;
6
+ use magnus::TryConvert;
5
7
  use magnus::{class, r_hash::ForEach, Error, RHash, Symbol, Value};
6
8
 
7
9
  use crate::utils::try_convert_string;
@@ -14,7 +16,7 @@ fn iterate_parse_options(comrak_options: &mut ComrakOptions, options_hash: RHash
14
16
  .foreach(|key: Symbol, value: Value| {
15
17
  match key.name() {
16
18
  Ok(Cow::Borrowed(PARSE_SMART)) => {
17
- comrak_options.parse.smart = value.try_convert::<bool>()?;
19
+ comrak_options.parse.smart = TryConvert::try_convert(value)?;
18
20
  }
19
21
  Ok(Cow::Borrowed(PARSE_DEFAULT_INFO_STRING)) => {
20
22
  comrak_options.parse.default_info_string = try_convert_string(value);
@@ -37,19 +39,19 @@ fn iterate_render_options(comrak_options: &mut ComrakOptions, options_hash: RHas
37
39
  .foreach(|key: Symbol, value: Value| {
38
40
  match key.name() {
39
41
  Ok(Cow::Borrowed(RENDER_HARDBREAKS)) => {
40
- comrak_options.render.hardbreaks = value.try_convert::<bool>()?;
42
+ comrak_options.render.hardbreaks = TryConvert::try_convert(value)?;
41
43
  }
42
44
  Ok(Cow::Borrowed(RENDER_GITHUB_PRE_LANG)) => {
43
- comrak_options.render.github_pre_lang = value.try_convert::<bool>()?;
45
+ comrak_options.render.github_pre_lang = TryConvert::try_convert(value)?;
44
46
  }
45
47
  Ok(Cow::Borrowed(RENDER_WIDTH)) => {
46
- comrak_options.render.width = value.try_convert::<usize>()?;
48
+ comrak_options.render.width = TryConvert::try_convert(value)?;
47
49
  }
48
50
  Ok(Cow::Borrowed(RENDER_UNSAFE)) => {
49
- comrak_options.render.unsafe_ = value.try_convert::<bool>()?;
51
+ comrak_options.render.unsafe_ = TryConvert::try_convert(value)?;
50
52
  }
51
53
  Ok(Cow::Borrowed(RENDER_ESCAPE)) => {
52
- comrak_options.render.escape = value.try_convert::<bool>()?;
54
+ comrak_options.render.escape = TryConvert::try_convert(value)?;
53
55
  }
54
56
  _ => {}
55
57
  }
@@ -75,37 +77,41 @@ fn iterate_extension_options(comrak_options: &mut ComrakOptions, options_hash: R
75
77
  .foreach(|key: Symbol, value: Value| {
76
78
  match key.name() {
77
79
  Ok(Cow::Borrowed(EXTENSION_STRIKETHROUGH)) => {
78
- comrak_options.extension.strikethrough = value.try_convert::<bool>()?;
80
+ comrak_options.extension.strikethrough = TryConvert::try_convert(value)?;
79
81
  }
80
82
  Ok(Cow::Borrowed(EXTENSION_TAGFILTER)) => {
81
- comrak_options.extension.tagfilter = value.try_convert::<bool>()?;
83
+ comrak_options.extension.tagfilter = TryConvert::try_convert(value)?;
82
84
  }
83
85
  Ok(Cow::Borrowed(EXTENSION_TABLE)) => {
84
- comrak_options.extension.table = value.try_convert::<bool>()?;
86
+ comrak_options.extension.table = TryConvert::try_convert(value)?;
85
87
  }
86
88
  Ok(Cow::Borrowed(EXTENSION_AUTOLINK)) => {
87
- comrak_options.extension.autolink = value.try_convert::<bool>()?;
89
+ comrak_options.extension.autolink = TryConvert::try_convert(value)?;
88
90
  }
89
91
  Ok(Cow::Borrowed(EXTENSION_TASKLIST)) => {
90
- comrak_options.extension.tasklist = value.try_convert::<bool>()?;
92
+ comrak_options.extension.tasklist = TryConvert::try_convert(value)?;
91
93
  }
92
94
  Ok(Cow::Borrowed(EXTENSION_SUPERSCRIPT)) => {
93
- comrak_options.extension.superscript = value.try_convert::<bool>()?;
95
+ comrak_options.extension.superscript = TryConvert::try_convert(value)?;
94
96
  }
95
97
  Ok(Cow::Borrowed(EXTENSION_HEADER_IDS)) => {
96
98
  comrak_options.extension.header_ids = try_convert_string(value);
97
99
  }
98
100
  Ok(Cow::Borrowed(EXTENSION_FOOTNOTES)) => {
99
- comrak_options.extension.footnotes = value.try_convert::<bool>()?;
101
+ comrak_options.extension.footnotes = TryConvert::try_convert(value)?;
100
102
  }
101
103
  Ok(Cow::Borrowed(EXTENSION_DESCRIPTION_LISTS)) => {
102
- comrak_options.extension.description_lists = value.try_convert::<bool>()?;
104
+ comrak_options.extension.description_lists = TryConvert::try_convert(value)?;
103
105
  }
104
106
  Ok(Cow::Borrowed(EXTENSION_FRONT_MATTER_DELIMITER)) => {
105
- comrak_options.extension.front_matter_delimiter = try_convert_string(value);
107
+ if let Some(option) = try_convert_string(value) {
108
+ if !option.is_empty() {
109
+ comrak_options.extension.front_matter_delimiter = Some(option);
110
+ }
111
+ }
106
112
  }
107
113
  Ok(Cow::Borrowed(EXTENSION_SHORTCODES)) => {
108
- comrak_options.extension.shortcodes = value.try_convert::<bool>()?;
114
+ comrak_options.extension.shortcodes = TryConvert::try_convert(value)?;
109
115
  }
110
116
  _ => {}
111
117
  }
@@ -1,8 +1,12 @@
1
- use magnus::{RHash, Symbol, Value};
1
+ use std::path::PathBuf;
2
+
3
+ use magnus::value::ReprValue;
4
+ use magnus::{RHash, Symbol, TryConvert, Value};
2
5
 
3
6
  use crate::EMPTY_STR;
4
7
 
5
8
  pub const SYNTAX_HIGHLIGHTER_PLUGIN_THEME_KEY: &str = "theme";
9
+ pub const SYNTAX_HIGHLIGHTER_PLUGIN_PATH_KEY: &str = "path";
6
10
  pub const SYNTAX_HIGHLIGHTER_PLUGIN_DEFAULT_THEME: &str = "base16-ocean.dark";
7
11
 
8
12
  pub fn fetch_syntax_highlighter_theme(value: Value) -> Result<String, magnus::Error> {
@@ -11,7 +15,7 @@ pub fn fetch_syntax_highlighter_theme(value: Value) -> Result<String, magnus::Er
11
15
  return Ok(EMPTY_STR.to_string());
12
16
  }
13
17
 
14
- let syntax_highlighter_plugin = value.try_convert::<RHash>()?;
18
+ let syntax_highlighter_plugin: RHash = TryConvert::try_convert(value)?;
15
19
  let theme_key = Symbol::new(SYNTAX_HIGHLIGHTER_PLUGIN_THEME_KEY);
16
20
 
17
21
  match syntax_highlighter_plugin.get(theme_key) {
@@ -28,3 +32,28 @@ pub fn fetch_syntax_highlighter_theme(value: Value) -> Result<String, magnus::Er
28
32
  }
29
33
  }
30
34
  }
35
+
36
+ pub fn fetch_syntax_highlighter_path(value: Value) -> Result<PathBuf, magnus::Error> {
37
+ if value.is_nil() {
38
+ // `syntax_highlighter: nil`
39
+ return Ok(PathBuf::from(EMPTY_STR));
40
+ }
41
+
42
+ let syntax_highlighter_plugin: RHash = TryConvert::try_convert(value)?;
43
+ let path_key = Symbol::new(SYNTAX_HIGHLIGHTER_PLUGIN_PATH_KEY);
44
+
45
+ match syntax_highlighter_plugin.get(path_key) {
46
+ Some(path) => {
47
+ if path.is_nil() {
48
+ // `syntax_highlighter: { path: nil }`
49
+ return Ok(PathBuf::from(EMPTY_STR));
50
+ }
51
+ let val: String = TryConvert::try_convert(path)?;
52
+ Ok(PathBuf::from(val))
53
+ }
54
+ None => {
55
+ // `syntax_highlighter: { }`
56
+ Ok(PathBuf::from(EMPTY_STR))
57
+ }
58
+ }
59
+ }
@@ -1,21 +1,3 @@
1
- // use comrak::ComrakPlugins;
2
- // use magnus::{class, r_hash::ForEach, RHash, Symbol, Value};
3
-
4
- // use crate::plugins::syntax_highlighting::fetch_syntax_highlighter_theme;
5
-
6
1
  pub mod syntax_highlighting;
7
2
 
8
3
  pub const SYNTAX_HIGHLIGHTER_PLUGIN: &str = "syntax_highlighter";
9
-
10
- // pub fn iterate_plugins_hash(
11
- // comrak_plugins: &mut ComrakPlugins,
12
- // mut theme: String,
13
- // key: Symbol,
14
- // value: Value,
15
- // ) -> Result<ForEach, magnus::Error> {
16
- // if key.name().unwrap() == SYNTAX_HIGHLIGHTER_PLUGIN {
17
- // theme = fetch_syntax_highlighter_theme(value)?;
18
- // }
19
-
20
- // Ok(ForEach::Continue)
21
- // }
@@ -1,7 +1,7 @@
1
- use magnus::Value;
1
+ use magnus::{TryConvert, Value};
2
2
 
3
3
  pub fn try_convert_string(value: Value) -> Option<String> {
4
- match value.try_convert::<String>() {
4
+ match TryConvert::try_convert(value) {
5
5
  Ok(s) => Some(s),
6
6
  Err(_) => None,
7
7
  }
@@ -26,7 +26,7 @@ module Commonmarker
26
26
  header_ids: "",
27
27
  footnotes: false,
28
28
  description_lists: false,
29
- front_matter_delimiter: nil,
29
+ front_matter_delimiter: "",
30
30
  shortcodes: true,
31
31
  },
32
32
  format: [:html].freeze,
@@ -35,6 +35,7 @@ module Commonmarker
35
35
  PLUGINS = {
36
36
  syntax_highlighter: {
37
37
  theme: "base16-ocean.dark",
38
+ path: "",
38
39
  },
39
40
  }
40
41
 
@@ -78,7 +79,7 @@ module Commonmarker
78
79
 
79
80
  [:syntax_highlighter].each do |type|
80
81
  define_singleton_method :"process_#{type}_plugin" do |plugin|
81
- return nil if plugin.nil? # plugin explicitly nil, remove it
82
+ return if plugin.nil? # plugin explicitly nil, remove it
82
83
 
83
84
  Commonmarker::Config::PLUGINS[type].each_with_object({}) do |(key, value), hash|
84
85
  if plugin.nil? # option not provided, go for the default
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmarker
4
- VERSION = "1.0.0.pre7"
4
+ VERSION = "1.0.0.pre11"
5
5
  end
data/lib/commonmarker.rb CHANGED
@@ -7,11 +7,6 @@ require "commonmarker/config"
7
7
  require "commonmarker/renderer"
8
8
  require "commonmarker/version"
9
9
 
10
- if ENV.fetch("DEBUG", false)
11
- require "awesome_print"
12
- require "debug"
13
- end
14
-
15
10
  module Commonmarker
16
11
  class << self
17
12
  # Public: Parses a CommonMark string into an HTML string.
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commonmarker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre7
4
+ version: 1.0.0.pre11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  - Ashe Connor
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-01-26 00:00:00.000000000 Z
12
+ date: 2023-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rb_sys
@@ -54,33 +54,19 @@ dependencies:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: '1.2'
57
- - !ruby/object:Gem::Dependency
58
- name: rake-compiler-dock
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - "~>"
62
- - !ruby/object:Gem::Version
63
- version: '1.2'
64
- type: :development
65
- prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - "~>"
69
- - !ruby/object:Gem::Version
70
- version: '1.2'
71
57
  description: A fast, safe, extensible parser for CommonMark. This wraps the comrak
72
58
  Rust crate.
73
- email:
59
+ email:
74
60
  executables: []
75
61
  extensions:
76
62
  - ext/commonmarker/extconf.rb
77
63
  extra_rdoc_files: []
78
64
  files:
79
65
  - Cargo.lock
66
+ - Cargo.toml
80
67
  - LICENSE.txt
81
68
  - README.md
82
69
  - ext/commonmarker/Cargo.toml
83
- - ext/commonmarker/_util.rb
84
70
  - ext/commonmarker/extconf.rb
85
71
  - ext/commonmarker/src/lib.rs
86
72
  - ext/commonmarker/src/options.rs
@@ -102,7 +88,7 @@ metadata:
102
88
  funding_uri: https://github.com/sponsors/gjtorikian/
103
89
  source_code_uri: https://github.com/gjtorikian/commonmarker
104
90
  rubygems_mfa_required: 'true'
105
- post_install_message:
91
+ post_install_message:
106
92
  rdoc_options: []
107
93
  require_paths:
108
94
  - lib
@@ -117,8 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
103
  - !ruby/object:Gem::Version
118
104
  version: 3.3.22
119
105
  requirements: []
120
- rubygems_version: 3.4.4
121
- signing_key:
106
+ rubygems_version: 3.4.21
107
+ signing_key:
122
108
  specification_version: 4
123
109
  summary: CommonMark parser and renderer. Written in Rust, wrapped in Ruby.
124
110
  test_files: []
@@ -1,102 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RUBY_MAJOR, RUBY_MINOR = RUBY_VERSION.split(".").collect(&:to_i)
4
-
5
- PACKAGE_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
6
- PACKAGE_EXT_DIR = File.join(PACKAGE_ROOT_DIR, "ext", "commonmarker")
7
-
8
- OS = case os = RbConfig::CONFIG["host_os"].downcase
9
- when /linux/
10
- # The official ruby-alpine Docker containers pre-build Ruby. As a result,
11
- # Ruby doesn't know that it's on a musl-based platform. `ldd` is the
12
- # a more reliable way to detect musl.
13
- # See https://github.com/skylightio/skylight-ruby/issues/92
14
- if ENV["SKYLIGHT_MUSL"] || %x(ldd --version 2>&1).include?("musl")
15
- "linux-musl"
16
- else
17
- "linux"
18
- end
19
- when /darwin/
20
- "darwin"
21
- when /freebsd/
22
- "freebsd"
23
- when /netbsd/
24
- "netbsd"
25
- when /openbsd/
26
- "openbsd"
27
- when /sunos|solaris/
28
- "solaris"
29
- when /mingw|mswin/
30
- "windows"
31
- else
32
- os
33
- end
34
-
35
- # Normalize the platform CPU
36
- ARCH = case cpu = RbConfig::CONFIG["host_cpu"].downcase
37
- when /amd64|x86_64|x64/
38
- "x86_64"
39
- when /i?86|x86|i86pc/
40
- "x86"
41
- when /ppc|powerpc/
42
- "powerpc"
43
- when /^aarch/
44
- "aarch"
45
- when /^arm/
46
- "arm"
47
- else
48
- cpu
49
- end
50
-
51
- def windows?
52
- OS == "windows"
53
- end
54
-
55
- def solaris?
56
- OS == solaries
57
- end
58
-
59
- def darwin?
60
- OS == "darwin"
61
- end
62
-
63
- def macos?
64
- darwin? || OS == "macos"
65
- end
66
-
67
- def openbsd?
68
- OS == "openbsd"
69
- end
70
-
71
- def aix?
72
- OS == "aix"
73
- end
74
-
75
- def nix?
76
- !(windows? || solaris? || darwin?)
77
- end
78
-
79
- def x86_64?
80
- ARCH == "x86_64"
81
- end
82
-
83
- def x86?
84
- ARCH == "x86"
85
- end
86
-
87
- def abs_path(path)
88
- File.join(PACKAGE_EXT_DIR, path)
89
- end
90
-
91
- def find_header_or_abort(header, *paths)
92
- find_header(header, *paths) || abort("#{header} was expected in `#{paths.join(", ")}`, but it is missing.")
93
- end
94
-
95
- def find_library_or_abort(lib, func, *paths)
96
- find_library(lib, func, *paths) || abort("#{lib} was expected in `#{paths.join(", ")}`, but it is missing.")
97
- end
98
-
99
- def concat_flags(*args)
100
- args.compact.join(" ")
101
- end
102
-