ffi-compiler2 2.2.1 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95124af34cb7788f67975319e8c68be47214ed3d71d9bca813e7290478bd5177
4
- data.tar.gz: 31997daf9b703e2a34204ca25ffb622bdd2a94645b01e4ff624efa361790b84f
3
+ metadata.gz: 7298668a9fdd9774299a0e8f7db5f707a5ddfe07dec06fa4386a01bcee7db5a5
4
+ data.tar.gz: ce654d24c586edaa2dc571d7a71548bd15a64576367ae8b0e0a97df44e29454f
5
5
  SHA512:
6
- metadata.gz: 1086f6129c55b966fd72b0422fc95e6e6ff8daa3532d4400ae285f306f21659440596983fc21b56c25070d277e60736ccc27845abf68cdee139e42b63bc25aee
7
- data.tar.gz: 3732effb97e9773f2634adf07190e9f4293e8d3c7e00cfcd160c57b08c0c403d2f7f3b488ba080714f7ef37a07aa481d45676fd5afbb8c93481959a58892b049
6
+ metadata.gz: bee061257b683286b3caea10927543ca3d554500facb5f6465710652c23dd0ebbc287ac0e4abed006a6cdc27b5c3eeb1645cda97e325468316d508b89bf6f360
7
+ data.tar.gz: 98550ca8ca4c4ba8bcb8ccc7b979b8365143037d87169f7ca821d74fe4a61c45d2a969ef21f9d1e92da59e3ffcb8302872b25c657e351224c88860ac0a4eafad
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
File without changes
data/ffi-compiler.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ffi-compiler2'
3
- s.version = '2.2.1'
3
+ s.version = '2.2.2'
4
4
  s.author = 'Dāvis'
5
5
  s.email = 'davispuh@gmail.com'
6
6
  s.homepage = 'https://gitlab.com/davispuh/ffi-compiler'
@@ -2,10 +2,10 @@ require 'rake'
2
2
  require 'rake/tasklib'
3
3
  require 'rake/clean'
4
4
  require 'ffi'
5
- require 'shellwords'
6
5
  require 'tmpdir'
7
6
  require 'rbconfig'
8
7
  require_relative 'platform'
8
+ require_relative 'shell'
9
9
 
10
10
  module FFI
11
11
  module Compiler
@@ -22,7 +22,7 @@ module FFI
22
22
 
23
23
  def <<(flag)
24
24
  if @raw
25
- @flags += flag.to_s.shellsplit
25
+ @flags += shellsplit(flag.to_s)
26
26
  else
27
27
  @flags << flag
28
28
  end
@@ -33,7 +33,7 @@ module FFI
33
33
  end
34
34
 
35
35
  def to_s
36
- @flags.shelljoin
36
+ shelljoin(@flags)
37
37
  end
38
38
  end
39
39
 
@@ -52,9 +52,9 @@ module FFI
52
52
  @libraries = []
53
53
  @headers = []
54
54
  @functions = []
55
- @cflags = Flags.new(ENV['CFLAGS']&.shellsplit || DEFAULT_CFLAGS.dup)
56
- @cxxflags = Flags.new(ENV['CXXFLAGS']&.shellsplit || DEFAULT_CFLAGS.dup)
57
- @ldflags = Flags.new(ENV['LDFLAGS']&.shellsplit || DEFAULT_LDFLAGS.dup)
55
+ @cflags = Flags.new(shellsplit(ENV['CFLAGS']) || DEFAULT_CFLAGS.dup)
56
+ @cxxflags = Flags.new(shellsplit(ENV['CXXFLAGS']) || DEFAULT_CFLAGS.dup)
57
+ @ldflags = Flags.new(shellsplit(ENV['LDFLAGS']) || DEFAULT_LDFLAGS.dup)
58
58
  @libs = []
59
59
  @platform = Platform.system
60
60
  @exports = []
@@ -119,7 +119,7 @@ module FFI
119
119
  else
120
120
  so_flags << '-shared'
121
121
  end
122
- so_flags = so_flags.shelljoin
122
+ so_flags = shelljoin(so_flags)
123
123
 
124
124
  out_dir = "#{@platform.arch}-#{@platform.os}"
125
125
  if @ext_dir != '.'
@@ -135,10 +135,10 @@ module FFI
135
135
  @defines += @functions.uniq.map { |f| "-DHAVE_#{f.upcase}=1" }
136
136
  @defines += @headers.uniq.map { |h| "-DHAVE_#{h.upcase.sub(/\./, '_')}=1" }
137
137
 
138
- cflags = (@cflags.to_a + pic_flags + iflags + @defines).shelljoin
139
- cxxflags = (@cxxflags.to_a + @cflags.to_a + pic_flags + iflags + @defines).shelljoin
140
- ld_flags = (@library_paths.map { |path| "-L#{path}" } + @ldflags.to_a).shelljoin
141
- libs = (@libraries.map { |l| "-l#{l}" } + @libs).shelljoin
138
+ cflags = shelljoin(@cflags.to_a + pic_flags + iflags + @defines)
139
+ cxxflags = shelljoin(@cxxflags.to_a + @cflags.to_a + pic_flags + iflags + @defines)
140
+ ld_flags = shelljoin(@library_paths.map { |path| "-L#{path}" } + @ldflags.to_a)
141
+ libs = shelljoin(@libraries.map { |l| "-l#{l}" } + @libs)
142
142
 
143
143
  src_files = []
144
144
  obj_files = []
@@ -156,12 +156,12 @@ module FFI
156
156
  obj_file = obj_files[index]
157
157
  if src =~ /\.c$/
158
158
  file obj_file => [ src, File.dirname(obj_file) ] do |t|
159
- sh "#{cc} #{cflags} -o #{t.name} -c #{t.prerequisites[0]}"
159
+ sh "#{cc} #{cflags} -o #{shellescape(t.name)} -c #{shellescape(t.prerequisites[0])}"
160
160
  end
161
161
 
162
162
  else
163
163
  file obj_file => [ src, File.dirname(obj_file) ] do |t|
164
- sh "#{cxx} #{cxxflags} -o #{t.name} -c #{t.prerequisites[0]}"
164
+ sh "#{cxx} #{cxxflags} -o #{shellescape(t.name)} -c #{shellescape(t.prerequisites[0])}"
165
165
  end
166
166
  end
167
167
 
@@ -176,14 +176,14 @@ module FFI
176
176
 
177
177
  desc "Build dynamic library"
178
178
  file lib_name => obj_files do |t|
179
- sh "#{ld} #{so_flags} -o #{t.name} #{t.prerequisites.shelljoin} #{ld_flags} #{libs}"
179
+ sh "#{ld} #{so_flags} -o #{shellescape(t.name)} #{shelljoin(t.prerequisites)} #{ld_flags} #{libs}"
180
180
  end
181
181
  CLEAN.include(lib_name)
182
182
 
183
183
  @exports.each do |e|
184
184
  desc "Export #{e[:rb_file]}"
185
185
  file e[:header] => [ e[:rb_file] ] do |t|
186
- ruby "-I#{File.join(File.dirname(__FILE__), 'fake_ffi')} -I#{File.dirname(t.prerequisites[0])} #{File.join(File.dirname(__FILE__), 'exporter.rb')} #{t.prerequisites[0]} #{t.name}"
186
+ ruby "-I#{File.join(File.dirname(__FILE__), 'fake_ffi')} -I#{File.dirname(t.prerequisites[0])} #{File.join(File.dirname(__FILE__), 'exporter.rb')} #{shellescape(t.prerequisites[0])} #{shellescape(t.name)}"
187
187
  end
188
188
 
189
189
  obj_files.each { |o| file o => [ e[:header] ] }
@@ -247,10 +247,10 @@ module FFI
247
247
  File.open(path, 'w') do |f|
248
248
  f << src
249
249
  end
250
- cflags = opts.shelljoin
250
+ cflags = shelljoin(opts)
251
251
  output = File.join(dir, 'ffi-test')
252
252
  begin
253
- return system "#{cc} #{cflags} -o #{output} -c #{path} > #{path}.log 2>&1"
253
+ return system "#{cc} #{cflags} -o #{shellescape(output)} -c #{shellescape(path)} > #{shellescape(path)}.log 2>&1"
254
254
  rescue
255
255
  return false
256
256
  end
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,24 @@
1
+ require 'shellwords'
2
+ require 'rbconfig'
3
+
4
+ def shellescape(str)
5
+ return str unless str
6
+ if FFI::Platform::OS == 'windows'
7
+ '"' + str.gsub('"', '""') + '"'
8
+ else
9
+ str.shellescape
10
+ end
11
+ end
12
+
13
+ def shelljoin(args)
14
+ if FFI::Platform::OS == 'windows'
15
+ args.reduce { |cmd, arg| cmd + ' "' + arg.gsub('"', '""') + '"' }
16
+ else
17
+ args.shelljoin
18
+ end
19
+ end
20
+
21
+ def shellsplit(str)
22
+ return str unless str
23
+ str.shellsplit
24
+ end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-compiler2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dāvis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-07 00:00:00.000000000 Z
11
+ date: 2024-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -84,6 +84,7 @@ files:
84
84
  - lib/ffi-compiler/fake_ffi/ffi.rb
85
85
  - lib/ffi-compiler/loader.rb
86
86
  - lib/ffi-compiler/platform.rb
87
+ - lib/ffi-compiler/shell.rb
87
88
  - lib/ffi-compiler/task.rb
88
89
  homepage: https://gitlab.com/davispuh/ffi-compiler
89
90
  licenses: