bake-toolkit 1.0.2 → 1.0.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/bin/createVSProjects +208 -0
- data/lib/bake/version.rb +1 -1
- data/lib/tocxx.rb +8 -2
- data/lib/vs/options.rb +67 -0
- metadata +5 -2
@@ -0,0 +1,208 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
puts "Initializing..."
|
3
|
+
|
4
|
+
$:.unshift(File.dirname(__FILE__)+"/../lib")
|
5
|
+
|
6
|
+
require "securerandom"
|
7
|
+
require "vs/options"
|
8
|
+
|
9
|
+
module Cxxproject
|
10
|
+
|
11
|
+
PATH = 0
|
12
|
+
UUID = 1
|
13
|
+
|
14
|
+
def self.writeProjects(f,projects)
|
15
|
+
projects.each do |k,v|
|
16
|
+
f.puts "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" + k + "\", \"" + v[PATH] + "/" + k + ".vcxproj\", \"{" + v[UUID] + "}\""
|
17
|
+
f.puts "EndProject"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.writeCfg(f,projects)
|
22
|
+
projects.each do |k,v|
|
23
|
+
f.puts " {" + v[UUID] + "}.bake|Win32.ActiveCfg = bake|Win32"
|
24
|
+
f.puts " {" + v[UUID] + "}.bake|Win32.Build.0 = bake|Win32"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
@options = VsOptions.new(ARGV)
|
29
|
+
@options.parse_options
|
30
|
+
|
31
|
+
version = "error"
|
32
|
+
toolset = "error"
|
33
|
+
if @options.version == "2010"
|
34
|
+
version = "11.00"
|
35
|
+
toolset = "v100"
|
36
|
+
elsif @options.version == "2012"
|
37
|
+
version = "12.00"
|
38
|
+
toolset = "v110"
|
39
|
+
end
|
40
|
+
|
41
|
+
slnFilename = @options.roots[0] + "/" + File.basename(@options.roots[0]) + ".sln"
|
42
|
+
appendProjects = (File.exist?(slnFilename) and @options.rewriteSolution)
|
43
|
+
|
44
|
+
puts "Scanning for bake projects...."
|
45
|
+
|
46
|
+
projects = {}
|
47
|
+
@options.roots.each do |r|
|
48
|
+
Dir.glob(r + "/*/Project.meta").each do |m|
|
49
|
+
projects[File.basename(File.dirname(m))] = [File.dirname(m), SecureRandom.uuid.upcase]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
#if not @options.rewriteProjects
|
54
|
+
# projects.delete_if { |k,v| File.exist?(v[PATH]+"/"+k+".vcxproj") or File.exist?(v[PATH]+"/"+k+".vcxproj.filters") }
|
55
|
+
#end
|
56
|
+
|
57
|
+
@options.rewriteSolution = true unless File.exist?(slnFilename)
|
58
|
+
|
59
|
+
slnText = ""
|
60
|
+
if not @options.rewriteSolution
|
61
|
+
pattern = /Project.*[\\\/]([^\\\/]*)\.vcxproj/
|
62
|
+
slnText=File.open(slnFilename).read
|
63
|
+
slnText.gsub!(/\r\n?/, "\n")
|
64
|
+
slnText.each_line do |line|
|
65
|
+
x = line.match(pattern)
|
66
|
+
projects.delete(x[1]) if x
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if projects.length == 0
|
71
|
+
puts "Nothing to do."
|
72
|
+
exit(0)
|
73
|
+
end
|
74
|
+
|
75
|
+
if not @options.rewriteSolution
|
76
|
+
|
77
|
+
puts "Adding new projects to " + slnFilename + "... "
|
78
|
+
File.open(slnFilename, 'w') do |f|
|
79
|
+
|
80
|
+
addedProjects = false
|
81
|
+
slnText.each_line do |line|
|
82
|
+
if line.include?"Project("
|
83
|
+
writeProjects(f,projects)
|
84
|
+
addedProjects = true
|
85
|
+
end
|
86
|
+
|
87
|
+
f.puts line
|
88
|
+
|
89
|
+
if line.include?"postSolution"
|
90
|
+
writeCfg(f,projects)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
else
|
97
|
+
|
98
|
+
puts "Rewriting " + slnFilename + "... "
|
99
|
+
File.open(slnFilename, 'w') do |f|
|
100
|
+
f.puts "Microsoft Visual Studio Solution File, Format Version " + version
|
101
|
+
|
102
|
+
writeProjects(f,projects)
|
103
|
+
|
104
|
+
f.puts "Global"
|
105
|
+
f.puts " GlobalSection(SolutionConfigurationPlatforms) = preSolution"
|
106
|
+
f.puts " bake|Win32 = bake|Win32"
|
107
|
+
f.puts " EndGlobalSection"
|
108
|
+
f.puts " GlobalSection(ProjectConfigurationPlatforms) = postSolution"
|
109
|
+
|
110
|
+
writeCfg(f,projects)
|
111
|
+
|
112
|
+
f.puts " EndGlobalSection"
|
113
|
+
f.puts " GlobalSection(SolutionProperties) = preSolution"
|
114
|
+
f.puts " HideSolutionNode = FALSE"
|
115
|
+
f.puts " EndGlobalSection"
|
116
|
+
f.puts "EndGlobal"
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
projects.each do |k,v|
|
122
|
+
|
123
|
+
filename = v[PATH] + "/" + k + ".vcxproj"
|
124
|
+
puts "Writing " + filename + "... "
|
125
|
+
File.open(filename, 'w') do |f|
|
126
|
+
|
127
|
+
f.puts "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
|
128
|
+
f.puts "<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">"
|
129
|
+
f.puts " <ItemGroup Label=\"ProjectConfigurations\">"
|
130
|
+
f.puts " <ProjectConfiguration Include=\"bake|Win32\">"
|
131
|
+
f.puts " <Configuration>bake</Configuration>"
|
132
|
+
f.puts " <Platform>Win32</Platform>"
|
133
|
+
f.puts " </ProjectConfiguration>"
|
134
|
+
f.puts " </ItemGroup>"
|
135
|
+
f.puts " <PropertyGroup Label=\"Globals\">"
|
136
|
+
f.puts " <Keyword>MakeFileProj</Keyword>"
|
137
|
+
f.puts " <ProjectGuid>{" + v[UUID] + "}</ProjectGuid>"
|
138
|
+
f.puts " </PropertyGroup>"
|
139
|
+
f.puts " <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />"
|
140
|
+
f.puts " <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='bake|Win32'\" Label=\"Configuration\">"
|
141
|
+
f.puts " <ConfigurationType>Makefile</ConfigurationType>"
|
142
|
+
f.puts " <PlatformToolset>" + toolset + "</PlatformToolset>"
|
143
|
+
f.puts " </PropertyGroup>"
|
144
|
+
f.puts " <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />"
|
145
|
+
f.puts " <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='bake|Win32'\">"
|
146
|
+
f.puts " <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />"
|
147
|
+
f.puts " </ImportGroup>"
|
148
|
+
|
149
|
+
f.puts " <ItemGroup>"
|
150
|
+
Dir.chdir(v[PATH]) do
|
151
|
+
files = Dir.glob("**/*")
|
152
|
+
files.each do |item|
|
153
|
+
if (item[0..5] != ".bake") and not File.directory?(item)
|
154
|
+
f.puts " <None Include=\"" + item + "\" />"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
f.puts " </ItemGroup>"
|
159
|
+
|
160
|
+
f.puts " <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />"
|
161
|
+
f.puts "</Project>"
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
filename = filename + ".filters"
|
166
|
+
puts "Writing " + filename + "... "
|
167
|
+
File.open(filename, 'w') do |f|
|
168
|
+
|
169
|
+
f.puts "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
|
170
|
+
f.puts "<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">"
|
171
|
+
|
172
|
+
fileList = []
|
173
|
+
f.puts " <ItemGroup>"
|
174
|
+
Dir.chdir(v[PATH]) do
|
175
|
+
files = Dir.glob("**/*")
|
176
|
+
files.each do |item|
|
177
|
+
if (item[0..5] != ".bake")
|
178
|
+
if (File.directory? item)
|
179
|
+
f.puts " <Filter Include=\"" + item.gsub(/\//,"\\") + "\" />"
|
180
|
+
else
|
181
|
+
fileList << item
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
f.puts " </ItemGroup>"
|
187
|
+
|
188
|
+
f.puts " <ItemGroup>"
|
189
|
+
fileList.each do |i|
|
190
|
+
if File.dirname(i) != "."
|
191
|
+
f.puts " <None Include=\"" + i + "\">"
|
192
|
+
f.puts " <Filter>" + File.dirname(i).gsub(/\//,"\\") + "</Filter>"
|
193
|
+
f.puts " </None>"
|
194
|
+
else
|
195
|
+
f.puts " <None Include=\"" + i + "\" />"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
f.puts " </ItemGroup>"
|
199
|
+
|
200
|
+
f.puts "</Project>"
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
puts "Finished."
|
207
|
+
|
208
|
+
end
|
data/lib/bake/version.rb
CHANGED
data/lib/tocxx.rb
CHANGED
@@ -671,13 +671,19 @@ module Cxxproject
|
|
671
671
|
if not File.exists?(@startupFilename)
|
672
672
|
Dir.chdir(startBB.project_dir) do
|
673
673
|
theFile = Dir.glob("**/#{@startupFilename}")
|
674
|
+
theFile.map! {|tf| startBB.project_dir + "/" + tf}
|
674
675
|
end
|
675
676
|
if theFile.length == 0
|
676
677
|
Printer.printError "Error: #{@startupFilename} not found in project #{@options.project}"
|
677
678
|
ExitHelper.exit(1)
|
678
679
|
end
|
679
680
|
else
|
680
|
-
|
681
|
+
if File.is_absolute?(@startupFilename)
|
682
|
+
theFile << @startupFilename
|
683
|
+
else
|
684
|
+
theFile << startBB.project_dir + "/" + @startupFilename
|
685
|
+
end
|
686
|
+
|
681
687
|
end
|
682
688
|
|
683
689
|
exclude_files = []
|
@@ -692,7 +698,7 @@ module Cxxproject
|
|
692
698
|
|
693
699
|
source_files = c.sources.dup
|
694
700
|
c.source_patterns.each do |p|
|
695
|
-
Dir.glob(p).each {|f| source_files << f}
|
701
|
+
Dir.glob(p).each {|f| source_files << (startBB.project_dir + "/" + f)}
|
696
702
|
end
|
697
703
|
|
698
704
|
theFile.delete_if { |f| source_files.all? {|e| e!=f} }
|
data/lib/vs/options.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require "option/parser"
|
2
|
+
|
3
|
+
module Cxxproject
|
4
|
+
|
5
|
+
class VsOptions < Parser
|
6
|
+
attr_accessor :version, :roots, :rewriteSolution
|
7
|
+
|
8
|
+
def initialize(argv)
|
9
|
+
super(argv)
|
10
|
+
|
11
|
+
@version = "2012"
|
12
|
+
@rewriteSolution = false
|
13
|
+
@roots = []
|
14
|
+
|
15
|
+
add_option(Option.new("--version",true) { |x| set_version(x) })
|
16
|
+
add_option(Option.new("--rewrite_solution",false) { set_rewrite_solution })
|
17
|
+
add_option(Option.new("-w",true) { |x| set_root(x) })
|
18
|
+
add_option(Option.new("-h",false) { usage; ExitHelper.exit(0) })
|
19
|
+
end
|
20
|
+
|
21
|
+
def usage
|
22
|
+
puts "\nUsage: createVSProjects [options]"
|
23
|
+
puts " -w <root> Add a workspace root. Default is current directory."
|
24
|
+
puts " This Options can be used at multiple times."
|
25
|
+
puts " Solution files will be created in the first root directory."
|
26
|
+
puts " --version <year> Visual Studio version. Currently supported: 2010 and 2012 (default)."
|
27
|
+
puts " --rewrite_solution Rewrites existing solution files instead of appending new projects."
|
28
|
+
puts " -h Print this help."
|
29
|
+
end
|
30
|
+
|
31
|
+
def parse_options()
|
32
|
+
parse_internal(false)
|
33
|
+
@roots << Dir.pwd if @roots.length == 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_valid_dir(dir)
|
37
|
+
if not File.exists?(dir)
|
38
|
+
puts "Error: Directory #{dir} does not exist"
|
39
|
+
ExitHelper.exit(1)
|
40
|
+
end
|
41
|
+
if not File.directory?(dir)
|
42
|
+
puts "Error: #{dir} is not a directory"
|
43
|
+
ExitHelper.exit(1)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_version(v)
|
48
|
+
if v != "2010" and v != "2012"
|
49
|
+
puts "Error: version mut be '2010' or '2012'"
|
50
|
+
end
|
51
|
+
ExitHelper.exit(1)
|
52
|
+
@version = v
|
53
|
+
end
|
54
|
+
|
55
|
+
def set_rewrite_solution
|
56
|
+
@rewriteSolution = true
|
57
|
+
end
|
58
|
+
|
59
|
+
def set_root(dir)
|
60
|
+
check_valid_dir(dir)
|
61
|
+
r = File.expand_path(dir.gsub(/[\\]/,'/'))
|
62
|
+
@roots << r if not @roots.include?r
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: bake-toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Alexander Schaal
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2013-01-04 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: cxxproject
|
@@ -50,6 +50,7 @@ email: alexander.schaal@esrlabs.com
|
|
50
50
|
executables:
|
51
51
|
- bake
|
52
52
|
- bakery
|
53
|
+
- createVSProjects
|
53
54
|
extensions: []
|
54
55
|
|
55
56
|
extra_rdoc_files: []
|
@@ -73,10 +74,12 @@ files:
|
|
73
74
|
- lib/bakery/options.rb
|
74
75
|
- lib/option/parser.rb
|
75
76
|
- lib/tocxx.rb
|
77
|
+
- lib/vs/options.rb
|
76
78
|
- Rakefile.rb
|
77
79
|
- license.txt
|
78
80
|
- bin/bake
|
79
81
|
- bin/bakery
|
82
|
+
- bin/createVSProjects
|
80
83
|
homepage: http://www.esrlabs.com
|
81
84
|
licenses: []
|
82
85
|
|