ffi-libarchive-binary 0.2.1-arm64-darwin → 0.2.5-arm64-darwin

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
- SHA1:
3
- metadata.gz: d3a69fd54a98d854c32d76c0be3aeaf042e11106
4
- data.tar.gz: 82d9536f1c847c47ad643587058e3c9e811e69ed
2
+ SHA256:
3
+ metadata.gz: f386331ebfd86414b754e56d76fcd9bf5fab8b0f5ffeed86d2870087ba2efa81
4
+ data.tar.gz: 7ec54758cbd707e854978ad56da3c16b0839ea754fdaff5022eabb9cb1c82fc6
5
5
  SHA512:
6
- metadata.gz: d3007db39e4d6c8c7753ebdeb4067e5085ed5e7f2b7f87385406eaf603012167d4c576cbf6068ae56b4767129380dbb854f51728a951b4b2a08d428105d61a12
7
- data.tar.gz: c96e26f3e3d3c61e4dbf0d9d038000cdd432aa084ff00a7dd8c60c8788fd18c7a0dd03b6fbb34bde150b93af276ba2fc3a18d10282197faa3094446f3bd7789e
6
+ metadata.gz: 5c9f1c0b1e0ff4f15548cb63f71b177e1ab5d7830618d5cbe6eed2f5f22c9ce86b4c1626e1911e43b2638266bde5f05dea79c98c7d7112471c711eb4403b7891
7
+ data.tar.gz: b3a9a79ab62999bf651e5a7789b1522304ed643adb121bc6c74a49be9b3f8e2e50a77dce41cbdaefebe9b74a47444e4b43a938af270e88cdab98b17032831165
data/README.adoc CHANGED
@@ -1,5 +1,8 @@
1
1
  = Binaries for ffi-libarchive
2
2
 
3
+ image:https://img.shields.io/gem/v/ffi-libarchive-binary.svg["Gem Version", link="https://rubygems.org/gems/ffi-libarchive-binary"]
4
+ image:https://github.com/fontist/ffi-libarchive-binary/actions/workflows/rspec.yml/badge.svg["Build Status", link="https://github.com/fontist/ffi-libarchive-binary/actions/workflows/rspec.yml"]
5
+
3
6
  == Purpose
4
7
 
5
8
  Contains pre-compiled and install-time-compiled binaries for ffi-libarchive.
@@ -49,6 +52,15 @@ reader.close
49
52
  ----
50
53
 
51
54
 
55
+ == Dependencies
56
+
57
+ * zlib
58
+ * Expat
59
+ * OpenSSL (for Linux only)
60
+
61
+ These dependencies are generally present on all systems.
62
+
63
+
52
64
  == Development
53
65
 
54
66
  We are following Sandi Metz's Rules for this gem, you can read the
data/Rakefile CHANGED
@@ -12,9 +12,6 @@ end
12
12
  desc "Define the gem task to build on any platform (compile on install)"
13
13
  task "platform:any" do
14
14
  spec = Gem::Specification::load("ffi-libarchive-binary.gemspec").dup
15
- spec.extensions = ['ext/extconf.rb']
16
- spec.add_runtime_dependency("mini_portile2", "~> 2.0")
17
-
18
15
  task = Gem::PackageTask.new(spec)
19
16
  task.define
20
17
  end
@@ -39,6 +36,8 @@ platforms.each do |platform, host, lib|
39
36
  spec = Gem::Specification::load("ffi-libarchive-binary.gemspec").dup
40
37
  spec.platform = Gem::Platform.new(platform)
41
38
  spec.files += ["lib/ffi-libarchive-binary/#{lib}"]
39
+ spec.extensions = []
40
+ spec.dependencies.reject! { |d| d.name == "mini_portile2" }
42
41
 
43
42
  task = Gem::PackageTask.new(spec)
44
43
  task.define
@@ -52,6 +51,12 @@ task :compile, [:host] do |_t, args|
52
51
  recipe.cook_if_not
53
52
  end
54
53
 
54
+ desc "Recompile binary"
55
+ task :recompile do
56
+ recipe = LibarchiveBinary::LibarchiveRecipe.new
57
+ recipe.cook
58
+ end
59
+
55
60
  CLOBBER.include("pkg")
56
61
  CLEAN.include("ports",
57
62
  "tmp",
@@ -25,6 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.bindir = "exe"
26
26
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
+ spec.extensions = ['ext/extconf.rb']
28
29
 
29
30
  spec.add_runtime_dependency "ffi-libarchive", "~> 1.0"
31
+ spec.add_runtime_dependency "mini_portile2", "~> 2.0"
30
32
  end
@@ -1,6 +1,9 @@
1
1
  require "mini_portile2"
2
2
  require "pathname"
3
3
 
4
+ require_relative "zlib_recipe"
5
+ require_relative "libexpat_recipe"
6
+
4
7
  module LibarchiveBinary
5
8
  class LibarchiveRecipe < MiniPortile
6
9
  ROOT = Pathname.new(File.expand_path("../..", __dir__))
@@ -13,26 +16,91 @@ module LibarchiveBinary
13
16
  sha256: "9015d109ec00bb9ae1a384b172bf2fc1dff41e2c66e5a9eeddf933af9db37f5a"
14
17
  }
15
18
 
19
+ @zlib_recipe = ZLibRecipe.new
20
+ @expat_recipe = LibexpatRecipe.new
21
+
16
22
  @target = ROOT.join(@target).to_s
17
23
  end
18
24
 
19
25
  def configure_defaults
20
26
  [
21
27
  "--host=#{@host}",
22
- "--disable-static",
23
- "--enable-shared",
28
+ "--disable-bsdtar",
29
+ "--disable-bsdcat",
30
+ "--disable-bsdcpio",
31
+ "--without-bz2lib",
32
+ "--without-libb2",
33
+ "--without-iconv",
34
+ "--without-lz4",
35
+ "--without-zstd",
36
+ "--without-lzma",
37
+ "--without-cng",
38
+ "--without-xml2",
39
+ "--with-expat",
40
+ "--with-openssl",
41
+ "--disable-acl",
24
42
  ]
25
43
  end
26
44
 
45
+ def configure
46
+ paths = [@zlib_recipe.path, @expat_recipe.path]
47
+ cflags = paths.map { |k| "-I#{k}/include" }.join(" ")
48
+ cmd = ["env", "CFLAGS=#{cflags}", "./configure"] + computed_options
49
+
50
+ execute("configure", cmd)
51
+
52
+ # drop default libexpat and zlib
53
+ libz = File.join(@zlib_recipe.path, "lib", "libz.a")
54
+ libexpat = File.join(@expat_recipe.path, "lib", "libexpat.a")
55
+
56
+ if LibarchiveBinary::windows?
57
+ # https://stackoverflow.com/a/14112368/902217
58
+ static_link_pref = "-Wl,-Bstatic,"
59
+ libz = libz.prepend(static_link_pref)
60
+ libexpat = libexpat.prepend(static_link_pref)
61
+ end
62
+
63
+ makefile = File.join(work_path, "Makefile")
64
+ replace_in_file(" -lz ", " #{libz} ", makefile)
65
+ replace_in_file(" -lexpat ", " #{libexpat} ", makefile)
66
+ end
67
+
68
+ def replace_in_file(search_str, replace_str, filename)
69
+ puts "Replace \"#{search_str}\" with \"#{replace_str}\" in #{filename}"
70
+
71
+ f = File.open(filename, "r")
72
+ content = f.read
73
+ f.close
74
+
75
+ content.gsub!(search_str, replace_str)
76
+
77
+ File.open(filename, "w") { |f| f << content }
78
+ end
79
+
80
+ def activate
81
+ @zlib_recipe.activate
82
+ @expat_recipe.activate
83
+
84
+ super
85
+ end
86
+
27
87
  def cook_if_not
28
- checkpoint_file = "#{self.name}-#{self.version}-#{self.host}.installed"
29
- checkpoint = File.join(@target, checkpoint_file)
30
- return if File.exist?(checkpoint)
88
+ cook unless File.exist?(checkpoint)
89
+ end
90
+
91
+ def cook
92
+ @zlib_recipe.cook_if_not
93
+ @expat_recipe.cook_if_not
94
+
95
+ super
31
96
 
32
- cook
33
97
  FileUtils.touch(checkpoint)
34
98
  end
35
99
 
100
+ def checkpoint
101
+ File.join(@target, "#{self.name}-#{self.version}-#{self.host}.installed")
102
+ end
103
+
36
104
  def patch
37
105
  super
38
106
 
@@ -0,0 +1,46 @@
1
+ require "mini_portile2"
2
+
3
+ module LibarchiveBinary
4
+ # based on
5
+ class LibexpatRecipe < MiniPortile
6
+ ROOT = Pathname.new(File.expand_path("../..", __dir__))
7
+
8
+ def initialize
9
+ super("libexpat", "2.4.1")
10
+
11
+ @files << {
12
+ url: "https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-2.4.1.tar.gz",
13
+ sha256: "a00ae8a6b96b63a3910ddc1100b1a7ef50dc26dceb65ced18ded31ab392f132b"
14
+ }
15
+
16
+ @target = ROOT.join(@target).to_s
17
+ end
18
+
19
+ def configure_defaults
20
+ [
21
+ "--host=#{@host}",
22
+ "--disable-shared",
23
+ "--enable-static",
24
+ ]
25
+ end
26
+
27
+ def configure
28
+ cmd = ["env", "CFLAGS=-fPIC", "LDFLAGS=-fPIC", "./configure"] + computed_options
29
+ execute("configure", cmd)
30
+ end
31
+
32
+ def checkpoint
33
+ File.join(@target, "#{self.name}-#{self.version}-#{self.host}.installed")
34
+ end
35
+
36
+ def cook_if_not
37
+ cook unless File.exist?(checkpoint)
38
+ end
39
+
40
+ def cook
41
+ super
42
+
43
+ FileUtils.touch(checkpoint)
44
+ end
45
+ end
46
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LibarchiveBinary
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.5"
5
5
  end
@@ -0,0 +1,89 @@
1
+ require "mini_portile2"
2
+ require "pathname"
3
+
4
+ module LibarchiveBinary
5
+ def self.windows?
6
+ RbConfig::CONFIG["target_os"] =~ /mingw32|mswin/
7
+ end
8
+
9
+ # inspired by https://github.com/sparklemotion/nokogiri/blob/35823bd/ext/nokogiri/extconf.rb#L655
10
+ class ZLibRecipe < MiniPortile
11
+ ROOT = Pathname.new(File.expand_path("../..", __dir__))
12
+
13
+ def initialize
14
+ super("zlib", "1.2.11")
15
+
16
+ @files << {
17
+ url: "http://zlib.net/fossils/zlib-1.2.11.tar.gz",
18
+ sha256: "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1"
19
+ }
20
+
21
+ @target = ROOT.join(@target).to_s
22
+ end
23
+
24
+ def configure_defaults
25
+ [
26
+ "--static"
27
+ ]
28
+ end
29
+
30
+ def configure
31
+ if LibarchiveBinary::windows?
32
+ Dir.chdir(work_path) do
33
+ mk = File.read("win32/Makefile.gcc")
34
+ File.open("win32/Makefile.gcc", "wb") do |f|
35
+ f.puts "BINARY_PATH = #{path}/bin"
36
+ f.puts "LIBRARY_PATH = #{path}/lib"
37
+ f.puts "INCLUDE_PATH = #{path}/include"
38
+ f.puts "SHARED_MODE = 0"
39
+ f.puts "LOC = -fPIC"
40
+ f.puts mk
41
+ end
42
+ end
43
+ else
44
+ cmd = ["env", "CFLAGS=-fPIC", "LDFLAGS=-fPIC", "./configure"] + computed_options
45
+ execute("configure", cmd)
46
+ end
47
+ end
48
+
49
+ def configured?
50
+ if LibarchiveBinary::windows?
51
+ Dir.chdir(work_path) do
52
+ !!(File.read("win32/Makefile.gcc") =~ /^BINARY_PATH/)
53
+ end
54
+ else
55
+ super
56
+ end
57
+ end
58
+
59
+ def compile
60
+ if LibarchiveBinary::windows?
61
+ execute("compile", "make -f win32/Makefile.gcc libz.a")
62
+ else
63
+ super
64
+ end
65
+ end
66
+
67
+ def install
68
+ if LibarchiveBinary::windows?
69
+ execute("install", "make -f win32/Makefile.gcc install")
70
+ else
71
+ super
72
+ end
73
+ end
74
+
75
+ def checkpoint
76
+ File.join(@target, "#{self.name}-#{self.version}-#{self.host}.installed")
77
+ end
78
+
79
+ def cook_if_not
80
+ cook unless File.exist?(checkpoint)
81
+ end
82
+
83
+ def cook
84
+ super
85
+
86
+ FileUtils.touch(checkpoint)
87
+ end
88
+ end
89
+ end
@@ -1,25 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "ffi-libarchive-binary/version"
4
- require "ffi"
5
4
  require "pathname"
6
5
 
7
6
  module LibarchiveBinary
8
7
  class Error < StandardError; end
9
8
 
10
- module LibraryPath
11
- LIBRARY_PATH = Pathname.new(File.join(__dir__, "ffi-libarchive-binary"))
9
+ LIBRARY_PATH = Pathname.new(File.join(__dir__, "ffi-libarchive-binary"))
12
10
 
13
- def ffi_lib(*names)
14
- prefixed = names.map do |name|
15
- paths = name.is_a?(Array) ? name : [name]
16
- paths.map { |x| LIBRARY_PATH.join(FFI::map_library_name(x)).to_s }
17
- end
11
+ def self.lib_path
12
+ LIBRARY_PATH.join(lib_filename).to_s
13
+ end
18
14
 
19
- super(*(prefixed + names))
15
+ def self.lib_filename
16
+ if FFI::Platform.windows?
17
+ "libarchive-13.dll"
18
+ elsif FFI::Platform.mac?
19
+ "libarchive.dylib"
20
+ else
21
+ "libarchive.so"
20
22
  end
21
23
  end
24
+ end
25
+
26
+ module Archive
27
+ module C
28
+ def self.ffi_lib(*args)
29
+ prefixed = args.map do |names|
30
+ paths = names.is_a?(Array) ? names : [names]
31
+ if paths.any? { |f| f.include?("libarchive") }
32
+ [LibarchiveBinary.lib_path] + paths
33
+ else
34
+ names
35
+ end
36
+ end
22
37
 
23
- ::FFI::Library.prepend(LibraryPath)
24
- require "ffi-libarchive"
38
+ super(*prefixed)
39
+ end
40
+ end
25
41
  end
42
+
43
+ require "ffi-libarchive"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-libarchive-binary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.5
5
5
  platform: arm64-darwin
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-31 00:00:00.000000000 Z
11
+ date: 2021-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-libarchive
@@ -42,7 +42,9 @@ files:
42
42
  - lib/ffi-libarchive-binary.rb
43
43
  - lib/ffi-libarchive-binary/libarchive.dylib
44
44
  - lib/ffi-libarchive-binary/libarchive_recipe.rb
45
+ - lib/ffi-libarchive-binary/libexpat_recipe.rb
45
46
  - lib/ffi-libarchive-binary/version.rb
47
+ - lib/ffi-libarchive-binary/zlib_recipe.rb
46
48
  - updates/config.guess
47
49
  - updates/config.sub
48
50
  homepage: https://github.com/fontist/ffi-libarchive-binary
@@ -68,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
70
  version: '0'
69
71
  requirements: []
70
72
  rubyforge_project:
71
- rubygems_version: 2.6.14.4
73
+ rubygems_version: 2.7.6.3
72
74
  signing_key:
73
75
  specification_version: 4
74
76
  summary: Binaries for ffi-libarchive