ffi-libarchive-binary 0.3.0-aarch64-linux
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 +7 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.rubocop.yml +17 -0
- data/Gemfile +5 -0
- data/README.adoc +85 -0
- data/Rakefile +74 -0
- data/ext/Makefile +4 -0
- data/ext/extconf.rb +6 -0
- data/ffi-libarchive-binary.gemspec +42 -0
- data/lib/ffi-libarchive-binary/base_recipe.rb +57 -0
- data/lib/ffi-libarchive-binary/libarchive.so +0 -0
- data/lib/ffi-libarchive-binary/libarchive_recipe.rb +160 -0
- data/lib/ffi-libarchive-binary/libexpat_recipe.rb +47 -0
- data/lib/ffi-libarchive-binary/openssl_recipe.rb +57 -0
- data/lib/ffi-libarchive-binary/version.rb +5 -0
- data/lib/ffi-libarchive-binary/xz_recipe.rb +69 -0
- data/lib/ffi-libarchive-binary/zlib_recipe.rb +91 -0
- data/lib/ffi-libarchive-binary.rb +43 -0
- data/toolchain/aarch64-linux-gnu.cmake +25 -0
- metadata +169 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4e37eb17be6b13c4dfb76f195828223b4bf1b6f2d132b20aa4a8142faae3a329
|
4
|
+
data.tar.gz: fb3620596d29592bcb49c343e39cb85a42951451af63c31cbe7dcd3ad2ece51e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9e2ae29929ec1d30b11e06b156dd23b7f686c50cea64dfdfc89e3957bb4db90e9ae174d562b112d559de2ca40688b572a9e20774e7756b51ce85750dad70ab47
|
7
|
+
data.tar.gz: 3e5b834f69fbcca20af5dd75dbf3e710ef1de47bc3279197fe64784d954d02da16d568669195ca63965f4e46876a0f5d7a340591f8f439a3c546da2c5bcc6552
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
inherit_from:
|
2
|
+
- 'https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml'
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.7
|
6
|
+
SuggestExtensions: false
|
7
|
+
Exclude:
|
8
|
+
- 'ffi-libarchive-binary.gemspec'
|
9
|
+
- 'tmp/**/*'
|
10
|
+
- 'pkg/**/*'
|
11
|
+
- 'ports/**/*'
|
12
|
+
|
13
|
+
Gemspec/RequireMFA:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Layout/LineLength:
|
17
|
+
Max: 160
|
data/Gemfile
ADDED
data/README.adoc
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
= Binaries for ffi-libarchive
|
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
|
+
|
6
|
+
== Purpose
|
7
|
+
|
8
|
+
Contains pre-compiled and install-time-compiled binaries for ffi-libarchive.
|
9
|
+
|
10
|
+
|
11
|
+
== Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
[source,ruby]
|
16
|
+
----
|
17
|
+
gem "ffi-libarchive-binary"
|
18
|
+
----
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
[source,sh]
|
23
|
+
----
|
24
|
+
$ bundle install
|
25
|
+
----
|
26
|
+
|
27
|
+
Or install it yourself as:
|
28
|
+
|
29
|
+
[source,sh]
|
30
|
+
----
|
31
|
+
$ gem install ffi-libarchive-binary
|
32
|
+
----
|
33
|
+
|
34
|
+
|
35
|
+
== Usage
|
36
|
+
|
37
|
+
Require the gem and use calls from https://github.com/chef/ffi-libarchive[ffi-libarchive].
|
38
|
+
|
39
|
+
[source,ruby]
|
40
|
+
----
|
41
|
+
require "ffi-libarchive-binary"
|
42
|
+
|
43
|
+
path = File.expand_path('file.pkg', __dir__)
|
44
|
+
flags = Archive::EXTRACT_PERM
|
45
|
+
reader = Archive::Reader.open_filename(path)
|
46
|
+
|
47
|
+
reader.each_entry do |entry|
|
48
|
+
reader.extract(entry, flags.to_i)
|
49
|
+
end
|
50
|
+
|
51
|
+
reader.close
|
52
|
+
----
|
53
|
+
|
54
|
+
== Development
|
55
|
+
|
56
|
+
We are following Sandi Metz's Rules for this gem, you can read the
|
57
|
+
http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers[description of the rules here].
|
58
|
+
All new code should follow these
|
59
|
+
rules. If you make changes in a pre-existing file that violates these rules you
|
60
|
+
should fix the violations as part of your contribution.
|
61
|
+
|
62
|
+
== Contributing
|
63
|
+
|
64
|
+
First, thank you for contributing! We love pull requests from everyone. By
|
65
|
+
participating in this project, you hereby grant https://www.ribose.com[Ribose Inc.] the
|
66
|
+
right to grant or transfer an unlimited number of non exclusive licenses or
|
67
|
+
sub-licenses to third parties, under the copyright covering the contribution
|
68
|
+
to use the contribution by all means.
|
69
|
+
|
70
|
+
Here are a few technical guidelines to follow:
|
71
|
+
|
72
|
+
1. Open an https://github.com/fontist/ffi-libarchive-binary/issues[issue] to discuss a new feature.
|
73
|
+
1. Write tests to support your new feature.
|
74
|
+
1. Make sure the entire test suite passes locally and on CI.
|
75
|
+
1. Open a Pull Request.
|
76
|
+
1. https://github.com/thoughtbot/guides/tree/master/protocol/git#write-a-feature[Squash your commits]
|
77
|
+
after receiving feedback.
|
78
|
+
1. Party!
|
79
|
+
|
80
|
+
|
81
|
+
== License
|
82
|
+
|
83
|
+
This gem is distributed with a BSD 3-Clause license.
|
84
|
+
|
85
|
+
This gem is developed, maintained and funded by https://www.ribose.com/[Ribose Inc.]
|
data/Rakefile
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rbconfig"
|
4
|
+
require "rake/clean"
|
5
|
+
require "rubygems/package_task"
|
6
|
+
require_relative "lib/ffi-libarchive-binary/libarchive_recipe"
|
7
|
+
|
8
|
+
require "rspec/core/rake_task"
|
9
|
+
require "rubocop/rake_task"
|
10
|
+
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
12
|
+
RuboCop::RakeTask.new
|
13
|
+
|
14
|
+
task default: %i[spec rubocop]
|
15
|
+
task spec: :compile
|
16
|
+
|
17
|
+
desc "Build install-compilation gem"
|
18
|
+
task "gem:native:any" do
|
19
|
+
sh "rake platform:any gem"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Define the gem task to build on any platform (compile on install)"
|
23
|
+
task "platform:any" do
|
24
|
+
spec = Gem::Specification::load("ffi-libarchive-binary.gemspec").dup
|
25
|
+
task = Gem::PackageTask.new(spec)
|
26
|
+
task.define
|
27
|
+
end
|
28
|
+
|
29
|
+
platforms = [
|
30
|
+
["x64-mingw32", "x86_64-w64-mingw32"],
|
31
|
+
["x64-mingw-ucrt", "x86_64-w64-mingw32"],
|
32
|
+
["x86_64-linux", "x86_64-linux-gnu"],
|
33
|
+
["aarch64-linux", "aarch64-linux-gnu"],
|
34
|
+
["x86_64-darwin", "x86_64-apple-darwin"],
|
35
|
+
["arm64-darwin", "arm64-apple-darwin"],
|
36
|
+
]
|
37
|
+
|
38
|
+
platforms.each do |platform, host|
|
39
|
+
desc "Build pre-compiled gem for the #{platform} platform"
|
40
|
+
task "gem:native:#{platform}" do
|
41
|
+
sh "rake compile[#{host}] platform:#{platform} gem"
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "Define the gem task to build on the #{platform} platform (binary gem)"
|
45
|
+
task "platform:#{platform}" do
|
46
|
+
spec = Gem::Specification::load("ffi-libarchive-binary.gemspec").dup
|
47
|
+
spec.platform = Gem::Platform.new(platform)
|
48
|
+
spec.files += Dir.glob("lib/ffi-libarchive-binary/*.{dll,so,dylib}")
|
49
|
+
spec.extensions = []
|
50
|
+
spec.dependencies.reject! { |d| d.name == "mini_portile2" }
|
51
|
+
|
52
|
+
task = Gem::PackageTask.new(spec)
|
53
|
+
task.define
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Compile binary for the target host"
|
58
|
+
task :compile, [:host] do |_t, args|
|
59
|
+
recipe = LibarchiveBinary::LibarchiveRecipe.new
|
60
|
+
if args[:host]
|
61
|
+
recipe.host = args[:host]
|
62
|
+
else
|
63
|
+
recipe.host = "x86_64-apple-darwin" if /x86_64-apple-darwin*/.match?(recipe.host)
|
64
|
+
recipe.host = "arm64-apple-darwin" if /arm64-apple-darwin*/.match?(recipe.host)
|
65
|
+
end
|
66
|
+
recipe.cook_if_not
|
67
|
+
end
|
68
|
+
|
69
|
+
CLOBBER.include("pkg")
|
70
|
+
CLEAN.include("ports",
|
71
|
+
"tmp",
|
72
|
+
"lib/ffi-libarchive-binary/libarchive-13.dll",
|
73
|
+
"lib/ffi-libarchive-binary/libarchive.dylib",
|
74
|
+
"lib/ffi-libarchive-binary/libarchive.so")
|
data/ext/Makefile
ADDED
data/ext/extconf.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$: << File.expand_path("lib", __dir__)
|
4
|
+
require "ffi-libarchive-binary/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ffi-libarchive-binary"
|
8
|
+
spec.version = LibarchiveBinary::VERSION
|
9
|
+
spec.authors = ["Ribose Inc."]
|
10
|
+
spec.email = ["open.source@ribose.com"]
|
11
|
+
|
12
|
+
spec.summary = "Binaries for ffi-libarchive"
|
13
|
+
spec.description = "Contains pre-compiled and install-time-compiled binaries for ffi-libarchive" # rubocop:disable Layout/LineLength
|
14
|
+
spec.homepage = "https://github.com/fontist/ffi-libarchive-binary"
|
15
|
+
spec.license = "BSD-3-Clause"
|
16
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
17
|
+
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/fontist/ffi-libarchive-binary"
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/fontist/ffi-libarchive-binary"
|
21
|
+
|
22
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
23
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
24
|
+
f.match(%r{\A(?:test|spec|features|bin|.github)/})
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ["lib"]
|
31
|
+
spec.extensions = ["ext/extconf.rb"]
|
32
|
+
|
33
|
+
spec.add_runtime_dependency "bundler", "~> 2.3", ">= 2.3.22"
|
34
|
+
spec.add_runtime_dependency "ffi", "~> 1.0"
|
35
|
+
spec.add_runtime_dependency "ffi-libarchive", "~> 1.0"
|
36
|
+
spec.add_runtime_dependency "mini_portile2", "~> 2.7"
|
37
|
+
spec.add_runtime_dependency "rake", "~> 13.0"
|
38
|
+
|
39
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
40
|
+
spec.add_development_dependency "rubocop", "~> 1.7"
|
41
|
+
spec.add_development_dependency "rubocop-performance", "~> 1.15"
|
42
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "mini_portile2"
|
4
|
+
|
5
|
+
module LibarchiveBinary
|
6
|
+
FORMATS = {
|
7
|
+
"arm64-apple-darwin" => "Mach-O 64-bit dynamically linked shared library arm64",
|
8
|
+
"x86_64-apple-darwin" => "Mach-O 64-bit dynamically linked shared library x86_64",
|
9
|
+
"aarch64-linux-gnu" => "ELF 64-bit LSB shared object, ARM aarch64",
|
10
|
+
"x86_64-linux-gnu" => "ELF 64-bit LSB shared object, x86-64",
|
11
|
+
"x86_64-w64-mingw32" => "PE32+ executable (DLL) (console) x86-64, for MS Windows",
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
ARCHS = {
|
15
|
+
"arm64-apple-darwin" => "arm64",
|
16
|
+
"x86_64-apple-darwin" => "x86_64",
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
LIBNAMES = {
|
20
|
+
"x86_64-w64-mingw32" => "libarchive.dll",
|
21
|
+
"x86_64-linux-gnu" => "libarchive.so",
|
22
|
+
"aarch64-linux-gnu" => "libarchive.so",
|
23
|
+
"x86_64-apple-darwin" => "libarchive.dylib",
|
24
|
+
"arm64-apple-darwin" => "libarchive.dylib",
|
25
|
+
}.freeze
|
26
|
+
|
27
|
+
class BaseRecipe < MiniPortile
|
28
|
+
def initialize(name, version)
|
29
|
+
super
|
30
|
+
@printed = {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def apple_arch_flag(host)
|
34
|
+
fl = ARCHS[host]
|
35
|
+
fl.nil? ? "" : " -arch #{fl}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def cflags(host)
|
39
|
+
"CFLAGS=-fPIC#{apple_arch_flag(host)}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def ldflags(host)
|
43
|
+
"LDFLAGS=-fPIC#{apple_arch_flag(host)}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def message(text)
|
47
|
+
return super unless text.start_with?("\rDownloading")
|
48
|
+
|
49
|
+
match = text.match(/(\rDownloading .*)\((\s*)(\d+)%\)/)
|
50
|
+
pattern = match ? match[1] : text
|
51
|
+
return if @printed[pattern] && match[3].to_i != 100
|
52
|
+
|
53
|
+
@printed[pattern] = true
|
54
|
+
super
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
Binary file
|
@@ -0,0 +1,160 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "open3"
|
5
|
+
|
6
|
+
require_relative "base_recipe"
|
7
|
+
require_relative "zlib_recipe"
|
8
|
+
require_relative "libexpat_recipe"
|
9
|
+
require_relative "openssl_recipe"
|
10
|
+
require_relative "xz_recipe"
|
11
|
+
|
12
|
+
module LibarchiveBinary
|
13
|
+
class LibarchiveRecipe < MiniPortileCMake
|
14
|
+
ROOT = Pathname.new(File.expand_path("../..", __dir__))
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
super("libarchive", "3.6.1")
|
18
|
+
@printed = {}
|
19
|
+
|
20
|
+
@files << {
|
21
|
+
url: "https://www.libarchive.org/downloads/libarchive-3.6.1.tar.gz",
|
22
|
+
sha256: "c676146577d989189940f1959d9e3980d28513d74eedfbc6b7f15ea45fe54ee2",
|
23
|
+
}
|
24
|
+
|
25
|
+
@target = ROOT.join(@target).to_s
|
26
|
+
|
27
|
+
create_dependencies
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_dependencies
|
31
|
+
@zlib_recipe = ZLibRecipe.new
|
32
|
+
@expat_recipe = LibexpatRecipe.new
|
33
|
+
@openssl_recipe = OpensslRecipe.new
|
34
|
+
@xz_recipe = XZRecipe.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def generator_flags
|
38
|
+
MiniPortile::mingw? ? ["-G", "MSYS Makefiles"] : []
|
39
|
+
end
|
40
|
+
|
41
|
+
def default_flags
|
42
|
+
[
|
43
|
+
"-DENABLE_OPENSSL:BOOL=ON", "-DENABLE_LIBB2:BOOL=OFF", "-DENABLE_LZ4:BOOL=OFF",
|
44
|
+
"-DENABLE_LZO::BOOL=OFF", "-DENABLE_LZMA:BOOL=ON", "-DENABLE_ZSTD:BOOL=OFF",
|
45
|
+
"-DENABLE_ZLIB::BOOL=ON", "-DENABLE_BZip2:BOOL=OFF", "-DENABLE_LIBXML2:BOOL=OFF",
|
46
|
+
"-DENABLE_EXPAT::BOOL=ON", "-DENABLE_TAR:BOOL=OFF", "-DENABLE_ICONV::BOOL=OFF",
|
47
|
+
"-DENABLE_CPIO::BOOL=OFF", "-DENABLE_CAT:BOOL=OFF", "-DENABLE_ACL:BOOL=OFF",
|
48
|
+
"-DENABLE_TEST:BOOL=OFF",
|
49
|
+
"-DCMAKE_INCLUDE_PATH=#{include_path}",
|
50
|
+
"-DCMAKE_LIBRARY_PATH=#{library_path}"
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
def configure_defaults
|
55
|
+
df = generator_flags + default_flags
|
56
|
+
ar = ARCHS[host]
|
57
|
+
if ar.nil?
|
58
|
+
df
|
59
|
+
else
|
60
|
+
df + ["-DCMAKE_OSX_ARCHITECTURES=#{ar}"]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def include_path
|
65
|
+
paths = [@zlib_recipe.path, @expat_recipe.path, @openssl_recipe.path, @xz_recipe.path]
|
66
|
+
paths.map { |k| "#{k}/include" }.join(";")
|
67
|
+
end
|
68
|
+
|
69
|
+
def library_path
|
70
|
+
paths = [@zlib_recipe.path, @expat_recipe.path, @openssl_recipe.path, @xz_recipe.path]
|
71
|
+
paths.map { |k| "#{k}/lib" }.join(";")
|
72
|
+
end
|
73
|
+
|
74
|
+
def activate
|
75
|
+
@zlib_recipe.activate
|
76
|
+
@expat_recipe.activate
|
77
|
+
@openssl_recipe.activate
|
78
|
+
@xz_recipe.activate
|
79
|
+
|
80
|
+
super
|
81
|
+
end
|
82
|
+
|
83
|
+
def cook_if_not
|
84
|
+
cook unless File.exist?(checkpoint)
|
85
|
+
end
|
86
|
+
|
87
|
+
def cook
|
88
|
+
@zlib_recipe.host = @host if @host
|
89
|
+
@zlib_recipe.cook_if_not
|
90
|
+
|
91
|
+
@expat_recipe.host = @host if @host
|
92
|
+
@expat_recipe.cook_if_not
|
93
|
+
|
94
|
+
@openssl_recipe.host = @host if @host
|
95
|
+
@openssl_recipe.cook_if_not
|
96
|
+
|
97
|
+
@xz_recipe.host = @host if @host
|
98
|
+
@xz_recipe.cook_if_not
|
99
|
+
|
100
|
+
super
|
101
|
+
|
102
|
+
FileUtils.touch(checkpoint)
|
103
|
+
end
|
104
|
+
|
105
|
+
def checkpoint
|
106
|
+
File.join(@target, "#{name}-#{version}-#{host}.installed")
|
107
|
+
end
|
108
|
+
|
109
|
+
def install
|
110
|
+
super
|
111
|
+
|
112
|
+
libs = Dir.glob(File.join(port_path, "{lib,bin}", "*"))
|
113
|
+
.grep(/\/(?:lib)?[a-zA-Z0-9\-]+\.(?:so|dylib|dll)$/)
|
114
|
+
FileUtils.cp_r(libs, lib_workpath, verbose: true)
|
115
|
+
if lib_fullpath.nil?
|
116
|
+
message("Cannot guess libarchive library name, skipping format verification")
|
117
|
+
else
|
118
|
+
verify_lib
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def lib_workpath
|
123
|
+
@lib_workpath ||= ROOT.join("lib", "ffi-libarchive-binary")
|
124
|
+
end
|
125
|
+
|
126
|
+
def lib_fullpath
|
127
|
+
lib_filename = LIBNAMES[@host]
|
128
|
+
@lib_fullpath ||= lib_filename.nil? ? nil : File.join(lib_workpath, lib_filename)
|
129
|
+
end
|
130
|
+
|
131
|
+
def verify_lib
|
132
|
+
begin
|
133
|
+
out, = Open3.capture2("file #{lib_fullpath}")
|
134
|
+
rescue StandardError
|
135
|
+
message("failed to call file, library verification skipped.\n")
|
136
|
+
return
|
137
|
+
end
|
138
|
+
unless out.include?(target_format)
|
139
|
+
raise "Invalid file format '#{out.strip}', '#{target_format}' expected"
|
140
|
+
end
|
141
|
+
|
142
|
+
message("#{lib_fullpath} format has been verified (#{target_format})\n")
|
143
|
+
end
|
144
|
+
|
145
|
+
def target_format
|
146
|
+
@target_format ||= FORMATS[@host].nil? ? "skip" : FORMATS[@host]
|
147
|
+
end
|
148
|
+
|
149
|
+
def message(text)
|
150
|
+
return super unless text.start_with?("\rDownloading")
|
151
|
+
|
152
|
+
match = text.match(/(\rDownloading .*)\((\s*)(\d+)%\)/)
|
153
|
+
pattern = match ? match[1] : text
|
154
|
+
return if @printed[pattern] && match[3].to_i != 100
|
155
|
+
|
156
|
+
@printed[pattern] = true
|
157
|
+
super
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_recipe"
|
4
|
+
|
5
|
+
module LibarchiveBinary
|
6
|
+
class LibexpatRecipe < BaseRecipe
|
7
|
+
ROOT = Pathname.new(File.expand_path("../..", __dir__))
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super("libexpat", "2.4.9")
|
11
|
+
|
12
|
+
@files << {
|
13
|
+
url: "https://github.com/libexpat/libexpat/releases/download/R_2_4_9/expat-2.4.9.tar.gz",
|
14
|
+
sha256: "4415710268555b32c4e5ab06a583bea9fec8ff89333b218b70b43d4ca10e38fa",
|
15
|
+
}
|
16
|
+
|
17
|
+
@target = ROOT.join(@target).to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def configure_defaults
|
21
|
+
[
|
22
|
+
"--host=#{@host}", "--disable-shared", "--enable-static",
|
23
|
+
"--without-tests", "--without-examples"
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
def configure
|
28
|
+
cmd = ["env", cflags(host), ldflags(host),
|
29
|
+
"./configure"] + computed_options
|
30
|
+
execute("configure", cmd)
|
31
|
+
end
|
32
|
+
|
33
|
+
def checkpoint
|
34
|
+
File.join(@target, "#{name}-#{version}-#{host}.installed")
|
35
|
+
end
|
36
|
+
|
37
|
+
def cook_if_not
|
38
|
+
cook unless File.exist?(checkpoint)
|
39
|
+
end
|
40
|
+
|
41
|
+
def cook
|
42
|
+
super
|
43
|
+
|
44
|
+
FileUtils.touch(checkpoint)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_recipe"
|
4
|
+
|
5
|
+
module LibarchiveBinary
|
6
|
+
OS_COMPILERS = {
|
7
|
+
"arm64-apple-darwin" => "darwin64-arm64-cc",
|
8
|
+
"x86_64-apple-darwin" => "darwin64-x86_64-cc",
|
9
|
+
"aarch64-linux-gnu" => nil,
|
10
|
+
"x86_64-linux-gnu" => nil,
|
11
|
+
"x86_64-w64-mingw32" => "mingw64",
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
ENV_CMD = ["env", "CFLAGS=-fPIC", "LDFLAGS=-fPIC"].freeze
|
15
|
+
|
16
|
+
class OpensslRecipe < BaseRecipe
|
17
|
+
ROOT = Pathname.new(File.expand_path("../..", __dir__))
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
super("openssl", "1.1.1n")
|
21
|
+
|
22
|
+
@files << {
|
23
|
+
url: "https://www.openssl.org/source/openssl-1.1.1n.tar.gz",
|
24
|
+
sha256: "40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a",
|
25
|
+
}
|
26
|
+
|
27
|
+
@target = ROOT.join(@target).to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure
|
31
|
+
os_compiler = OS_COMPILERS[@host]
|
32
|
+
common_opts = ["--openssldir=#{ROOT}/ports/SSL", "no-tests", "no-shared"] +
|
33
|
+
computed_options.grep(/--prefix/)
|
34
|
+
cmd = if os_compiler.nil?
|
35
|
+
message("OpensslRecipe: guessing with 'config' for '#{@host}'\n")
|
36
|
+
ENV_CMD + ["./config"] + common_opts
|
37
|
+
else
|
38
|
+
ENV_CMD + ["./Configure"] + common_opts + [os_compiler]
|
39
|
+
end
|
40
|
+
execute("configure", cmd)
|
41
|
+
end
|
42
|
+
|
43
|
+
def checkpoint
|
44
|
+
File.join(@target, "#{name}-#{version}-#{host}.installed")
|
45
|
+
end
|
46
|
+
|
47
|
+
def cook_if_not
|
48
|
+
cook unless File.exist?(checkpoint)
|
49
|
+
end
|
50
|
+
|
51
|
+
def cook
|
52
|
+
super
|
53
|
+
|
54
|
+
FileUtils.touch(checkpoint)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_recipe"
|
4
|
+
|
5
|
+
module LibarchiveBinary
|
6
|
+
class XZRecipe < BaseRecipe
|
7
|
+
ROOT = Pathname.new(File.expand_path("../..", __dir__))
|
8
|
+
|
9
|
+
# As of 19.10.2022
|
10
|
+
# versions > 5.2.4 get crazy on MinGW
|
11
|
+
# versions <= 5.2.5 do not support arm64-apple-darwin target
|
12
|
+
# version 5.2.7 could not be linked statically to libarchive
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
if MiniPortile::windows?
|
16
|
+
super("xz", "5.2.4")
|
17
|
+
windows_files
|
18
|
+
else
|
19
|
+
super("xz", "5.2.6")
|
20
|
+
not_windows_files
|
21
|
+
end
|
22
|
+
|
23
|
+
@target = ROOT.join(@target).to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def windows_files
|
27
|
+
@files << {
|
28
|
+
url: "https://tukaani.org/xz/xz-5.2.4.tar.gz",
|
29
|
+
sha256: "b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145",
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def not_windows_files
|
34
|
+
@files << {
|
35
|
+
url: "https://tukaani.org/xz/xz-5.2.6.tar.gz",
|
36
|
+
sha256: "a2105abee17bcd2ebd15ced31b4f5eda6e17efd6b10f921a01cda4a44c91b3a0",
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def configure_defaults
|
41
|
+
[
|
42
|
+
"--host=#{@host}",
|
43
|
+
"--disable-doc", "--disable-xz", "--with-pic",
|
44
|
+
"--disable-xzdec", "--disable-lzmadec", "--disable-lzmainfo",
|
45
|
+
"--disable-scripts", "--disable-shared", "--enable-static"
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
49
|
+
def configure
|
50
|
+
cmd = ["env", cflags(host), ldflags(host),
|
51
|
+
"./configure"] + computed_options
|
52
|
+
execute("configure", cmd)
|
53
|
+
end
|
54
|
+
|
55
|
+
def checkpoint
|
56
|
+
File.join(@target, "#{name}-#{version}-#{host}.installed")
|
57
|
+
end
|
58
|
+
|
59
|
+
def cook_if_not
|
60
|
+
cook unless File.exist?(checkpoint)
|
61
|
+
end
|
62
|
+
|
63
|
+
def cook
|
64
|
+
super
|
65
|
+
|
66
|
+
FileUtils.touch(checkpoint)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require_relative "base_recipe"
|
5
|
+
|
6
|
+
module LibarchiveBinary
|
7
|
+
class ZLibRecipe < BaseRecipe
|
8
|
+
ROOT = Pathname.new(File.expand_path("../..", __dir__))
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super("zlib", "1.2.11")
|
12
|
+
|
13
|
+
@files << {
|
14
|
+
url: "http://zlib.net/fossils/zlib-1.2.11.tar.gz",
|
15
|
+
sha256: "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1",
|
16
|
+
}
|
17
|
+
|
18
|
+
@target = ROOT.join(@target).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure_defaults
|
22
|
+
[
|
23
|
+
"--static",
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
def configure_windows
|
28
|
+
mk = File.read("win32/Makefile.gcc")
|
29
|
+
File.open("win32/Makefile.gcc", "wb") do |f|
|
30
|
+
f.puts "BINARY_PATH = #{path}/bin"
|
31
|
+
f.puts "LIBRARY_PATH = #{path}/lib"
|
32
|
+
f.puts "INCLUDE_PATH = #{path}/include"
|
33
|
+
f.puts "SHARED_MODE = 0"
|
34
|
+
f.puts "LOC = -fPIC"
|
35
|
+
f.puts mk
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def configure
|
40
|
+
if MiniPortile::windows?
|
41
|
+
Dir.chdir(work_path) do
|
42
|
+
configure_windows
|
43
|
+
end
|
44
|
+
else
|
45
|
+
cmd = ["env", cflags(host), ldflags(host),
|
46
|
+
"./configure"] + computed_options
|
47
|
+
execute("configure", cmd)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def configured?
|
52
|
+
if MiniPortile::windows?
|
53
|
+
Dir.chdir(work_path) do
|
54
|
+
!!(File.read("win32/Makefile.gcc") =~ /^BINARY_PATH/)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
super
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def compile
|
62
|
+
if MiniPortile::windows?
|
63
|
+
execute("compile", "make -f win32/Makefile.gcc libz.a")
|
64
|
+
else
|
65
|
+
super
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def install
|
70
|
+
if MiniPortile::windows?
|
71
|
+
execute("install", "make -f win32/Makefile.gcc install")
|
72
|
+
else
|
73
|
+
super
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def checkpoint
|
78
|
+
File.join(@target, "#{name}-#{version}-#{host}.installed")
|
79
|
+
end
|
80
|
+
|
81
|
+
def cook_if_not
|
82
|
+
cook unless File.exist?(checkpoint)
|
83
|
+
end
|
84
|
+
|
85
|
+
def cook
|
86
|
+
super
|
87
|
+
|
88
|
+
FileUtils.touch(checkpoint)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "ffi-libarchive-binary/version"
|
4
|
+
require "pathname"
|
5
|
+
|
6
|
+
module LibarchiveBinary
|
7
|
+
class Error < StandardError; end
|
8
|
+
|
9
|
+
LIBRARY_PATH = Pathname.new(File.join(__dir__, "ffi-libarchive-binary"))
|
10
|
+
|
11
|
+
def self.lib_path
|
12
|
+
LIBRARY_PATH.join(lib_filename).to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.lib_filename
|
16
|
+
if FFI::Platform.windows?
|
17
|
+
"libarchive.dll"
|
18
|
+
elsif FFI::Platform.mac?
|
19
|
+
"libarchive.dylib"
|
20
|
+
else
|
21
|
+
"libarchive.so"
|
22
|
+
end
|
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
|
37
|
+
|
38
|
+
super(*prefixed)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
require "ffi-libarchive"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# CMake Toolchain file for crosscompiling for aarch64-linux-gnu.
|
3
|
+
#
|
4
|
+
set(CMAKE_SYSTEM_NAME Linux)
|
5
|
+
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
6
|
+
|
7
|
+
set(TOOLCHAIN_PREFIX aarch64-linux-gnu-)
|
8
|
+
execute_process(
|
9
|
+
COMMAND which ${TOOLCHAIN_PREFIX}gcc
|
10
|
+
OUTPUT_VARIABLE BINUTILS_PATH
|
11
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
12
|
+
)
|
13
|
+
|
14
|
+
get_filename_component(AARCH64_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY)
|
15
|
+
|
16
|
+
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
|
17
|
+
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
|
18
|
+
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)
|
19
|
+
set(CMAKE_C_COMPILER_WORKS 1)
|
20
|
+
set(CMAKE_CXX_COMPILER_WORKS 1)
|
21
|
+
|
22
|
+
set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH})
|
23
|
+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
24
|
+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
25
|
+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
metadata
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ffi-libarchive-binary
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: aarch64-linux
|
6
|
+
authors:
|
7
|
+
- Ribose Inc.
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-10-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.3'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.3.22
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.3'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.3.22
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ffi
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ffi-libarchive
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '13.0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '13.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rspec
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.7'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.7'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubocop-performance
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.15'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.15'
|
117
|
+
description: Contains pre-compiled and install-time-compiled binaries for ffi-libarchive
|
118
|
+
email:
|
119
|
+
- open.source@ribose.com
|
120
|
+
executables: []
|
121
|
+
extensions: []
|
122
|
+
extra_rdoc_files: []
|
123
|
+
files:
|
124
|
+
- ".gitignore"
|
125
|
+
- ".rspec"
|
126
|
+
- ".rubocop.yml"
|
127
|
+
- Gemfile
|
128
|
+
- README.adoc
|
129
|
+
- Rakefile
|
130
|
+
- ext/Makefile
|
131
|
+
- ext/extconf.rb
|
132
|
+
- ffi-libarchive-binary.gemspec
|
133
|
+
- lib/ffi-libarchive-binary.rb
|
134
|
+
- lib/ffi-libarchive-binary/base_recipe.rb
|
135
|
+
- lib/ffi-libarchive-binary/libarchive.so
|
136
|
+
- lib/ffi-libarchive-binary/libarchive_recipe.rb
|
137
|
+
- lib/ffi-libarchive-binary/libexpat_recipe.rb
|
138
|
+
- lib/ffi-libarchive-binary/openssl_recipe.rb
|
139
|
+
- lib/ffi-libarchive-binary/version.rb
|
140
|
+
- lib/ffi-libarchive-binary/xz_recipe.rb
|
141
|
+
- lib/ffi-libarchive-binary/zlib_recipe.rb
|
142
|
+
- toolchain/aarch64-linux-gnu.cmake
|
143
|
+
homepage: https://github.com/fontist/ffi-libarchive-binary
|
144
|
+
licenses:
|
145
|
+
- BSD-3-Clause
|
146
|
+
metadata:
|
147
|
+
homepage_uri: https://github.com/fontist/ffi-libarchive-binary
|
148
|
+
source_code_uri: https://github.com/fontist/ffi-libarchive-binary
|
149
|
+
changelog_uri: https://github.com/fontist/ffi-libarchive-binary
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 2.7.0
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
requirements: []
|
165
|
+
rubygems_version: 3.1.6
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: Binaries for ffi-libarchive
|
169
|
+
test_files: []
|