ffi-compiler2 2.2.2 → 2.3.0

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: 7298668a9fdd9774299a0e8f7db5f707a5ddfe07dec06fa4386a01bcee7db5a5
4
- data.tar.gz: ce654d24c586edaa2dc571d7a71548bd15a64576367ae8b0e0a97df44e29454f
3
+ metadata.gz: 2c39f8a30b5d7c8773de4df502f0dd5224979e2a6371f5e7eae81df1d2e83c60
4
+ data.tar.gz: f873026f6d59717dfeee11bde7de662a17ccdf66b5f1ad62a608aa3073acaadd
5
5
  SHA512:
6
- metadata.gz: bee061257b683286b3caea10927543ca3d554500facb5f6465710652c23dd0ebbc287ac0e4abed006a6cdc27b5c3eeb1645cda97e325468316d508b89bf6f360
7
- data.tar.gz: 98550ca8ca4c4ba8bcb8ccc7b979b8365143037d87169f7ca821d74fe4a61c45d2a969ef21f9d1e92da59e3ffcb8302872b25c657e351224c88860ac0a4eafad
6
+ metadata.gz: a6db63080494ace5f42104d55e273c9e1f977d80ea0122873eac11b1e7c13671e01fed458026dbba2602fa3392fdf7706354067b23cf79bda22873b9880a101e
7
+ data.tar.gz: 37ed00181d8e1572f6504295af54e855fbd08e5a4adedf38449dbe12d0943126adc801683c6290072c49102a17b00a803357f6d0c4d38d3d66119a316cc64c38
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.2'
3
+ s.version = '2.3.0'
4
4
  s.author = 'Dāvis'
5
5
  s.email = 'davispuh@gmail.com'
6
6
  s.homepage = 'https://gitlab.com/davispuh/ffi-compiler'
@@ -6,6 +6,7 @@ require 'tmpdir'
6
6
  require 'rbconfig'
7
7
  require_relative 'platform'
8
8
  require_relative 'shell'
9
+ require_relative 'multi_file_task'
9
10
 
10
11
  module FFI
11
12
  module Compiler
@@ -175,8 +176,9 @@ module FFI
175
176
  obj_files.map { |f| File.dirname(f) }.sort.uniq.map { |d| directory d }
176
177
 
177
178
  desc "Build dynamic library"
178
- file lib_name => obj_files do |t|
179
- sh "#{ld} #{so_flags} -o #{shellescape(t.name)} #{shelljoin(t.prerequisites)} #{ld_flags} #{libs}"
179
+ MultiFileTask.define_task(lib_name => src_files + obj_files) do |t|
180
+ objs = t.prerequisites.select { |file| file.end_with?('.o') }
181
+ sh "#{ld} #{so_flags} -o #{shellescape(t.name)} #{shelljoin(objs)} #{ld_flags} #{libs}"
180
182
  end
181
183
  CLEAN.include(lib_name)
182
184
 
@@ -0,0 +1,41 @@
1
+ require 'rake'
2
+
3
+ module FFI
4
+ module Compiler
5
+ class MultiFileTask < Rake::MultiTask
6
+ def needed?
7
+ begin
8
+ @application.options.build_all || out_of_date?(File.mtime(name))
9
+ rescue Errno::ENOENT
10
+ true
11
+ end
12
+ end
13
+
14
+ def timestamp
15
+ begin
16
+ File.mtime(name)
17
+ rescue Errno::ENOENT
18
+ Rake::LATE
19
+ end
20
+ end
21
+
22
+ def invoke_with_call_chain(task_args, invocation_chain)
23
+ return unless needed?
24
+ super
25
+ end
26
+
27
+ private
28
+
29
+ def out_of_date?(timestamp)
30
+ all_prerequisite_tasks.any? do |prereq|
31
+ prereq_task = application[prereq, @scope]
32
+ if prereq_task.instance_of?(Rake::FileTask)
33
+ File.exist?(prereq_task.name) && prereq_task.timestamp > timestamp
34
+ else
35
+ prereq_task.needed?
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  def shelljoin(args)
14
14
  if FFI::Platform::OS == 'windows'
15
- args.reduce { |cmd, arg| cmd + ' "' + arg.gsub('"', '""') + '"' }
15
+ args.reduce { |cmd, arg| cmd + ' ' + shellescape(arg) }
16
16
  else
17
17
  args.shelljoin
18
18
  end
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.2
4
+ version: 2.3.0
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-11 00:00:00.000000000 Z
11
+ date: 2024-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -83,6 +83,7 @@ files:
83
83
  - lib/ffi-compiler/fake_ffi/ffi-compiler/loader.rb
84
84
  - lib/ffi-compiler/fake_ffi/ffi.rb
85
85
  - lib/ffi-compiler/loader.rb
86
+ - lib/ffi-compiler/multi_file_task.rb
86
87
  - lib/ffi-compiler/platform.rb
87
88
  - lib/ffi-compiler/shell.rb
88
89
  - lib/ffi-compiler/task.rb