ffi-libarchive-binary 0.2.1 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.adoc +12 -0
- data/Rakefile +8 -3
- data/ffi-libarchive-binary.gemspec +2 -0
- data/lib/ffi-libarchive-binary/libarchive_recipe.rb +74 -6
- data/lib/ffi-libarchive-binary/libexpat_recipe.rb +46 -0
- data/lib/ffi-libarchive-binary/version.rb +1 -1
- data/lib/ffi-libarchive-binary/zlib_recipe.rb +89 -0
- data/lib/ffi-libarchive-binary.rb +29 -11
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ff8414f397c99e1b820622ad3c12bcce69e0fdda3a3417fb83ac5aea9eb0c289
|
4
|
+
data.tar.gz: a592d6021f1654e043d44955b00dc14d2fa38fe7faefb2bb062bbbaf5bae641f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9790b9aab3eca5384d0dbca6754445049288f1a1f23e77811dd8625629268df410073f11be5df7a02b2460f98bcfcc7a0dd1deef3beb174242b25e01d970bc8
|
7
|
+
data.tar.gz: 5588bd80d098bfb481786e93bd4453a7eb7930ab3e08df653169104bfd128ba453c00989b91b38e1ef5fdc4dac9cb1347bb19be859ec41a9a75c3cf4559fb387
|
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-
|
23
|
-
"--
|
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
|
-
|
29
|
-
|
30
|
-
|
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
|
@@ -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
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
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
|
-
|
24
|
-
|
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.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi-libarchive
|
@@ -56,7 +56,9 @@ files:
|
|
56
56
|
- ffi-libarchive-binary.gemspec
|
57
57
|
- lib/ffi-libarchive-binary.rb
|
58
58
|
- lib/ffi-libarchive-binary/libarchive_recipe.rb
|
59
|
+
- lib/ffi-libarchive-binary/libexpat_recipe.rb
|
59
60
|
- lib/ffi-libarchive-binary/version.rb
|
61
|
+
- lib/ffi-libarchive-binary/zlib_recipe.rb
|
60
62
|
- updates/config.guess
|
61
63
|
- updates/config.sub
|
62
64
|
homepage: https://github.com/fontist/ffi-libarchive-binary
|
@@ -82,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
84
|
version: '0'
|
83
85
|
requirements: []
|
84
86
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.6.
|
87
|
+
rubygems_version: 2.7.6.3
|
86
88
|
signing_key:
|
87
89
|
specification_version: 4
|
88
90
|
summary: Binaries for ffi-libarchive
|