expressir 1.2.4-arm64-darwin → 1.2.5-arm64-darwin
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.
- checksums.yaml +4 -4
- data/.cross_rubies +0 -6
- data/.github/workflows/rake.yml +200 -9
- data/.gitignore +7 -2
- data/.gitmodules +3 -0
- data/.rubocop.yml +13 -4
- data/Rakefile +4 -1
- data/bin/console +0 -1
- data/bin/rspec +3 -3
- data/exe/expressir +4 -2
- data/exe/format +1 -1
- data/exe/format-test +25 -25
- data/exe/generate-parser +16 -13
- data/expressir.gemspec +11 -9
- data/lib/expressir/config.rb +1 -1
- data/lib/expressir/express/2.7/express_parser.bundle +0 -0
- data/lib/expressir/express/3.0/express_parser.bundle +0 -0
- data/lib/expressir/express/3.1/express_parser.bundle +0 -0
- data/lib/expressir/express/parser.rb +2 -2
- data/lib/expressir/express/visitor.rb +7 -5
- data/lib/expressir/model.rb +78 -78
- data/lib/expressir/version.rb +1 -1
- data/rakelib/antlr4-native.rake +63 -0
- data/rakelib/cross-ruby.rake +213 -162
- data/spec/acceptance/version_spec.rb +7 -2
- data/spec/expressir/express/cache_spec.rb +8 -5
- data/spec/expressir/express/formatter_spec.rb +16 -8
- data/spec/expressir/express/parser_spec.rb +17 -11
- data/spec/expressir/model/model_element_spec.rb +154 -146
- metadata +52 -61
- data/demo.rb +0 -18
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
- data/original/examples/employment/eclipse/.project +0 -17
- data/original/examples/employment/eclipse/Export/Employment.png +0 -0
- data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
- data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
- data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
- data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
- data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
- data/original/examples/employment/eclipse/readme.txt +0 -7
- data/original/examples/employment/employment_schema.exp +0 -33
- data/original/examples/employment/employment_schema.rb +0 -232
- data/original/examples/employment/employment_schema.xml +0 -93
- data/original/examples/employment/employment_schema___module.rb +0 -46
- data/original/examples/employment/employment_schema___p28attr.rb +0 -126
- data/original/examples/employment/employment_schema___p28inst.rb +0 -26
- data/original/examples/employment/example_employment_data.xml +0 -1
- data/original/examples/employment/example_employment_data_copy.xml +0 -1
- data/original/examples/employment/example_employment_reader.rb +0 -30
- data/original/examples/employment/example_employment_writer.rb +0 -51
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
- data/original/exp2ruby.rb +0 -525
- data/original/expsm.rb +0 -34
- data/original/mapping_owl.rb +0 -1018
- data/original/mapping_sysml.rb +0 -2281
- data/original/mapping_uml2.rb +0 -599
- data/original/mapping_uml2_eclipse.rb +0 -433
- data/original/reeper.rb +0 -134
- data/spec/expressr_spec.rb +0 -5
data/rakelib/cross-ruby.rake
CHANGED
@@ -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
|
-
|
6
|
-
|
7
|
-
|
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 ||=
|
54
|
+
@platform ||=
|
55
|
+
case host
|
41
56
|
when /\Ax86_64.*mingw32/
|
42
|
-
|
43
|
-
|
44
|
-
|
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 ||=
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
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
|
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-
|
91
|
-
when "x86-linux"
|
92
|
-
"elf32-i386"
|
99
|
+
"elf64-little"
|
93
100
|
when "x86_64-darwin"
|
94
|
-
"Mach-O 64-bit x86-64"
|
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
|
107
|
-
|
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
|
111
|
-
|
112
|
-
|
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
|
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
|
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.
|
150
|
+
raise "CrossRuby.verify_entry: unmatched platform: #{platform}"
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
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
|
-
|
186
|
+
allowed_dlls_mingw
|
159
187
|
end
|
160
188
|
end
|
161
|
-
end
|
162
189
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
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
|
-
|
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
|
175
|
-
|
176
|
-
|
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
|
-
|
179
|
-
|
180
|
-
|
221
|
+
def actual_dlls_linux(dump)
|
222
|
+
dump.scan(/NEEDED\s+(.*)/).map(&:first).uniq
|
223
|
+
end
|
181
224
|
|
182
|
-
|
183
|
-
|
184
|
-
|
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
|
-
|
189
|
-
|
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
|
-
|
192
|
-
|
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
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
219
|
-
|
220
|
-
|
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
|
-
|
228
|
-
|
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
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
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
|
-
|
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
|
-
|
243
|
-
|
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)
|
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 <<~
|
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
|
-
|
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(*[
|
308
|
-
ext.config_options << ENV
|
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?(
|
314
|
-
spec.dependencies.reject! { |dep| dep.name ==
|
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 "
|
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
|
-
|
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
|
|