ryb 0.1.3.1 → 0.2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +36 -47
- data/NOTES +0 -0
- data/README.md +3 -1
- data/TODO +4 -0
- data/bin/ryb +2 -42
- data/lib/ryb.rb +31 -20
- data/lib/ryb/cli.rb +103 -0
- data/lib/ryb/code.rb +7 -0
- data/lib/ryb/configuration.rb +18 -12
- data/lib/ryb/configurations.rb +9 -0
- data/lib/ryb/dependencies.rb +7 -0
- data/lib/ryb/dependency.rb +30 -0
- data/lib/ryb/dsl.rb +280 -0
- data/lib/ryb/environment.rb +9 -0
- data/lib/ryb/flags.rb +17 -0
- data/lib/ryb/gem.rb +58 -0
- data/lib/ryb/helpers/defaults.rb +26 -0
- data/lib/ryb/helpers/pretty_string.rb +47 -0
- data/lib/ryb/languages.rb +13 -0
- data/lib/ryb/name.rb +3 -5
- data/lib/ryb/ninja.rb +257 -200
- data/lib/ryb/paths.rb +7 -0
- data/lib/ryb/preprocessor.rb +10 -0
- data/lib/ryb/product.rb +31 -0
- data/lib/ryb/project.rb +6 -29
- data/lib/ryb/source_file.rb +62 -0
- data/lib/ryb/visual_studio.rb +93 -57
- data/lib/rybfile.rb +30 -10
- data/lib/rybfile/walker.rb +202 -0
- data/lib/yb.rb +4 -0
- data/lib/ybfile.rb +3 -0
- data/ryb.gemspec +18 -13
- data/ryb.sublime-project +18 -17
- metadata +45 -31
- data/lib/ryb/application.rb +0 -24
- data/lib/ryb/architecture.rb +0 -16
- data/lib/ryb/architectures/x86.rb +0 -11
- data/lib/ryb/architectures/x86_64.rb +0 -11
- data/lib/ryb/library.rb +0 -29
- data/lib/ryb/properties.rb +0 -10
- data/lib/ryb/properties/architectures.rb +0 -32
- data/lib/ryb/properties/configurations.rb +0 -29
- data/lib/ryb/properties/defines.rb +0 -31
- data/lib/ryb/properties/dependencies.rb +0 -23
- data/lib/ryb/properties/files.rb +0 -25
- data/lib/ryb/properties/flags.rb +0 -33
- data/lib/ryb/properties/named.rb +0 -17
- data/lib/ryb/properties/paths.rb +0 -37
- data/lib/ryb/properties/suffix.rb +0 -17
- data/lib/ryb/properties/targets.rb +0 -36
- data/lib/ryb/target.rb +0 -16
- data/lib/ryb/targets/linux.rb +0 -11
- data/lib/ryb/targets/macosx.rb +0 -33
- data/lib/ryb/targets/windows.rb +0 -13
- data/lib/ryb/version.rb +0 -11
- data/lib/ryb/windows.rb +0 -40
- data/lib/ryb/xcode.rb +0 -145
data/lib/ryb/properties/files.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Properties
|
3
|
-
module Files
|
4
|
-
module ClassMethods
|
5
|
-
end
|
6
|
-
|
7
|
-
module InstanceMethods
|
8
|
-
def files
|
9
|
-
@files ||= {
|
10
|
-
:source => []
|
11
|
-
}
|
12
|
-
end
|
13
|
-
|
14
|
-
def add_source_files(*files)
|
15
|
-
self.files[:source].push(*((([*files]).flatten).map(&Dir.method(:glob)).flatten))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.included(klass)
|
20
|
-
klass.extend(ClassMethods)
|
21
|
-
klass.include(InstanceMethods)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/ryb/properties/flags.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Properties
|
3
|
-
module Flags
|
4
|
-
module ClassMethods
|
5
|
-
end
|
6
|
-
|
7
|
-
module InstanceMethods
|
8
|
-
def flags
|
9
|
-
@flags ||= {
|
10
|
-
:generate_debug_symbols => false,
|
11
|
-
:optimize => :none
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
def generate_debug_symbols; flags[:generate_debug_symbols]; end
|
16
|
-
def generate_debug_symbols=(do_generate_debug_symbols)
|
17
|
-
flags[:generate_debug_symbols] = do_generate_debug_symbols
|
18
|
-
end
|
19
|
-
|
20
|
-
def optimize; flags[:optimize]; end
|
21
|
-
def optimize=(optimization)
|
22
|
-
raise "..." unless [:none, :size, :speed].include?(optimization)
|
23
|
-
flags[:optimization] = optimization
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.included(klass)
|
28
|
-
klass.extend(ClassMethods)
|
29
|
-
klass.include(InstanceMethods)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/ryb/properties/named.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Properties
|
3
|
-
module Named
|
4
|
-
module ClassMethods
|
5
|
-
end
|
6
|
-
|
7
|
-
module InstanceMethods
|
8
|
-
attr_reader :name
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.included(klass)
|
12
|
-
klass.extend(ClassMethods)
|
13
|
-
klass.include(InstanceMethods)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/ryb/properties/paths.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Properties
|
3
|
-
module Paths
|
4
|
-
module ClassMethods
|
5
|
-
end
|
6
|
-
|
7
|
-
module InstanceMethods
|
8
|
-
def paths
|
9
|
-
@paths ||= {
|
10
|
-
:includes => [],
|
11
|
-
:libraries => [],
|
12
|
-
:binaries => []
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
# TODO(mtwilliams): Refactor.
|
17
|
-
# TODO(mtwilliams): Verify existence of paths.
|
18
|
-
def add_includes_paths(*paths)
|
19
|
-
self.paths[:includes].push(*(([*paths]).flatten))
|
20
|
-
end
|
21
|
-
|
22
|
-
def add_libraries_paths(*paths)
|
23
|
-
self.paths[:libraries].push(*(([*paths]).flatten))
|
24
|
-
end
|
25
|
-
|
26
|
-
def add_binaries_paths(*paths)
|
27
|
-
self.paths[:binaries].push(*(([*paths]).flatten))
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.included(klass)
|
32
|
-
klass.extend(ClassMethods)
|
33
|
-
klass.include(InstanceMethods)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Properties
|
3
|
-
module Suffix
|
4
|
-
module ClassMethods
|
5
|
-
end
|
6
|
-
|
7
|
-
module InstanceMethods
|
8
|
-
attr_accessor :suffix
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.included(klass)
|
12
|
-
klass.extend(ClassMethods)
|
13
|
-
klass.include(InstanceMethods)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'ryb/targets/windows'
|
2
|
-
require 'ryb/targets/macosx'
|
3
|
-
require 'ryb/targets/linux'
|
4
|
-
|
5
|
-
module Ryb
|
6
|
-
module Properties
|
7
|
-
module Targets
|
8
|
-
module ClassMethods
|
9
|
-
end
|
10
|
-
|
11
|
-
module InstanceMethods
|
12
|
-
def targets
|
13
|
-
@targets ||= {}
|
14
|
-
end
|
15
|
-
|
16
|
-
def target(name, &block)
|
17
|
-
target = {:windows => Ryb::Targets::Windows,
|
18
|
-
:macosx => Ryb::Targets::MacOSX,
|
19
|
-
:linux => Ryb::Targets::Linux}[name].new(&block)
|
20
|
-
targets.merge!(name => target) do |_, *targets|
|
21
|
-
targets[0].instance_variable_set(:@version, targets[1].instance_variable_get(:@version))
|
22
|
-
targets[0].suffix ||= targets[1].suffix
|
23
|
-
targets[0].defines.merge!(targets[1].defines)
|
24
|
-
targets[0].flags.merge!(targets[1].flags)
|
25
|
-
targets[0]
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.included(klass)
|
31
|
-
klass.extend(ClassMethods)
|
32
|
-
klass.include(InstanceMethods)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/lib/ryb/target.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'ryb/name'
|
2
|
-
require 'ryb/properties'
|
3
|
-
|
4
|
-
module Ryb
|
5
|
-
class Target
|
6
|
-
include Properties::Named
|
7
|
-
include Properties::Suffix
|
8
|
-
include Properties::Defines
|
9
|
-
include Properties::Flags
|
10
|
-
|
11
|
-
def initialize(name, opts={})
|
12
|
-
@name = Name.new(name, opts[:pretty])
|
13
|
-
yield self if block_given?
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/ryb/targets/linux.rb
DELETED
data/lib/ryb/targets/macosx.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'ryb/target'
|
2
|
-
|
3
|
-
module Ryb
|
4
|
-
module Targets
|
5
|
-
class MacOSX < Target
|
6
|
-
class Version
|
7
|
-
attr_accessor :major
|
8
|
-
attr_accessor :minor
|
9
|
-
|
10
|
-
def initialize(major, minor)
|
11
|
-
@major = major; @minor = minor;
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
"#{major}.#{minor}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
attr_reader :version
|
20
|
-
def version=(version)
|
21
|
-
raise "..." unless version =~ /^(\d+)\.(\d+)$/
|
22
|
-
major, minor = *((/^(\d+)\.(\d+)$/.match(version))[1..2].map(&:to_i))
|
23
|
-
raise "..." if major != 10
|
24
|
-
raise "..." if minor <= 5
|
25
|
-
@version = Version.new(major, minor)
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize(&block)
|
29
|
-
super('macosx', pretty: 'Mac OS X', &block)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/ryb/targets/windows.rb
DELETED
data/lib/ryb/version.rb
DELETED
data/lib/ryb/windows.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
module Ryb
|
2
|
-
module Windows
|
3
|
-
POSSIBLE_SDK_INSTALL_DIRECTORY_REGISTRY_KEYS =
|
4
|
-
["SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows",
|
5
|
-
"SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows"]
|
6
|
-
|
7
|
-
def self.sdk
|
8
|
-
if Ryb.platform == :windows
|
9
|
-
if ENV.key?('WindowsSdkDir')
|
10
|
-
ENV['WindowsSdkDir']
|
11
|
-
else
|
12
|
-
# TODO(mtwilliams): Escape, i.e. .gsub(/\\/,'/').gsub(/\ /,'\\ ')?
|
13
|
-
self.sdks.first
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.sdk?
|
19
|
-
!self.sdk.nil?
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.sdks
|
23
|
-
if Ryb.platform == :windows
|
24
|
-
require 'win32/registry'
|
25
|
-
@sdks ||= begin
|
26
|
-
(POSSIBLE_SDK_INSTALL_DIRECTORY_REGISTRY_KEYS.map do |key|
|
27
|
-
begin
|
28
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(key, ::Win32::Registry::KEY_READ)['CurrentInstallFolder']
|
29
|
-
rescue
|
30
|
-
begin
|
31
|
-
::Win32::Registry::HKEY_LOCAL_MACHINE.open(key, ::Win32::Registry::KEY_READ)['CurrentInstallFolder']
|
32
|
-
rescue
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end).compact
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/ryb/xcode.rb
DELETED
@@ -1,145 +0,0 @@
|
|
1
|
-
require 'ryb/project'
|
2
|
-
|
3
|
-
module Ryb
|
4
|
-
module XCode
|
5
|
-
module Project
|
6
|
-
end
|
7
|
-
|
8
|
-
module Target
|
9
|
-
def self.setup_for_version(xc_project, xc_target, version)
|
10
|
-
xc_target.build_configuration_list.set_setting('SDKROOT', "macosx#{version}")
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.add_file_references(xc_project, xc_target, files)
|
14
|
-
sources = xc_project.main_group['Source'] || xc_project.main_group.new_group('Source')
|
15
|
-
files.each do |file|
|
16
|
-
*dirs, file = Pathname(file).each_filename.to_a
|
17
|
-
group = dirs.reduce(sources) {|group, dir| group[dir] || group.new_group(dir, dir)}
|
18
|
-
ref = group.new_file(file)
|
19
|
-
xc_target.add_file_references([ref])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.generate_project_files_for(project, opts={})
|
25
|
-
# TODO(mtwilliams): Take into account opts[:root].
|
26
|
-
xc_proj = Xcodeproj::Project.new("#{project.name}.xcodeproj")
|
27
|
-
puts "Generating #{xc_proj.path}..."
|
28
|
-
|
29
|
-
xc_products_group = xc_proj.main_group['Products']
|
30
|
-
xc_products_group_for_libs = xc_products_group.new_group('lib', 'lib')
|
31
|
-
xc_products_group_for_bins = xc_products_group.new_group('bin', 'bin')
|
32
|
-
|
33
|
-
project.configurations.each do |name, config|
|
34
|
-
xc_build_configuration = xc_proj.build_configuration_list[config.name]
|
35
|
-
xc_build_configuration ||= xc_proj.build_configuration_list[config.name.capitalize]
|
36
|
-
xc_build_configuration ||= xc_proj.add_build_configuration(config.name, :release)
|
37
|
-
xc_build_configuration.name = (config.name.pretty || config.name.capitalize)
|
38
|
-
defines = project.defines.merge(config.defines)
|
39
|
-
xc_build_configuration.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = defines.map {|name, value| "#{name}=#{value}"}
|
40
|
-
end
|
41
|
-
|
42
|
-
xc_proj.build_configuration_list.set_setting('SYMROOT', opts[:built])
|
43
|
-
xc_proj.build_configuration_list.set_setting('CONFIGURATION_BUILD_DIR', opts[:built])
|
44
|
-
xc_proj.build_configuration_list.sort
|
45
|
-
|
46
|
-
(project.libraries + project.applications).each do |target|
|
47
|
-
puts " Adding '#{target.name.pretty || target.name}' as target..."
|
48
|
-
type = :application if target.is_a? Ryb::Application
|
49
|
-
type = {:static => :static_library, :dynamic => :dynamic_library}[target.linkage] if target.is_a? Ryb::Library
|
50
|
-
name = target.name
|
51
|
-
platform = :osx
|
52
|
-
deployment_target = (target.targets[:macosx].version.to_s if (target.targets[:macosx] and target.targets[:macosx].verison))
|
53
|
-
xc_target = xc_proj.new_target(type, name, platform, deployment_target)
|
54
|
-
|
55
|
-
# case type
|
56
|
-
# when :application
|
57
|
-
# xc_target.product_reference.move(xc_products_group_for_bins)
|
58
|
-
# when :static_library
|
59
|
-
# xc_target.product_reference.move(xc_products_group_for_libs)
|
60
|
-
# when :dynamic_library
|
61
|
-
# xc_target.product_reference.move(xc_products_group_for_bins)
|
62
|
-
# end
|
63
|
-
# xc_target.product_reference.set_source_tree(:group)
|
64
|
-
|
65
|
-
# if target.name.pretty
|
66
|
-
# xc_target.name = target.name.pretty
|
67
|
-
# xc_target.product_name = target.name
|
68
|
-
# end
|
69
|
-
|
70
|
-
if target.targets[:macosx] and target.targets[:macosx].verison
|
71
|
-
Target.setup_for_version(xc_proj, xc_target, target.targets[:macosx].version)
|
72
|
-
end
|
73
|
-
|
74
|
-
# TODO(mtwilliams): Refactor.
|
75
|
-
configs = ((project.configurations.keys | target.configurations.keys).map do |config|
|
76
|
-
project_config = project.configurations[config]
|
77
|
-
if project_config
|
78
|
-
project_config = project_config.dup
|
79
|
-
project_config.instance_variable_set(:@defines, project.defines.merge(project_config.defines))
|
80
|
-
end
|
81
|
-
target_config = target.configurations[config]
|
82
|
-
if target_config
|
83
|
-
target_config = target_config.dup
|
84
|
-
target_config.instance_variable_set(:@defines, target.defines.merge(target_config.defines))
|
85
|
-
end
|
86
|
-
config = if project_config and target_config
|
87
|
-
project_config.instance_variable_set(:@defines, project_config.defines.merge(target_config.defines))
|
88
|
-
project_config
|
89
|
-
else
|
90
|
-
project_config || target_config
|
91
|
-
end
|
92
|
-
|
93
|
-
[config.name, config]
|
94
|
-
end).to_h
|
95
|
-
|
96
|
-
configs.each do |name, config|
|
97
|
-
xc_build_configuration = xc_target.build_configuration_list[config.name]
|
98
|
-
xc_build_configuration ||= xc_target.build_configuration_list[config.name.capitalize]
|
99
|
-
xc_build_configuration ||= xc_target.add_build_configuration(config.name, :release)
|
100
|
-
xc_build_configuration.name = (config.name.pretty || config.name.capitalize)
|
101
|
-
xc_build_configuration.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = config.defines.map {|name, value| "#{name}=#{value}"}
|
102
|
-
end
|
103
|
-
|
104
|
-
expand_path_variables = lambda { |path|
|
105
|
-
path.gsub(/\:built/, opts[:built])
|
106
|
-
}
|
107
|
-
|
108
|
-
includes = target.paths[:includes].map(&expand_path_variables).map(&File.method(:expand_path))
|
109
|
-
xc_target.build_configuration_list.set_setting('USER_HEADER_SEARCH_PATHS', includes)
|
110
|
-
libraries = target.paths[:libraries].map(&expand_path_variables).map(&File.method(:expand_path))
|
111
|
-
libraries.each(&FileUtils.method(:mkdir_p))
|
112
|
-
xc_target.build_configuration_list.set_setting('LIBRARY_SEARCH_PATHS', libraries)
|
113
|
-
binaries = target.paths[:binaries].map(&expand_path_variables).map(&File.method(:expand_path))
|
114
|
-
binaries.each(&FileUtils.method(:mkdir_p))
|
115
|
-
# ???
|
116
|
-
|
117
|
-
xc_target.build_configuration_list.sort
|
118
|
-
|
119
|
-
xc_target.build_configuration_list.set_setting('BUILT_PRODUCTS_DIR', opts[:built])
|
120
|
-
case type
|
121
|
-
when :application
|
122
|
-
xc_target.build_configuration_list.set_setting('CONFIGURATION_BUILD_DIR', File.join(opts[:built], 'bin'))
|
123
|
-
when :static_library
|
124
|
-
xc_target.build_configuration_list.set_setting('CONFIGURATION_BUILD_DIR', File.join(opts[:built], 'lib'))
|
125
|
-
when :dynamic_library
|
126
|
-
xc_target.build_configuration_list.set_setting('CONFIGURATION_BUILD_DIR', File.join(opts[:built], 'bin'))
|
127
|
-
end
|
128
|
-
|
129
|
-
Target.add_file_references(xc_proj, xc_target, target.files[:source])
|
130
|
-
|
131
|
-
target.dependencies.each do |dependency|
|
132
|
-
xc_target_for_dep = [*(xc_proj.targets.objects.select {|target| target.product_name == dependency})].first
|
133
|
-
if xc_target_for_dep
|
134
|
-
xc_target.add_dependency(xc_target_for_dep)
|
135
|
-
xc_target
|
136
|
-
else
|
137
|
-
raise "Not implemented, yet!"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
xc_proj.save
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|