ffi-compiler2 2.2.2 → 2.3.0

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 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