expressir 1.2.4-x64-mingw32 → 1.2.5-x64-mingw32

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +200 -9
  4. data/.gitignore +7 -2
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/Rakefile +4 -1
  8. data/bin/console +0 -1
  9. data/bin/rspec +3 -3
  10. data/exe/expressir +4 -2
  11. data/exe/format +1 -1
  12. data/exe/format-test +25 -25
  13. data/exe/generate-parser +16 -13
  14. data/expressir.gemspec +11 -9
  15. data/lib/expressir/config.rb +1 -1
  16. data/lib/expressir/express/2.7/express_parser.so +0 -0
  17. data/lib/expressir/express/3.0/express_parser.so +0 -0
  18. data/lib/expressir/express/parser.rb +2 -2
  19. data/lib/expressir/express/visitor.rb +7 -5
  20. data/lib/expressir/model.rb +78 -78
  21. data/lib/expressir/version.rb +1 -1
  22. data/rakelib/antlr4-native.rake +63 -0
  23. data/rakelib/cross-ruby.rake +213 -162
  24. data/spec/acceptance/version_spec.rb +7 -2
  25. data/spec/expressir/express/cache_spec.rb +8 -5
  26. data/spec/expressir/express/formatter_spec.rb +16 -8
  27. data/spec/expressir/express/parser_spec.rb +17 -11
  28. data/spec/expressir/model/model_element_spec.rb +154 -146
  29. metadata +52 -61
  30. data/demo.rb +0 -18
  31. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  32. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  33. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  34. data/original/examples/employment/eclipse/.project +0 -17
  35. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  36. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  37. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  38. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  39. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  40. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  41. data/original/examples/employment/eclipse/readme.txt +0 -7
  42. data/original/examples/employment/employment_schema.exp +0 -33
  43. data/original/examples/employment/employment_schema.rb +0 -232
  44. data/original/examples/employment/employment_schema.xml +0 -93
  45. data/original/examples/employment/employment_schema___module.rb +0 -46
  46. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  47. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  48. data/original/examples/employment/example_employment_data.xml +0 -1
  49. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  50. data/original/examples/employment/example_employment_reader.rb +0 -30
  51. data/original/examples/employment/example_employment_writer.rb +0 -51
  52. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  53. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  54. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  55. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  56. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  57. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  58. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  59. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  60. data/original/exp2ruby.rb +0 -525
  61. data/original/expsm.rb +0 -34
  62. data/original/mapping_owl.rb +0 -1018
  63. data/original/mapping_sysml.rb +0 -2281
  64. data/original/mapping_uml2.rb +0 -599
  65. data/original/mapping_uml2_eclipse.rb +0 -433
  66. data/original/reeper.rb +0 -134
  67. data/spec/expressr_spec.rb +0 -5
@@ -1,11 +1,15 @@
1
1
  require "rbconfig"
2
2
  require "shellwords"
3
3
 
4
+ WINDOWS_PLATFORM_REGEX = /mingw|mswin/.freeze
5
+ LINUX_PLATFORM_REGEX = /linux/.freeze
6
+ DARWIN_PLATFORM_REGEX = /darwin/.freeze
7
+ GLIBC_MIN_VERSION = "2.17".freeze
8
+
4
9
  CrossRuby = Struct.new(:version, :host) do
5
- WINDOWS_PLATFORM_REGEX = /mingw|mswin/
6
- MINGW32_PLATFORM_REGEX = /mingw32/
7
- LINUX_PLATFORM_REGEX = /linux/
8
- DARWIN_PLATFORM_REGEX = /darwin/
10
+ def dll_staging_path
11
+ "tmp/#{platform}/stage/lib/expressir/express/#{minor_ver}/express_parser.#{dll_ext}"
12
+ end
9
13
 
10
14
  def windows?
11
15
  !!(platform =~ WINDOWS_PLATFORM_REGEX)
@@ -27,6 +31,14 @@ CrossRuby = Struct.new(:version, :host) do
27
31
  @minor_ver ||= ver[/\A\d\.\d(?=\.)/]
28
32
  end
29
33
 
34
+ def minor_ver_digi
35
+ @minor_ver_digi = minor_ver.delete(".").to_i
36
+ end
37
+
38
+ def ucrt?
39
+ minor_ver_digi >= 31
40
+ end
41
+
30
42
  def api_ver_suffix
31
43
  case minor_ver
32
44
  when nil
@@ -36,18 +48,21 @@ CrossRuby = Struct.new(:version, :host) do
36
48
  end
37
49
  end
38
50
 
51
+ # rubocop:disable Metrics/MethodLength
52
+ # rubocop:disable Metrics/CyclomaticComplexity
39
53
  def platform
40
- @platform ||= case host
54
+ @platform ||=
55
+ case host
41
56
  when /\Ax86_64.*mingw32/
42
- "x64-mingw32"
43
- when /\Ai[3-6]86.*mingw32/
44
- "x86-mingw32"
57
+ if ucrt?
58
+ "x64-mingw-ucrt"
59
+ else
60
+ "x64-mingw32"
61
+ end
45
62
  when /\Ax86_64.*linux/
46
63
  "x86_64-linux"
47
64
  when /\A(arm64|aarch64).*linux/
48
65
  "aarch64-linux"
49
- when /\Ai[3-6]86.*linux/
50
- "x86-linux"
51
66
  when /\Ax86_64-darwin/
52
67
  "x86_64-darwin"
53
68
  when /\Aarm64-darwin/
@@ -58,216 +73,264 @@ CrossRuby = Struct.new(:version, :host) do
58
73
  end
59
74
 
60
75
  def tool(name)
61
- (@binutils_prefix ||= case platform
62
- when "x64-mingw32"
63
- "x86_64-w64-mingw32-"
64
- when "x86-mingw32"
65
- "i686-w64-mingw32-"
66
- when "x86_64-linux"
67
- "x86_64-redhat-linux-"
68
- when "aarch64-linux"
69
- "aarch64-redhat-linux-"
70
- when "x86-linux"
71
- "i686-redhat-linux-"
72
- when /x86_64.*darwin/
73
- "x86_64-apple-darwin-"
74
- when /a.*64.*darwin/
75
- "aarch64-apple-darwin-"
76
- else
77
- raise "CrossRuby.tool: unmatched platform: #{platform}"
78
- end) + name
76
+ (@binutils_prefix ||=
77
+ case platform
78
+ when /x64-mingw(32|-ucrt)/
79
+ "x86_64-w64-mingw32-"
80
+ when /(x86_64|aarch64)-linux/
81
+ # We do believe that we are on Linux and can use native tools
82
+ ""
83
+ when /x86_64.*darwin/
84
+ "x86_64-apple-darwin-"
85
+ when /a.*64.*darwin/
86
+ "aarch64-apple-darwin-"
87
+ else
88
+ raise "CrossRuby.tool: unmatched platform: #{platform}"
89
+ end) + name
79
90
  end
80
91
 
81
92
  def target_file_format
82
93
  case platform
83
- when "x64-mingw32"
94
+ when /64-mingw(32|-ucrt)/
84
95
  "pei-x86-64"
85
- when "x86-mingw32"
86
- "pei-i386"
87
96
  when "x86_64-linux"
88
97
  "elf64-x86-64"
89
98
  when "aarch64-linux"
90
- "elf64-arm64"
91
- when "x86-linux"
92
- "elf32-i386"
99
+ "elf64-little"
93
100
  when "x86_64-darwin"
94
- "Mach-O 64-bit x86-64" # hmm
101
+ "Mach-O 64-bit x86-64"
95
102
  when "arm64-darwin"
96
103
  "Mach-O arm64"
97
104
  else
98
105
  raise "CrossRuby.target_file_format: unmatched platform: #{platform}"
99
106
  end
100
107
  end
108
+ # rubocop:enable Metrics/MethodLength
109
+ # rubocop:enable Metrics/CyclomaticComplexity
101
110
 
102
111
  def dll_ext
103
112
  darwin? ? "bundle" : "so"
104
113
  end
105
114
 
106
- def dll_staging_path
107
- "tmp/#{platform}/stage/lib/#{GEMSPEC.name}/#{minor_ver}/#{GEMSPEC.name}.#{dll_ext}"
115
+ def verify_format(dump, dll)
116
+ format_match = (/file format #{Regexp.quote(target_file_format)}\s/ === dump)
117
+ format_error = "Unexpected file format for '#{dll}', '#{target_file_format}' required"
118
+ raise format_error unless format_match
108
119
  end
109
120
 
110
- def libruby_dll
111
- case platform
112
- when "x64-mingw32"
113
- "x64-msvcrt-ruby#{api_ver_suffix}.dll"
114
- when "x86-mingw32"
115
- "msvcrt-ruby#{api_ver_suffix}.dll"
116
- else
117
- raise "CrossRuby.libruby_dll: unmatched platform: #{platform}"
121
+ def verify_entry_windows(dump, dll)
122
+ unless /Table.*\sInit_express_parser\s/mi === dump
123
+ raise "Export function Init_express_parser not in dll #{dll}"
118
124
  end
119
125
  end
120
126
 
121
- def allowed_dlls
127
+ def verify_entry_linux(dll)
128
+ nm = `#{["env", "LANG=C", tool("nm"), "-D", dll].shelljoin}`
129
+ unless / T Init_express_parser/.match?(nm)
130
+ raise "Export function Init_express_parser not in dll #{dll}"
131
+ end
132
+ end
133
+
134
+ def verify_entry_darwin(dll)
135
+ nm = `#{["env", "LANG=C", tool("nm"), "-g", dll].shelljoin}`
136
+ unless / T _?Init_express_parser/.match?(nm)
137
+ raise "Export function Init_express_parser not in dll #{dll}"
138
+ end
139
+ end
140
+
141
+ def verify_entry(dump, dll)
122
142
  case platform
123
- when MINGW32_PLATFORM_REGEX
124
- [
125
- "kernel32.dll",
126
- "msvcrt.dll",
127
- "ws2_32.dll",
128
- "user32.dll",
129
- "advapi32.dll",
130
- libruby_dll,
131
- ]
143
+ when WINDOWS_PLATFORM_REGEX
144
+ verify_entry_windows(dump, dll)
132
145
  when LINUX_PLATFORM_REGEX
133
- [
134
- "libm.so.6",
135
- *(case
136
- when ver < "2.6.0"
137
- "libpthread.so.0"
138
- end),
139
- "libc.so.6",
140
- "libdl.so.2", # on old dists only - now in libc
141
- ]
146
+ verify_entry_linux(dll)
142
147
  when DARWIN_PLATFORM_REGEX
143
- [
144
- "/usr/lib/libSystem.B.dylib",
145
- "/usr/lib/liblzma.5.dylib",
146
- "/usr/lib/libobjc.A.dylib",
147
- ]
148
+ verify_entry_darwin(dll)
148
149
  else
149
- raise "CrossRuby.allowed_dlls: unmatched platform: #{platform}"
150
+ raise "CrossRuby.verify_entry: unmatched platform: #{platform}"
150
151
  end
151
152
  end
152
153
 
153
- def dll_ref_versions
154
- case platform
155
- when LINUX_PLATFORM_REGEX
156
- { "GLIBC" => "2.17" }
154
+ # rubocop:disable Metrics/MethodLength
155
+ def allowed_dlls_ucrt
156
+ ["kernel32.dll",
157
+ "api-ms-win-crt-convert-l1-1-0.dll",
158
+ "api-ms-win-crt-environment-l1-1-0.dll",
159
+ "api-ms-win-crt-heap-l1-1-0.dll",
160
+ "api-ms-win-crt-locale-l1-1-0.dll",
161
+ "api-ms-win-crt-private-l1-1-0.dll",
162
+ "api-ms-win-crt-runtime-l1-1-0.dll",
163
+ "api-ms-win-crt-stdio-l1-1-0.dll",
164
+ "api-ms-win-crt-string-l1-1-0.dll",
165
+ "api-ms-win-crt-time-l1-1-0.dll",
166
+ "api-ms-win-crt-filesystem-l1-1-0.dll",
167
+ "api-ms-win-crt-math-l1-1-0.dll",
168
+ "libwinpthread-1.dll",
169
+ "x64-ucrt-ruby310.dll"]
170
+ end
171
+ # rubocop:enable Metrics/MethodLength
172
+
173
+ def allowed_dlls_mingw
174
+ [
175
+ "kernel32.dll",
176
+ "msvcrt.dll",
177
+ "libwinpthread-1.dll",
178
+ "x64-msvcrt-ruby#{api_ver_suffix}.dll",
179
+ ]
180
+ end
181
+
182
+ def allowed_dlls_windows
183
+ if ucrt?
184
+ allowed_dlls_ucrt
157
185
  else
158
- raise "CrossRuby.dll_ref_versions: unmatched platform: #{platform}"
186
+ allowed_dlls_mingw
159
187
  end
160
188
  end
161
- end
162
189
 
163
- CROSS_RUBIES = File.read(".cross_rubies").split("\n").map do |line|
164
- case line
165
- when /\A([^#]+):([^#]+)/
166
- CrossRuby.new($1, $2)
190
+ def allowed_dlls_linux
191
+ suffix = (platform == "x86_64-linux" ? "x86-64" : "aarch64")
192
+ [
193
+ "ld-linux-#{suffix}.so",
194
+ "libc.so",
195
+ "libm.so",
196
+ "libstdc++.so",
197
+ "libgcc_s.so",
198
+ ]
167
199
  end
168
- end.compact
169
-
170
- ENV["RUBY_CC_VERSION"] = CROSS_RUBIES.map(&:ver).uniq.join(":")
171
200
 
172
- require "rake_compiler_dock"
201
+ def allowed_dlls_darwin
202
+ [
203
+ "/usr/lib/libSystem.B.dylib",
204
+ "/usr/lib/libc++.1.dylib",
205
+ ]
206
+ end
173
207
 
174
- def verify_dll(dll, cross_ruby)
175
- allowed_imports = cross_ruby.allowed_dlls
176
- dump = `#{["env", "LANG=C", cross_ruby.tool("objdump"), "-p", dll].shelljoin}`
208
+ def allowed_dlls
209
+ case platform
210
+ when WINDOWS_PLATFORM_REGEX
211
+ allowed_dlls_windows
212
+ when LINUX_PLATFORM_REGEX
213
+ allowed_dlls_linux
214
+ when DARWIN_PLATFORM_REGEX
215
+ allowed_dlls_darwin
216
+ else
217
+ raise "CrossRuby.allowed_dlls: unmatched platform: #{platform}"
218
+ end
219
+ end
177
220
 
178
- if cross_ruby.windows?
179
- raise "unexpected file format for generated dll #{dll}" unless /file format #{Regexp.quote(cross_ruby.target_file_format)}\s/ === dump
180
- raise "export function Init_nokogiri not in dll #{dll}" unless /Table.*\sInit_nokogiri\s/mi === dump
221
+ def actual_dlls_linux(dump)
222
+ dump.scan(/NEEDED\s+(.*)/).map(&:first).uniq
223
+ end
181
224
 
182
- # Verify that the DLL dependencies are all allowed.
183
- actual_imports = dump.scan(/DLL Name: (.*)$/).map(&:first).map(&:downcase).uniq
184
- if !(actual_imports - allowed_imports).empty?
185
- raise "unallowed so imports #{actual_imports.inspect} in #{dll} (allowed #{allowed_imports.inspect})"
186
- end
225
+ def actual_dlls_windows(dump)
226
+ dump.scan(/DLL Name: (.*)$/).map(&:first).map(&:downcase).uniq
227
+ end
187
228
 
188
- elsif cross_ruby.linux?
189
- nm = `#{["env", "LANG=C", cross_ruby.tool("nm"), "-D", dll].shelljoin}`
229
+ def actual_dlls_darwin(dll)
230
+ ldd = `#{[tool("otool"), "-L", dll].shelljoin}`
231
+ ldd.scan(/^\t([^ ]+) /).map(&:first).uniq
232
+ end
190
233
 
191
- raise "unexpected file format for generated dll #{dll}" unless /file format #{Regexp.quote(cross_ruby.target_file_format)}\s/ === dump
192
- raise "export function Init_nokogiri not in dll #{dll}" unless / T Init_nokogiri/ === nm
234
+ def actual_dlls(dump, dll)
235
+ case platform
236
+ when DARWIN_PLATFORM_REGEX
237
+ actual_dlls_darwin(dll)
238
+ when LINUX_PLATFORM_REGEX
239
+ actual_dlls_linux(dump)
240
+ when WINDOWS_PLATFORM_REGEX
241
+ actual_dlls_windows(dump)
242
+ else
243
+ raise "CrossRuby.actual_dlls: unmatched platform: #{platform}"
244
+ end
245
+ end
193
246
 
194
- # Verify that the DLL dependencies are all allowed.
195
- actual_imports = dump.scan(/NEEDED\s+(.*)/).map(&:first).uniq
196
- if !(actual_imports - allowed_imports).empty?
197
- raise "unallowed so imports #{actual_imports.inspect} in #{dll} (allowed #{allowed_imports.inspect})"
247
+ def verify_imports(dump, dll)
248
+ l = actual_dlls(dump, dll)
249
+ libs = allowed_dlls
250
+ l.delete_if { |ln| libs.any? { |lib| ln.include?(lib) } }
251
+ unless l.empty?
252
+ raise "Unexpected references in '#{dll}' : #{l}"
198
253
  end
254
+ end
199
255
 
200
- # Verify that the expected so version requirements match the actual dependencies.
201
- ref_versions_data = dump.scan(/0x[\da-f]+ 0x[\da-f]+ \d+ (\w+)_([\d\.]+)$/i)
256
+ def lib_ref_versions(data)
202
257
  # Build a hash of library versions like {"LIBUDEV"=>"183", "GLIBC"=>"2.17"}
203
- actual_ref_versions = ref_versions_data.each.with_object({}) do |(lib, ver), h|
258
+ data.each.with_object({}) do |(lib, ver), h|
204
259
  if !h[lib] || ver.split(".").map(&:to_i).pack("C*") > h[lib].split(".").map(&:to_i).pack("C*")
205
260
  h[lib] = ver
206
261
  end
207
262
  end
208
- if actual_ref_versions != cross_ruby.dll_ref_versions
209
- raise "unexpected so version requirements #{actual_ref_versions.inspect} in #{dll}"
210
- end
211
-
212
- elsif cross_ruby.darwin?
213
- nm = `#{["env", "LANG=C", cross_ruby.tool("nm"), "-g", dll].shelljoin}`
214
-
215
- raise "unexpected file format for generated dll #{dll}" unless /file format #{Regexp.quote(cross_ruby.target_file_format)}\s/ === dump
216
- raise "export function Init_nokogiri not in dll #{dll}" unless / T _?Init_nokogiri/ === nm
263
+ end
217
264
 
218
- # if liblzma is being referenced, let's make sure it's referring
219
- # to the system-installed file and not the homebrew-installed file.
220
- ldd = `#{["env", "LANG=C", cross_ruby.tool("otool"), "-L", dll].shelljoin}`
221
- if liblzma_refs = ldd.scan(/^\t([^ ]+) /).map(&:first).uniq.grep(/liblzma/)
222
- liblzma_refs.each do |ref|
223
- new_ref = File.join("/usr/lib", File.basename(ref))
224
- sh ["env", "LANG=C", cross_ruby.tool("install_name_tool"), "-change", ref, new_ref, dll].shelljoin
225
- end
265
+ def verify_glibc_version(dump, dll)
266
+ ref_versions_data = dump.scan(/0x[\da-f]+ 0x[\da-f]+ \d+ (\w+)_([\d.]+)$/i)
267
+ ref_ver = lib_ref_versions(ref_versions_data)
226
268
 
227
- # reload!
228
- ldd = `#{["env", "LANG=C", cross_ruby.tool("otool"), "-L", dll].shelljoin}`
269
+ unless ref_ver["GLIBC"].delete(".").to_i <= GLIBC_MIN_VERSION.delete(".").to_i
270
+ raise "Unexpected GLIBC version #{ref_ver['GLIBC']} for #{dll}, #{GLIBC_MIN_VERSION} or lower is expected"
229
271
  end
272
+ end
273
+ end
230
274
 
231
- # Verify that the DLL dependencies are all allowed.
232
- ldd = `#{["env", "LANG=C", cross_ruby.tool("otool"), "-L", dll].shelljoin}`
233
- actual_imports = ldd.scan(/^\t([^ ]+) /).map(&:first).uniq
234
- if !(actual_imports - allowed_imports).empty?
235
- raise "unallowed so imports #{actual_imports.inspect} in #{dll} (allowed #{allowed_imports.inspect})"
236
- end
275
+ CROSS_RUBIES = File.read(".cross_rubies").split("\n").map do |line|
276
+ case line
277
+ when /\A([^#]+):([^#]+)/
278
+ CrossRuby.new($1, $2)
237
279
  end
238
- puts "verify_dll: #{dll}: passed shared library sanity checks"
280
+ end.compact
281
+
282
+ ENV["RUBY_CC_VERSION"] = CROSS_RUBIES.map(&:ver).uniq.join(":")
283
+
284
+ require "rake_compiler_dock"
285
+
286
+ def verify_dll(dll, cross_ruby)
287
+ dump = `#{["env", "LANG=C", cross_ruby.tool("objdump"), "-p", dll].shelljoin}`
288
+ cross_ruby.verify_format(dump, dll)
289
+ cross_ruby.verify_entry(dump, dll)
290
+ cross_ruby.verify_imports(dump, dll)
291
+ # Not sure if it is required, probably not
292
+ # I am keeping related code as a reference for future advances
293
+ # cross_ruby.verify_glibc_version(dump, dll) if cross_ruby.linux?
294
+
295
+ puts "#{dll}: passed shared library sanity checks"
239
296
  end
240
297
 
241
298
  CROSS_RUBIES.each do |cross_ruby|
242
- task cross_ruby.dll_staging_path do |t|
243
- verify_dll t.name, cross_ruby
299
+ unless Rake::Task.task_defined?(cross_ruby.dll_staging_path)
300
+ task cross_ruby.dll_staging_path do |t|
301
+ verify_dll t.name, cross_ruby
302
+ end
244
303
  end
245
304
  end
246
305
 
247
306
  def gem_builder(plat)
248
307
  # use Task#invoke because the pkg/*gem task is defined at runtime
249
308
  Rake::Task["native:#{plat}"].invoke
250
- Rake::Task["pkg/#{GEMSPEC.full_name}-#{Gem::Platform.new(plat).to_s}.gem"].invoke
309
+ Rake::Task["pkg/#{GEMSPEC.full_name}-#{Gem::Platform.new(plat)}.gem"].invoke
310
+ end
311
+
312
+ REDHAT_PREREQ = "sudo yum install -y git".freeze
313
+ UBUNTU_PREREQ = "sudo apt-get update -y && sudo apt-get install -y automake autoconf libtool build-essential".freeze
314
+
315
+ def pre_req(plat)
316
+ case plat
317
+ when /\linux/
318
+ "if [[ $(awk -F= '/^NAME/{print $2}' /etc/os-release) == '\"Ubuntu\"' ]]; then #{UBUNTU_PREREQ}; else #{REDHAT_PREREQ}; fi"
319
+ else
320
+ UBUNTU_PREREQ.to_s
321
+ end
251
322
  end
252
323
 
253
324
  namespace "gem" do
254
- REDHAT_PREREQ = "sudo yum install -y git"
255
- UBUNTU_PREREQ = "sudo apt-get update -y && sudo apt-get install -y automake autoconf libtool build-essential"
256
325
  CROSS_RUBIES.find_all { |cr| cr.windows? || cr.linux? || cr.darwin? }.map(&:platform).uniq.each do |plat|
257
- pre_req = case plat
258
- when /\linux/
259
- "if [[ $(awk -F= '/^NAME/{print $2}' /etc/os-release) == '\"Ubuntu\"' ]]; then #{UBUNTU_PREREQ}; else #{REDHAT_PREREQ}; fi"
260
- else
261
- "#{UBUNTU_PREREQ}"
262
- end
263
326
  desc "build native gem for #{plat} platform"
264
327
  task plat do
265
- RakeCompilerDock.sh <<~EOT, platform: plat
266
- #{pre_req} &&
328
+ RakeCompilerDock.sh <<~RCD, platform: plat
329
+ #{pre_req(plat)} &&
267
330
  gem install bundler --no-document &&
268
331
  bundle &&
269
332
  bundle exec rake gem:#{plat}:builder MAKE='nice make -j`nproc`'
270
- EOT
333
+ RCD
271
334
  end
272
335
 
273
336
  namespace plat do
@@ -275,7 +338,6 @@ namespace "gem" do
275
338
  task "builder" do
276
339
  gem_builder(plat)
277
340
  end
278
- task "guest" => "builder" # TODO: remove me after this code is on master, temporary backwards compat for CI
279
341
  end
280
342
  end
281
343
 
@@ -289,28 +351,17 @@ namespace "gem" do
289
351
  multitask "darwin" => CROSS_RUBIES.find_all(&:darwin?).map(&:platform).uniq
290
352
  end
291
353
 
292
- namespace "native" do
293
- plat = "x86_64-darwin"
294
- namespace plat do
295
- desc "build native gem for #{plat} platform on host OS"
296
- task "builder" do
297
- gem_builder(plat)
298
- end
299
- task "guest" => "builder" # TODO: remove me after this code is on master, temporary backwards compat for CI
300
- end
301
- end
302
-
303
354
  require "rake/extensiontask"
304
355
 
305
356
  Rake::ExtensionTask.new("express_parser", GEMSPEC) do |ext|
306
357
  ext.ext_dir = "ext/express-parser"
307
- ext.lib_dir = File.join(*['lib', 'expressir', 'express', ENV['FAT_DIR']].compact)
308
- ext.config_options << ENV['EXTOPTS']
358
+ ext.lib_dir = File.join(*["lib", "expressir", "express", ENV.fetch("FAT_DIR", nil)].compact)
359
+ ext.config_options << ENV.fetch("EXTOPTS", nil)
309
360
  ext.cross_compile = true
310
361
  ext.cross_platform = CROSS_RUBIES.map(&:platform).uniq
311
362
  ext.cross_config_options << "--enable-cross-build"
312
363
  ext.cross_compiling do |spec|
313
- spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
314
- spec.dependencies.reject! { |dep| dep.name == 'rice' }
364
+ spec.files.reject! { |path| File.fnmatch?("ext/*", path) }
365
+ spec.dependencies.reject! { |dep| dep.name == "rice" }
315
366
  end
316
367
  end
@@ -2,10 +2,15 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe "Expressir" do
4
4
  describe "version" do
5
- it "displays the current verison" do
5
+ it "has a version number" do |example|
6
+ print "\n[#{example.description}] "
7
+ expect(Expressir::VERSION).not_to be nil
8
+ end
9
+
10
+ it "displays the current verison" do |example|
11
+ print "\n[#{example.description}] "
6
12
  command = %w(version)
7
13
  output = capture_stdout { Expressir::Cli.start(command) }
8
-
9
14
  expect(output).to include("Version #{Expressir::VERSION}")
10
15
  end
11
16
  end
@@ -4,11 +4,12 @@ require "spec_helper"
4
4
  require "expressir/express/parser"
5
5
  require "expressir/express/cache"
6
6
 
7
- RSpec.describe Expressir::Express::Cache do
8
- TEST_VERSION = "0.0.0"
7
+ TEST_VERSION = "0.0.0".freeze
9
8
 
9
+ RSpec.describe Expressir::Express::Cache do
10
10
  describe ".to_file" do
11
- it "exports an object" do
11
+ it "exports an object" do |example|
12
+ print "\n[#{example.description}] "
12
13
  temp_file = Tempfile.new
13
14
 
14
15
  repository = Expressir::Model::Repository.new
@@ -27,7 +28,8 @@ RSpec.describe Expressir::Express::Cache do
27
28
  end
28
29
 
29
30
  describe ".from_file" do
30
- it "parses a file" do
31
+ it "parses a file" do |example|
32
+ print "\n[#{example.description}] "
31
33
  temp_file = Tempfile.new
32
34
 
33
35
  repository = Expressir::Model::Repository.new
@@ -44,7 +46,8 @@ RSpec.describe Expressir::Express::Cache do
44
46
  end
45
47
  end
46
48
 
47
- it "fails parsing a file from a different Expressir version" do
49
+ it "fails parsing a file from a different Expressir version" do |example|
50
+ print "\n[#{example.description}] "
48
51
  temp_file = Tempfile.new
49
52
 
50
53
  repository = Expressir::Model::Repository.new
@@ -7,7 +7,8 @@ require "expressir/express/hyperlink_formatter"
7
7
 
8
8
  RSpec.describe Expressir::Express::Formatter do
9
9
  describe ".format" do
10
- it "exports an object (single.exp)" do
10
+ it "exports an object (single.exp)" do |example|
11
+ print "\n[#{example.description}] "
11
12
  exp_file = Expressir.root_path.join("spec", "syntax", "single.exp")
12
13
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "single_formatted.exp")
13
14
 
@@ -20,7 +21,8 @@ RSpec.describe Expressir::Express::Formatter do
20
21
  expect(result).to eq(expected_result)
21
22
  end
22
23
 
23
- it "exports an object (multiple.exp)" do
24
+ it "exports an object (multiple.exp)" do |example|
25
+ print "\n[#{example.description}] "
24
26
  exp_file = Expressir.root_path.join("spec", "syntax", "multiple.exp")
25
27
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "multiple_formatted.exp")
26
28
 
@@ -33,7 +35,8 @@ RSpec.describe Expressir::Express::Formatter do
33
35
  expect(result).to eq(expected_result)
34
36
  end
35
37
 
36
- it "exports an object (remark.exp)" do
38
+ it "exports an object (remark.exp)" do |example|
39
+ print "\n[#{example.description}] "
37
40
  exp_file = Expressir.root_path.join("spec", "syntax", "remark.exp")
38
41
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "remark_formatted.exp")
39
42
 
@@ -46,7 +49,8 @@ RSpec.describe Expressir::Express::Formatter do
46
49
  expect(result).to eq(expected_result)
47
50
  end
48
51
 
49
- it "exports an object (syntax.exp)" do
52
+ it "exports an object (syntax.exp)" do |example|
53
+ print "\n[#{example.description}] "
50
54
  exp_file = Expressir.root_path.join("spec", "syntax", "syntax.exp")
51
55
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "syntax_formatted.exp")
52
56
 
@@ -59,7 +63,8 @@ RSpec.describe Expressir::Express::Formatter do
59
63
  expect(result).to eq(expected_result)
60
64
  end
61
65
 
62
- it "exports an object with schema head formatter (syntax.exp)" do
66
+ it "exports an object with schema head formatter (syntax.exp)" do |example|
67
+ print "\n[#{example.description}] "
63
68
  exp_file = Expressir.root_path.join("spec", "syntax", "syntax.exp")
64
69
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "syntax_schema_head_formatted.exp")
65
70
 
@@ -75,7 +80,8 @@ RSpec.describe Expressir::Express::Formatter do
75
80
  expect(result).to eq(expected_result)
76
81
  end
77
82
 
78
- it "exports an object with hyperlink formatter (syntax.exp)" do
83
+ it "exports an object with hyperlink formatter (syntax.exp)" do |example|
84
+ print "\n[#{example.description}] "
79
85
  exp_file = Expressir.root_path.join("spec", "syntax", "syntax.exp")
80
86
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "syntax_hyperlink_formatted.exp")
81
87
 
@@ -91,7 +97,8 @@ RSpec.describe Expressir::Express::Formatter do
91
97
  expect(result).to eq(expected_result)
92
98
  end
93
99
 
94
- it "exports an object with hyperlink formatter (multiple.exp)" do
100
+ it "exports an object with hyperlink formatter (multiple.exp)" do |example|
101
+ print "\n[#{example.description}] "
95
102
  exp_file = Expressir.root_path.join("spec", "syntax", "multiple.exp")
96
103
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "multiple_hyperlink_formatted.exp")
97
104
 
@@ -107,7 +114,8 @@ RSpec.describe Expressir::Express::Formatter do
107
114
  expect(result).to eq(expected_result)
108
115
  end
109
116
 
110
- it "exports an object with schema head and hyperlink formatter (multiple.exp)" do
117
+ it "exports an object with schema head and hyperlink formatter (multiple.exp)" do |example|
118
+ print "\n[#{example.description}] "
111
119
  exp_file = Expressir.root_path.join("spec", "syntax", "multiple.exp")
112
120
  formatted_exp_file = Expressir.root_path.join("spec", "syntax", "multiple_schema_head_hyperlink_formatted.exp")
113
121