gear 0.0.1 → 0.0.2
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 +4 -4
- data/gear.gemspec +3 -3
- data/lib/gear.rb +174 -0
- data/lib/gears/apngasm.rb +37 -0
- data/lib/gears/boost.rb +39 -0
- data/lib/gears/swig.rb +43 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97e26787777b28a03c1a1293077cc855cb998e56
|
4
|
+
data.tar.gz: 4fd29a9e4c0948802cc6226dd29256a9dee0406f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06646f36476fcf108f0bb4c8247d90e528b751aec5f4e1c2ee8a0139af3eddf94d38ff394c119c619c7508a92d8c8de46912c19c0ee1e5fbc127e0d9b468af89
|
7
|
+
data.tar.gz: ac8b6b443779b00bfc4fac4d5935122dd1a029ef3ae20a6ad240a575ccb32173b9805b0449c10cb3aa0a07958789fae6c395c1b6847c7d613bb972ab15c298ef
|
data/gear.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'gear'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.2'
|
4
4
|
s.license = 'GPL-3'
|
5
5
|
s.summary = 'modular dependency build system for native extensions'
|
6
6
|
s.description = 'gear provides a modular framework to encapsulate build tasks for native ' +
|
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ['Rei Kagetsuki']
|
9
9
|
s.email = 'zero@genshin.org'
|
10
10
|
s.files = ['gear.gemspec'] +
|
11
|
-
|
12
|
-
s.
|
11
|
+
Dir.glob("lib/**/*.rb")
|
12
|
+
s.require_paths = ['lib']
|
13
13
|
s.homepage = 'https://github.com/Kagetsuki/gear'
|
14
14
|
|
15
15
|
s.add_dependency 'git'
|
data/lib/gear.rb
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'git'
|
2
|
+
|
3
|
+
class Gear
|
4
|
+
#======== attribute list ========#
|
5
|
+
# obtained: tracking flag indicating if sources have been obtained
|
6
|
+
# built: tracking flag indicating if the build has been completed
|
7
|
+
# installed: tracking flag indicating if installation/vendorization completed
|
8
|
+
# checked: tracking flag indicating if an installation check succeeded
|
9
|
+
# headers: an array of headers to check for (in include path)
|
10
|
+
# libs: an array of libs to check for
|
11
|
+
# build_path: the path where the build will occur
|
12
|
+
attr_reader :obtained, :built, :installed, :checked,
|
13
|
+
:headers, :libs, :build_path
|
14
|
+
|
15
|
+
@@install_path = "#{Dir.pwd}/vendor"
|
16
|
+
@@initialized = false
|
17
|
+
|
18
|
+
@headers = []
|
19
|
+
@libs = []
|
20
|
+
|
21
|
+
class << self
|
22
|
+
attr_accessor :gear_name
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.install_path(new_path = nil)
|
26
|
+
@@install_path = new_path unless new_path.nil?
|
27
|
+
@@install_path
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.initialized?
|
31
|
+
@@initialized
|
32
|
+
end
|
33
|
+
|
34
|
+
# define the default name
|
35
|
+
# *OVERRIDE* with the name of the Gear/repo/project
|
36
|
+
@gear_name = 'Gear'
|
37
|
+
|
38
|
+
def name()
|
39
|
+
self.class.gear_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def target(new_target = nil)
|
43
|
+
@@install_path = new_target unless new_target.nil?
|
44
|
+
@@install_path
|
45
|
+
end
|
46
|
+
|
47
|
+
def initialize()
|
48
|
+
@obtained = @built = @installed = @checked = false
|
49
|
+
@build_path = _root_dir() + "/build/#{name()}"
|
50
|
+
_setup_paths()
|
51
|
+
|
52
|
+
@@initialized = true
|
53
|
+
end
|
54
|
+
|
55
|
+
def obtain()
|
56
|
+
STDERR.puts "WARNING: Gear did not override obtain method. No sources were obtained."
|
57
|
+
@obtained = false
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
def build()
|
62
|
+
STDERR.puts "WARNING: Gear did not override build method. Nothing was built."
|
63
|
+
@built = false
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
|
67
|
+
def install()
|
68
|
+
STDERR.puts "WARNING: Gear did not override install method. Nothing has been installed."
|
69
|
+
@installed = false
|
70
|
+
return false
|
71
|
+
end
|
72
|
+
|
73
|
+
def check()
|
74
|
+
STDERR.puts "WARNING: Gear did not override check method. Status is unknown."
|
75
|
+
@checked = false
|
76
|
+
return false
|
77
|
+
end
|
78
|
+
|
79
|
+
def engage()
|
80
|
+
!check && # bail if already installed
|
81
|
+
obtain &
|
82
|
+
build &&
|
83
|
+
install &&
|
84
|
+
check
|
85
|
+
end
|
86
|
+
|
87
|
+
def remove()
|
88
|
+
FileUtils.rm_rf("#{@build_path}")
|
89
|
+
@obtained = false
|
90
|
+
return true
|
91
|
+
end
|
92
|
+
|
93
|
+
def uninstall()
|
94
|
+
# set @installed to false on a succesfully uninstall
|
95
|
+
STDERR.puts "WARNING: Gear did not override uninstall method."
|
96
|
+
return false
|
97
|
+
end
|
98
|
+
|
99
|
+
def disengage()
|
100
|
+
uninstall &&
|
101
|
+
remove
|
102
|
+
end
|
103
|
+
|
104
|
+
#======== obtain helpers ========#
|
105
|
+
def git_obtain(repository, branch)
|
106
|
+
begin
|
107
|
+
if Dir.exist? build_path
|
108
|
+
@git = Git.open(build_path)
|
109
|
+
@git.reset("HEAD", hard: true)
|
110
|
+
@git.clean(force: true, d: true, x:true)
|
111
|
+
else
|
112
|
+
@git = Git.clone(repository, build_path)
|
113
|
+
end
|
114
|
+
rescue e
|
115
|
+
STDERR.puts "Could not obtain repository #{repository}.\n#{e}"
|
116
|
+
@obtained = false
|
117
|
+
return false
|
118
|
+
end
|
119
|
+
|
120
|
+
@git.checkout(branch)
|
121
|
+
@git.pull
|
122
|
+
|
123
|
+
Dir.chdir(@build_path)
|
124
|
+
`git submodule update --init --recursive`
|
125
|
+
|
126
|
+
@obtained = true
|
127
|
+
return true
|
128
|
+
end
|
129
|
+
|
130
|
+
def github_obtain(user, repository, branch = 'master')
|
131
|
+
git_obtain("https://github.com/#{user}/#{repository}.git", branch)
|
132
|
+
end
|
133
|
+
|
134
|
+
def std_config_make(flags = "")
|
135
|
+
Dir.chdir(@build_path)
|
136
|
+
`autoconf` if !File.exist? 'configure'
|
137
|
+
`./confirgure --prefix#{@@install_path}`
|
138
|
+
`make`
|
139
|
+
end
|
140
|
+
|
141
|
+
def std_make_install()
|
142
|
+
`make install`
|
143
|
+
@installed = true
|
144
|
+
return true
|
145
|
+
end
|
146
|
+
|
147
|
+
# Prefixes a command with the gearbox prefixed in the load path
|
148
|
+
def gear_exec(command = "")
|
149
|
+
`LD_LIBRARY_PATH=#{@@install_path}/lib:$LD_LIBRARY_PATH C_INCLUDE_PATH=#{@@install_path}/include:$C_INCLUDE_PATH PATH=#{@@install_path}/bin:$PATH #{command}`
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
def _root_dir()
|
154
|
+
File.expand_path('../..', __FILE__)
|
155
|
+
end
|
156
|
+
|
157
|
+
# sets up vendor/sub directories
|
158
|
+
def _setup_paths()
|
159
|
+
#puts "⚙Preparing directory structure in #{@@install_path}"
|
160
|
+
return if @@initialized
|
161
|
+
FileUtils.mkdir_p("#{@@install_path}/bin")
|
162
|
+
FileUtils.mkdir_p("#{@@install_path}/include")
|
163
|
+
FileUtils.mkdir_p("#{@@install_path}/lib")
|
164
|
+
|
165
|
+
ENV['PATH'] = (ENV['PATH'].nil? ?
|
166
|
+
"#{@@install_path}/bin" : ENV['PATH'] + ":#{@@install_path}/bin")
|
167
|
+
#ENV['C_INCLUDE_PATH'] = ENV['C_INCLUDE_PATH'].to_s + ":#{@@install_path}/include"
|
168
|
+
#ENV['CPLUS_INCLUDE_PATH'] = ENV['CPLUS_INCLUDE_PATH'].to_s + ":#{@@install_path}/include"
|
169
|
+
ENV['CPATH'] = (ENV['CPATH'].nil? ?
|
170
|
+
"#{@@install_path}/include" : ENV['CPATH'] + ":#{@@install_path}/include")
|
171
|
+
ENV['LD_LIBRARY_PATH'] = (ENV['LD_LIBRARY_PATH'].nil? ?
|
172
|
+
"#{@@install_path}/lib" : ENV['LD_LIBRARY_PATH'] + ":#{@@install_path}/lib")
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "gear"
|
2
|
+
|
3
|
+
module Gears
|
4
|
+
class APNGAsm < Gear
|
5
|
+
@gear_name = "APNGAsm"
|
6
|
+
|
7
|
+
def check()
|
8
|
+
gear_exec 'ldconfig -p | grep libapngasm'
|
9
|
+
if $?.exitstatus == 0
|
10
|
+
@checked = true
|
11
|
+
return true
|
12
|
+
end
|
13
|
+
@checked = false
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
def obtain()
|
18
|
+
github_obtain('apngasm', 'apngasm')
|
19
|
+
end
|
20
|
+
|
21
|
+
def build()
|
22
|
+
Dir.chdir(@build_path)
|
23
|
+
FileUtils.mkdir_p('build') # `mkdir build`
|
24
|
+
Dir.chdir('build') # `cd build`
|
25
|
+
gear_exec 'cmake -DCMAKE_INSTALL_PREFIX:PATH=#{@@install_path} ..'
|
26
|
+
gear_exec 'make'
|
27
|
+
@built = true
|
28
|
+
return true
|
29
|
+
end
|
30
|
+
|
31
|
+
def install()
|
32
|
+
std_make_install
|
33
|
+
end
|
34
|
+
|
35
|
+
#TODO uninstall
|
36
|
+
end
|
37
|
+
end
|
data/lib/gears/boost.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require "gear"
|
2
|
+
|
3
|
+
module Gears
|
4
|
+
class Boost < Gear
|
5
|
+
@gear_name = "Boost"
|
6
|
+
|
7
|
+
def check()
|
8
|
+
gear_exec 'ldconfig -p | grep libboost'
|
9
|
+
if $?.exitstatus == 0
|
10
|
+
@checked = true
|
11
|
+
return true
|
12
|
+
end
|
13
|
+
@checked = false
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
def obtain()
|
18
|
+
github_obtain('boostorg', 'boost')
|
19
|
+
end
|
20
|
+
|
21
|
+
def build()
|
22
|
+
Dir.chdir(@build_path)
|
23
|
+
`sh bootstrap.sh --without-libraries=python --prefix=#{@@install_path}`
|
24
|
+
`sh b2 headers`
|
25
|
+
`sh b2`
|
26
|
+
`sh b2 install --prefix=#{@@install_path}`
|
27
|
+
@built = true
|
28
|
+
return true
|
29
|
+
end
|
30
|
+
|
31
|
+
def install()
|
32
|
+
std_make_install
|
33
|
+
end
|
34
|
+
|
35
|
+
def uninstall()
|
36
|
+
#TODO
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/gears/swig.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require "gear"
|
2
|
+
|
3
|
+
module Gears
|
4
|
+
class SWIG < Gear
|
5
|
+
@gear_name = "SWIG"
|
6
|
+
|
7
|
+
def check()
|
8
|
+
gear_exec 'swig -version'
|
9
|
+
if $?.exitstatus == 0
|
10
|
+
@checked = true
|
11
|
+
return true
|
12
|
+
end
|
13
|
+
@checked = false
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
def obtain()
|
18
|
+
github_obtain('swig', 'swig')
|
19
|
+
end
|
20
|
+
|
21
|
+
def build()
|
22
|
+
Dir.chdir(@build_path)
|
23
|
+
`sh autogen.sh`
|
24
|
+
`sh configure --prefix=#{@@install_path}`
|
25
|
+
`make`
|
26
|
+
@built = true
|
27
|
+
return true
|
28
|
+
end
|
29
|
+
|
30
|
+
def install()
|
31
|
+
std_make_install
|
32
|
+
end
|
33
|
+
|
34
|
+
def uninstall()
|
35
|
+
FileUtils.rm_f("#{@@install_path}/bin/swig")
|
36
|
+
FileUtils.rm_f("#{@@install_path}/bin/ccache-swig")
|
37
|
+
FileUtils.rm_rf("#{@@install_path}/share/swig")
|
38
|
+
FileUtils.rm_f("#{@@install_path}/share/man/man1/ccache-swig.1")
|
39
|
+
@installed = false
|
40
|
+
return true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gear
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei Kagetsuki
|
@@ -32,6 +32,10 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- gear.gemspec
|
35
|
+
- lib/gear.rb
|
36
|
+
- lib/gears/apngasm.rb
|
37
|
+
- lib/gears/boost.rb
|
38
|
+
- lib/gears/swig.rb
|
35
39
|
homepage: https://github.com/Kagetsuki/gear
|
36
40
|
licenses:
|
37
41
|
- GPL-3
|