File: rgen.gemspec

package info (click to toggle)
ruby-rgen 0.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,428 kB
  • sloc: ruby: 11,344; xml: 1,368; yacc: 72; makefile: 10
file content (133 lines) | stat: -rw-r--r-- 4,881 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# THIS FILE WAS AUTOGENERATED, DO NOT EDIT
abort 'Use the rake task or esr-gem-builder to build the gem' if $0 =~ /gem$/ && $*.first == 'build'
require 'yaml'

Class.new do

def initialize
  @project_path = File.dirname(__FILE__)
  @project_config_path = File.join(File.dirname(__FILE__), 'Project.yaml')
  @project_config = YAML.load(File.read(@project_config_path))
end

def rubies
  (@project_config['rubies'] || ['2.3']).map(&:to_s)
end

def platforms
  @project_config['platforms'] || %w(x86_64-linux x64-mingw32)
end

def exclude_files
  @project_config['exclude_files'] || []
end

def encrypt_sources
  @project_config['encrypt_sources'].nil? ? true : @project_config['encrypt_sources']
end

def extensions
  @project_config['extensions'] ||
      Hash[Dir.glob(File.join(@project_path, 'ext', '*')).select { |f| File.directory?(f) }.map { |f| [File.basename(f).to_sym, f] }]
end

def common_native_binary_paths
  @project_config['common_native_binary_paths']
end

def native_library_artifacts
  @project_config['native_library_artifacts']
end

def common_native_binary_artifacts
  @project_config['common_native_binary_artifacts'] || {}
end

def extensions_target_path
  @project_config['extensions_target_path'] || File.join('lib', 'native')
end

# All extension artifact path list
def native_library_artifact_paths(only_platforms = nil)
  platforms_list = only_platforms.nil? ? platforms : only_platforms
  extensions.keys.flat_map do |name|
    rubies.flat_map do |ruby|
      platforms_list.flat_map do |platform|
        if native_library_artifacts && native_library_artifacts[name.to_s]
          native_library_artifacts[name.to_s].map do |artifact_platform, artifacts|
            next unless platform == artifact_platform.to_s
            artifacts.map { |a| File.join(extensions_target_path, name.to_s, ruby, platform, a) }
          end
        elsif @project_config['native_artifacts'] && @project_config['native_artifacts'][name.to_s] # backward compatibility (e.g. esr-licensing <0.3)
          @project_config['native_artifacts'][name.to_s].map do |artifact|
            next unless platform == platform.to_s
            File.join(extensions_target_path, name.to_s, ruby.to_s, platform, artifact)
          end
        else
          [File.join(extensions_target_path, name.to_s, ruby.to_s, platform, name.to_s + '.so')]
        end
      end
    end
  end
end

def common_native_binary_path(name, platform = nil)
  path = common_native_binary_paths[name] unless common_native_binary_paths.nil?
  path = path[platform || RUBY_PLATFORM] if path.is_a?(Hash)
  path || File.join('native', name)
end

def common_native_binary_artifact_paths(only_platforms = nil)
  common_native_binary_artifacts.flat_map do |name, info|
    info.flat_map do |platform, binaries|
      next if only_platforms && !only_platforms.include?(platform.to_s)
      binaries.map { |binary| File.join(common_native_binary_path(name, platform), binary) }
    end
  end.compact
end

def native_artifact_paths(only_platforms = nil)
  native_library_artifact_paths(only_platforms) + common_native_binary_artifact_paths(only_platforms)
end

def gemspec
  Gem::Specification.new do |s|
    s.name = @project_config['name']
    s.version = @project_config['version']
    s.authors = @project_config['authors']
    s.homepage = @project_config['homepage']
    s.summary = @project_config['summary']
    s.description = @project_config['description']
    s.licenses = @project_config['licenses']
    s.bindir = @project_config['bindir'] || 'bin'
    s.executables = @project_config['executables']
    s.extra_rdoc_files = @project_config['extra_rdoc_files']
    s.rdoc_options.push(*@project_config['rdoc_options']) if @project_config['rdoc_options']
    include_patterns = (@project_config['include_files'] || []) + ["lib/**/*.rb", "Project.yaml"]
    include = include_patterns.reject { |i| i.include?('*') } +
        include_patterns.select { |i| i.include?('*') }.flat_map { |i| Dir.glob(File.join(@project_path, i)) }
    include.push(*native_artifact_paths)
    include << "lib/rubyencoder.lic" if encrypt_sources
    exclude_files_expanded = exclude_files.reject { |i| i.include?('*') }
    exclude = [exclude_files_expanded] +
        exclude_files.select { |i| i.include?('*') }.flat_map { |i| Dir.glob(File.join(@project_path, i)) }
    s.files = include - exclude 
    (@project_config['dependencies'] || {}).flat_map do |_, deps|
      deps.map do |d|
        if d.is_a?(String)
          s.add_dependency(d)
        else
          dep_args = [d['name']]
          dep_args.concat(if d['version'].nil?; []; else d['version'].is_a?(String) ? [d['version']] : d['version'] end)
          if d['development']
            s.add_development_dependency(*dep_args)
          else
            s.add_dependency(*dep_args)
          end
        end
      end
    end
  end
end

end.new.gemspec