gccxml_gem 0.9.3
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.
- data/Rakefile +107 -0
- data/gccxml.rb +60 -0
- metadata +52 -0
data/Rakefile
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
require 'rdoc/task'
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
|
5
|
+
PROJECT_NAME = "gccxml_gem"
|
6
|
+
GCCXML_VERSION = "0.9.3"
|
7
|
+
RUBYFORGE_USERNAME = "jameskilton"
|
8
|
+
|
9
|
+
desc "Build gccxml for this system"
|
10
|
+
task :build_gccxml => [:clean, :unpack, :build, :install]
|
11
|
+
|
12
|
+
def make_cmd
|
13
|
+
RUBY_PLATFORM =~ /mswin/ ? "mingw32-make" : "make"
|
14
|
+
end
|
15
|
+
|
16
|
+
task :unpack do
|
17
|
+
cd "ext" do
|
18
|
+
sh "tar xzvf gccxml.tar.gz"
|
19
|
+
mkdir "gccxml-build"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
task :build do
|
24
|
+
install_path = File.expand_path(File.dirname(__FILE__))
|
25
|
+
|
26
|
+
platform = RUBY_PLATFORM =~ /mswin/ ? "-G \"MinGW Makefiles\"" : ""
|
27
|
+
|
28
|
+
cd "ext/gccxml-build" do
|
29
|
+
sh "cmake -DCMAKE_INSTALL_PREFIX:PATH=#{install_path} -DCMAKE_BUILD_TYPE=None #{platform} ../gccxml"
|
30
|
+
sh make_cmd
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
task :install do
|
35
|
+
cd "ext/gccxml-build" do
|
36
|
+
sh "#{make_cmd} install"
|
37
|
+
end
|
38
|
+
|
39
|
+
sh "chmod a+x bin/*"
|
40
|
+
sh "chmod -R a+rx share/"
|
41
|
+
|
42
|
+
cd "bin" do
|
43
|
+
`cp gccxml_cc1plus.exe gccxml_cc1plus` if File.exists?("gccxml_cc1plus.exe")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Clean up everything"
|
48
|
+
task :clean do
|
49
|
+
rm_rf "ext/gccxml"
|
50
|
+
rm_rf "ext/gccxml-build"
|
51
|
+
rm_rf "bin"
|
52
|
+
rm_rf "share"
|
53
|
+
end
|
54
|
+
|
55
|
+
base_spec = lambda do |s|
|
56
|
+
s.name = PROJECT_NAME
|
57
|
+
s.version = GCCXML_VERSION
|
58
|
+
s.summary = 'Easy install for GCCXML'
|
59
|
+
s.homepage = 'http://rbplusplus.rubyforge.org/'
|
60
|
+
s.rubyforge_project = "rbplusplus"
|
61
|
+
s.author = 'Jason Roelofs'
|
62
|
+
s.email = 'jameskilton@gmail.com'
|
63
|
+
|
64
|
+
s.description = <<-END
|
65
|
+
Because GCCXML is difficult to install on all platforms,
|
66
|
+
this binary gem is provided for ease of installing
|
67
|
+
and using RbGCCXML.
|
68
|
+
END
|
69
|
+
|
70
|
+
s.require_paths = ['.']
|
71
|
+
end
|
72
|
+
|
73
|
+
binary_spec = Gem::Specification.new do |s|
|
74
|
+
base_spec.call(s)
|
75
|
+
s.platform = Gem::Platform::CURRENT
|
76
|
+
|
77
|
+
patterns = [
|
78
|
+
'Rakefile',
|
79
|
+
'*.rb',
|
80
|
+
'bin/*',
|
81
|
+
'share/**/*'
|
82
|
+
]
|
83
|
+
|
84
|
+
s.files = patterns.map {|p| Dir.glob(p) }.flatten
|
85
|
+
end
|
86
|
+
|
87
|
+
pure_ruby_spec = Gem::Specification.new do |s|
|
88
|
+
base_spec.call(s)
|
89
|
+
s.platform = Gem::Platform::RUBY
|
90
|
+
|
91
|
+
patterns = [
|
92
|
+
'Rakefile',
|
93
|
+
'*.rb'
|
94
|
+
]
|
95
|
+
|
96
|
+
s.files = patterns.map {|p| Dir.glob(p) }.flatten
|
97
|
+
end
|
98
|
+
|
99
|
+
desc "Build binary build of the gem"
|
100
|
+
task :binary_gem do
|
101
|
+
Gem::Builder.new(binary_spec).build
|
102
|
+
end
|
103
|
+
|
104
|
+
desc "Build pure ruby build of the gem"
|
105
|
+
task :pure_ruby_gem do
|
106
|
+
Gem::Builder.new(pure_ruby_spec).build
|
107
|
+
end
|
data/gccxml.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
# This class takes care of finding and actually calling the gccxml executable,
|
4
|
+
# setting up certain use flags according to what was specified.
|
5
|
+
class GCCXML
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@exe = find_exe.strip.chomp
|
9
|
+
@includes = []
|
10
|
+
@flags = []
|
11
|
+
end
|
12
|
+
|
13
|
+
# Add an include path for parsing
|
14
|
+
def add_include(path)
|
15
|
+
@includes << path
|
16
|
+
end
|
17
|
+
|
18
|
+
# Add extra CXXFLAGS to the command line
|
19
|
+
def add_cxxflags(flags)
|
20
|
+
@flags << flags
|
21
|
+
end
|
22
|
+
|
23
|
+
# Run gccxml on the header file(s), sending the output to the passed in
|
24
|
+
# file.
|
25
|
+
def parse(header_file, to_file)
|
26
|
+
includes = @includes.flatten.uniq.map {|i| "-I#{i.chomp}"}.join(" ").chomp
|
27
|
+
flags = @flags.flatten.join(" ").chomp
|
28
|
+
cmd = "#{@exe} #{includes} #{flags} #{header_file} -fxml=#{to_file}"
|
29
|
+
raise "Error executing gccxml command line: #{cmd}" unless system(cmd)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def windows?
|
35
|
+
RUBY_PLATFORM =~ /(mswin|cygwin)/
|
36
|
+
end
|
37
|
+
|
38
|
+
def find_exe
|
39
|
+
ext = windows? ? ".exe" : ""
|
40
|
+
binary = "gccxml#{ext}"
|
41
|
+
|
42
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "bin", binary))
|
43
|
+
path.chomp!
|
44
|
+
|
45
|
+
if `#{path} --version 2>&1` =~ /GCC-XML/
|
46
|
+
path
|
47
|
+
elsif `#{binary} --version 2>&1` =~ /GCC-XML/
|
48
|
+
binary
|
49
|
+
else
|
50
|
+
if File.exists?(path)
|
51
|
+
# This is the Rubygems <= 1.1.1 bug of not setting file attributes properly
|
52
|
+
dir = File.expand_path(File.dirname(__FILE__))
|
53
|
+
raise "Unable to execute gccxml. Please run 'sudo chmod -R a+x #{dir}'"
|
54
|
+
else
|
55
|
+
raise "Unable to find gccxml executable locally or on your PATH."
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gccxml_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jason Roelofs
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-16 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! 'Because GCCXML is difficult to install on all platforms,
|
15
|
+
|
16
|
+
this binary gem is provided for ease of installing
|
17
|
+
|
18
|
+
and using RbGCCXML.
|
19
|
+
|
20
|
+
'
|
21
|
+
email: jameskilton@gmail.com
|
22
|
+
executables: []
|
23
|
+
extensions: []
|
24
|
+
extra_rdoc_files: []
|
25
|
+
files:
|
26
|
+
- Rakefile
|
27
|
+
- gccxml.rb
|
28
|
+
homepage: http://rbplusplus.rubyforge.org/
|
29
|
+
licenses: []
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- .
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project: rbplusplus
|
48
|
+
rubygems_version: 1.8.6
|
49
|
+
signing_key:
|
50
|
+
specification_version: 3
|
51
|
+
summary: Easy install for GCCXML
|
52
|
+
test_files: []
|