ffi-libarchive-binary 0.2.1-x86_64-darwin → 0.2.5-x86_64-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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 388d001b8ad9116bb1647b8af74d03306514628d
4
- data.tar.gz: f1d58449bf8785bbad96a636eb1e15b041153dbe
2
+ SHA256:
3
+ metadata.gz: b5a0ba692e713a1f61212dd855f15252875c518df9bcfc3e252e9c4c9050a3c8
4
+ data.tar.gz: bf6290fab49d24d277d7ef8a777eeb9416f0fbd52dfa18cb025dd0fe38719583
5
5
  SHA512:
6
- metadata.gz: e88658c8be09d9ea85afb748cb124a26fc7cc2ffd3e36fb4ab62f4b28d2fd014e3dd45732d5149db08e09af6252cc18e682ee48e4b549f517d69aba0f20f4247
7
- data.tar.gz: 6e247ff95b8cf2e0edfd147bf763837d9d678286bdb07952765a000b0291cca23a9d91498e085ba8811e33162c7b6667fc7a199142b710e9e6052fa556b335fe
6
+ metadata.gz: f14bacd0a9d7d4649a7b67c427ffaeb383427466a35a58e61d76da072b29e7e8f140216d273b3cce724ba5a4abc9b07635c7e72dd0ba3c15a8c0dd4b154dd136
7
+ data.tar.gz: 9a7c361ca76c1b4c7c42ae5d18eda317533751fd21911fe985f033a541184ec5c983e9508ea3e85366b830140fb29e6b0a1d248fa6df968f7fe0d35379daa68f
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: x86_64-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