bakery 0.4.0
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/LICENSE.md +23 -0
- data/README.md +0 -0
- data/bin/bake +49 -0
- data/lib/bakery.rb +32 -0
- data/lib/bakery/bakery.rb +72 -0
- data/lib/bakery/cake.rb +33 -0
- data/lib/bakery/detail/dispatcher.rb +31 -0
- data/lib/bakery/detail/global_function.rb +17 -0
- data/lib/bakery/detail/load.rb +17 -0
- data/lib/bakery/detail/search.rb +108 -0
- data/lib/bakery/icing.rb +65 -0
- data/lib/bakery/ingredient.rb +25 -0
- data/lib/bakery/ingredients/c++.ingredient +117 -0
- data/lib/bakery/ingredients/detail/build.ingredient +27 -0
- data/lib/bakery/ingredients/detail/dir.ingredient +39 -0
- data/lib/bakery/ingredients/detail/file.ingredient +63 -0
- data/lib/bakery/ingredients/detail/marker.ingredient +27 -0
- data/lib/bakery/ingredients/detail/project.ingredient +46 -0
- data/lib/bakery/ingredients/detail/script.ingredient +39 -0
- data/lib/bakery/ingredients/ruby.ingredient +32 -0
- data/lib/bakery/ingredients/shell.ingredient +47 -0
- data/lib/bakery/version.rb +15 -0
- data/lib/default.ingredients +24 -0
- metadata +69 -0
data/LICENSE.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
**Boost Software License** - Version 1.0 - August 17th, 2003
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person or organization
|
4
|
+
obtaining a copy of the software and accompanying documentation covered by
|
5
|
+
this license (the "Software") to use, reproduce, display, distribute,
|
6
|
+
execute, and transmit the Software, and to prepare derivative works of the
|
7
|
+
Software, and to permit third-parties to whom the Software is furnished to
|
8
|
+
do so, all subject to the following:
|
9
|
+
|
10
|
+
The copyright notices in the Software and this entire statement, including
|
11
|
+
the above license grant, this restriction and the following disclaimer,
|
12
|
+
must be included in all copies of the Software, in whole or in part, and
|
13
|
+
all derivative works of the Software, unless such copies or derivative
|
14
|
+
works are solely in the form of machine-executable object code generated by
|
15
|
+
a source language processor.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
20
|
+
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
21
|
+
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
22
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
23
|
+
DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
File without changes
|
data/bin/bake
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2013
|
5
|
+
# Nathan Currier
|
6
|
+
#
|
7
|
+
# Use, modification, and distribution are all subject to the
|
8
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
9
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
10
|
+
#
|
11
|
+
# <description>
|
12
|
+
#
|
13
|
+
|
14
|
+
require 'fileutils'
|
15
|
+
|
16
|
+
require 'bakery'
|
17
|
+
|
18
|
+
if ARGV.include?('-v') || ARGV.include?('--version')
|
19
|
+
require 'bakery/version'
|
20
|
+
|
21
|
+
puts "Bakery v#{Bakery::VERSION}"
|
22
|
+
puts 'Copyright (c) 2013'
|
23
|
+
puts 'Nathan Currier'
|
24
|
+
exit 0
|
25
|
+
end
|
26
|
+
|
27
|
+
bake_init = Proc.new do
|
28
|
+
Bakery.addCake
|
29
|
+
|
30
|
+
# use default ingredients if an ingredients file is not provided
|
31
|
+
if File.exists?(dir = File.join(Bakery::ROOT_DIR, '.ingredients'))
|
32
|
+
load dir
|
33
|
+
else
|
34
|
+
use_defaults
|
35
|
+
end
|
36
|
+
|
37
|
+
load File.join(Bakery::ROOT_DIR, '.recipe')
|
38
|
+
end
|
39
|
+
|
40
|
+
if ARGV[0]
|
41
|
+
if !Dir.exists? ARGV[0]
|
42
|
+
FileUtils.mkdir_p ARGV[0]
|
43
|
+
end
|
44
|
+
|
45
|
+
Dir.chdir ARGV[0], &bake_init
|
46
|
+
else
|
47
|
+
bake_init.call
|
48
|
+
end
|
49
|
+
|
data/lib/bakery.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'bakery/bakery'
|
13
|
+
require 'bakery/cake'
|
14
|
+
require 'bakery/detail/global_function'
|
15
|
+
require 'bakery/detail/load'
|
16
|
+
require 'bakery/detail/dispatcher'
|
17
|
+
require 'bakery/detail/search'
|
18
|
+
require 'bakery/icing'
|
19
|
+
require 'bakery/ingredient'
|
20
|
+
|
21
|
+
module Bakery
|
22
|
+
ROOT_DIR = Dir.pwd
|
23
|
+
|
24
|
+
LIB_DIR = File.dirname __FILE__
|
25
|
+
|
26
|
+
INGREDIENTS_DIR = File.join LIB_DIR, 'bakery', 'ingredients'
|
27
|
+
INGREDIENTS_DETAIL_DIR = File.join INGREDIENTS_DIR, 'detail'
|
28
|
+
|
29
|
+
ICING_SEARCH = PathSearch.new [ Dir.home, File.join(Dir.home, '.bakery'), File.join('/', 'etc', 'bakery') ]
|
30
|
+
ICING_SEARCH.defaultExts = [ 'icing' ]
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
@cakes = Array.new
|
14
|
+
@markers = Array.new
|
15
|
+
@defaultIcing = Hash.new
|
16
|
+
@currentCake = nil
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def removeMarkerLayerFromStack path
|
20
|
+
# remove all markers that are in the current directory
|
21
|
+
@markers.select! { |marker|
|
22
|
+
!marker.getPath.start_with? path
|
23
|
+
}
|
24
|
+
|
25
|
+
if @currentCake.root == path
|
26
|
+
@currentCake = @currentCake.parent
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def getLatestMarkerOfType type
|
31
|
+
@markers.reverse_each { |marker|
|
32
|
+
if marker.is_a? type
|
33
|
+
return marker
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def icing
|
41
|
+
@defaultIcing
|
42
|
+
end
|
43
|
+
|
44
|
+
def markers
|
45
|
+
@markers
|
46
|
+
end
|
47
|
+
|
48
|
+
def cakes
|
49
|
+
@cakes
|
50
|
+
end
|
51
|
+
|
52
|
+
def [] symbol
|
53
|
+
if icing = getCake.icing[symbol]
|
54
|
+
icing
|
55
|
+
else
|
56
|
+
@defaultIcing[symbol]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def addCake
|
61
|
+
cake = Cake.new @currentCake
|
62
|
+
|
63
|
+
@cakes.push cake
|
64
|
+
@currentCake = cake
|
65
|
+
end
|
66
|
+
|
67
|
+
def getCake
|
68
|
+
@currentCake
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
data/lib/bakery/cake.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
class Cake
|
14
|
+
def initialize parent
|
15
|
+
@parent = parent
|
16
|
+
@root = Dir.pwd
|
17
|
+
@icing = Hash.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def root
|
21
|
+
@root
|
22
|
+
end
|
23
|
+
|
24
|
+
def icing
|
25
|
+
@icing
|
26
|
+
end
|
27
|
+
|
28
|
+
def parent
|
29
|
+
@parent
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Dispatcher
|
13
|
+
def self.included base
|
14
|
+
base.extend InitializeWithBlock
|
15
|
+
end
|
16
|
+
|
17
|
+
module InitializeWithBlock
|
18
|
+
def new *args, &block
|
19
|
+
obj = self.allocate
|
20
|
+
obj.send :initialize, *args, &block
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def dispatch &block
|
26
|
+
if block
|
27
|
+
self.instance_eval &block
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
class Object
|
13
|
+
def global_function name, &block
|
14
|
+
self.class.send :define_method, name, &block
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
def load_if_exists name
|
13
|
+
if File.exists? name
|
14
|
+
load name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
class PathSearch
|
13
|
+
protected
|
14
|
+
@defaultExts = [ ]
|
15
|
+
@paths = [ ]
|
16
|
+
private
|
17
|
+
def searchAllPaths filename
|
18
|
+
base = File.basename filename
|
19
|
+
paths.each { |dir|
|
20
|
+
if File.exist?(File.join dir, base)
|
21
|
+
return File.join dir, base
|
22
|
+
end
|
23
|
+
}
|
24
|
+
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def searchWithExts filename
|
29
|
+
defaultExts.each { |ext|
|
30
|
+
file = "#{filename}.#{ext}"
|
31
|
+
found = searchAllPaths file
|
32
|
+
if found != nil
|
33
|
+
return found
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
public
|
40
|
+
def search filename
|
41
|
+
if File.exist? filename
|
42
|
+
file = filename
|
43
|
+
end
|
44
|
+
|
45
|
+
if file == nil
|
46
|
+
file = searchAllPaths File.basename(filename)
|
47
|
+
end
|
48
|
+
|
49
|
+
if file == nil
|
50
|
+
file = searchWithExts File.basename(filename, File.extname(filename))
|
51
|
+
end
|
52
|
+
|
53
|
+
if block_given?
|
54
|
+
if file != nil
|
55
|
+
yield file
|
56
|
+
else
|
57
|
+
stderr.puts "[WARNING] #{filename} was not found while searching in #{paths}."
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
file
|
62
|
+
end
|
63
|
+
|
64
|
+
def initialize paths = [ ]
|
65
|
+
@paths = paths
|
66
|
+
end
|
67
|
+
|
68
|
+
def addSearchDirectory dir
|
69
|
+
if File.exist?(dir) && File.directory?(dir) && !@paths.include?(dir)
|
70
|
+
@paths << dir
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
attr_accessor :paths, :defaultExts
|
75
|
+
end
|
76
|
+
|
77
|
+
=begin
|
78
|
+
base_search = File.basename(file, File.extname(file))
|
79
|
+
|
80
|
+
for dir in Bakery::SEARCH_DIRS
|
81
|
+
if defaultExts.empty?
|
82
|
+
if File.exist? base_search
|
83
|
+
return File.join dir, base_search
|
84
|
+
end
|
85
|
+
else
|
86
|
+
for ext in defaultExts
|
87
|
+
check_file = File.join dir, "#{base_search}.#{ext}"
|
88
|
+
if File.exist? check_file
|
89
|
+
return check_file
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
|
98
|
+
def loadIcing name
|
99
|
+
file = search name, 'icing'
|
100
|
+
if file
|
101
|
+
load file
|
102
|
+
else
|
103
|
+
puts "[WARNING] #{name} was not found in Bakery::SEARCH_DIRS: #{Bakery::SEARCH_DIRS}."
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
=end
|
108
|
+
|
data/lib/bakery/icing.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
def name n
|
13
|
+
Bakery.getCake.icing[:name] = n
|
14
|
+
end
|
15
|
+
|
16
|
+
def authors *names
|
17
|
+
if Bakery.getCake.icing[:authors] == nil
|
18
|
+
Bakery.getCake.icing[:authors] = Array.new
|
19
|
+
end
|
20
|
+
|
21
|
+
Bakery.getCake.icing[:authors].concat names
|
22
|
+
end
|
23
|
+
|
24
|
+
alias :author :authors
|
25
|
+
|
26
|
+
def description *desc
|
27
|
+
if Bakery.getCake.icing[:description] == nil
|
28
|
+
Bakery.getCake.icing[:description] = Array.new
|
29
|
+
end
|
30
|
+
|
31
|
+
Bakery.getCake.icing[:description].concat desc
|
32
|
+
end
|
33
|
+
|
34
|
+
def summary *sum
|
35
|
+
if Bakery.getCake.icing[:summary] == nil
|
36
|
+
Bakery.getCake.icing[:summary] = Array.new
|
37
|
+
end
|
38
|
+
|
39
|
+
Bakery.getCake.icing[:summary].concat sum
|
40
|
+
end
|
41
|
+
|
42
|
+
def copyright *lines
|
43
|
+
Bakery.getCake.icing[:copyright] = lines
|
44
|
+
end
|
45
|
+
|
46
|
+
def defaultAuthors *names
|
47
|
+
Bakery.icing[:authors] = names
|
48
|
+
end
|
49
|
+
|
50
|
+
alias :defaultAuthor :defaultAuthors
|
51
|
+
|
52
|
+
def defaultCopyright *lines
|
53
|
+
Bakery.icing[:copyright] = lines
|
54
|
+
end
|
55
|
+
|
56
|
+
def defaultDescription *desc
|
57
|
+
Bakery.icing[:description] = desc
|
58
|
+
end
|
59
|
+
|
60
|
+
def loadIcing filename
|
61
|
+
Bakery::ICING_SEARCH.search(filename) { |file|
|
62
|
+
load file
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
def ingredients associations
|
13
|
+
associations.each_pair { |func, klass|
|
14
|
+
global_function func do |*args, &block|
|
15
|
+
klass.new *args, &block
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
alias :ingredient :ingredients
|
21
|
+
|
22
|
+
def use_defaults
|
23
|
+
load File.join(Bakery::LIB_DIR, 'default.ingredients')
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
module Cpp
|
15
|
+
class File < Bakery::Ingredient::File
|
16
|
+
def toBlockCommentLine line
|
17
|
+
" *#{super line}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize filename, *args, &block
|
21
|
+
super filename, *args do
|
22
|
+
unless args.include? :no_copyright
|
23
|
+
puts '/*!'
|
24
|
+
insertCopyrightNotice
|
25
|
+
puts '**/'
|
26
|
+
puts ''
|
27
|
+
end
|
28
|
+
|
29
|
+
dispatch &block
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class SourceFile < File
|
35
|
+
def initialize filename, *args, &block
|
36
|
+
super filename, *args do
|
37
|
+
if args.include? :main
|
38
|
+
if args.include? :vita
|
39
|
+
puts '#include <vita.hpp>'
|
40
|
+
puts ''
|
41
|
+
puts 'int main(Ortus& ortus, Orcus& orcus)'
|
42
|
+
else
|
43
|
+
puts 'int main(int argc, char** argv, char** env)'
|
44
|
+
end
|
45
|
+
|
46
|
+
puts '{'
|
47
|
+
puts ' return 0;'
|
48
|
+
puts '}'
|
49
|
+
puts ''
|
50
|
+
end
|
51
|
+
|
52
|
+
dispatch &block
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class HeaderFile < File
|
58
|
+
def initialize filename, *args, &block
|
59
|
+
super filename, *args do
|
60
|
+
guard = Bakery.getLatestMarkerOfType Bakery::Ingredient::Cpp::HeaderMarker
|
61
|
+
|
62
|
+
guard_name = "#{guard ? guard.getProject : ''}_#{filename.gsub(/\./, '_')}".split(/[\/\\]/).join('_').upcase
|
63
|
+
|
64
|
+
puts "#ifndef #{guard_name}"
|
65
|
+
puts "#define #{guard_name}"
|
66
|
+
puts ''
|
67
|
+
puts "#endif // #{guard_name}"
|
68
|
+
puts ''
|
69
|
+
|
70
|
+
dispatch &block
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class TestFile < File
|
76
|
+
def initialize filename, *args, &block
|
77
|
+
super filename, *args do
|
78
|
+
puts '#include <gtest/gtest.h>'
|
79
|
+
puts ''
|
80
|
+
|
81
|
+
if args.include? :main
|
82
|
+
if args.include? :vita
|
83
|
+
puts '#include <vita.hpp>'
|
84
|
+
puts ''
|
85
|
+
puts 'int main(Ortus& ortus, Orcus& orcus)'
|
86
|
+
puts '{'
|
87
|
+
puts ' testing::InitGoogleTest(ortus);'
|
88
|
+
else
|
89
|
+
puts 'int main(int argc, char** argv)'
|
90
|
+
puts '{'
|
91
|
+
puts ' testing::InitGoogleTest(&argc, argv);'
|
92
|
+
end
|
93
|
+
|
94
|
+
puts ''
|
95
|
+
puts ' return RUN_ALL_TESTS();'
|
96
|
+
puts '}'
|
97
|
+
puts ''
|
98
|
+
end
|
99
|
+
|
100
|
+
dispatch &block
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class HeaderMarker < Bakery::Ingredient::Marker
|
106
|
+
def initialize *args, &block
|
107
|
+
super *args, &block
|
108
|
+
end
|
109
|
+
|
110
|
+
def getProject
|
111
|
+
Dir.pwd.gsub /^#{Regexp.quote @wd}[\/\\]?/, ''
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
class Build < Bakery::Ingredient::File
|
15
|
+
def initialize *args, &block
|
16
|
+
if args.include? :cmake
|
17
|
+
super 'CMakeList.txt', *args, &block
|
18
|
+
elsif args.include? :make
|
19
|
+
super 'makefile', *args, &block
|
20
|
+
elsif args.include? :rake
|
21
|
+
super 'rakefile', *args, &block
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'fileutils'
|
13
|
+
|
14
|
+
module Bakery
|
15
|
+
module Ingredient
|
16
|
+
class Dir < Dir
|
17
|
+
include Dispatcher
|
18
|
+
|
19
|
+
def initialize path, *args, &block
|
20
|
+
if !Dir.exists? path
|
21
|
+
if args.include? :create_recursive
|
22
|
+
FileUtils.mkdir_p path
|
23
|
+
else
|
24
|
+
FileUtils.mkdir path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
super path
|
29
|
+
|
30
|
+
Dir.chdir path do
|
31
|
+
dispatch &block
|
32
|
+
|
33
|
+
Bakery.removeMarkerLayerFromStack Dir.pwd
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
class File < File
|
15
|
+
include Dispatcher
|
16
|
+
|
17
|
+
def toBlockCommentLine line
|
18
|
+
"#{line.empty? ? '' : ' '}#{line}"
|
19
|
+
end
|
20
|
+
|
21
|
+
# TODO try cleaning this up...
|
22
|
+
def insertCopyrightNotice
|
23
|
+
Bakery[:copyright].each { |line|
|
24
|
+
if line.is_a? Proc
|
25
|
+
lines = line.call
|
26
|
+
if lines.is_a? Array
|
27
|
+
lines.each { |called_line|
|
28
|
+
puts toBlockCommentLine called_line
|
29
|
+
}
|
30
|
+
else
|
31
|
+
puts toBlockCommentLine lines
|
32
|
+
end
|
33
|
+
else
|
34
|
+
puts toBlockCommentLine line
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize filename, *args, &block
|
40
|
+
already_exists = File.exist? filename
|
41
|
+
|
42
|
+
if !already_exists || args.include?(:always_overwrite)
|
43
|
+
super filename, 'w+'
|
44
|
+
|
45
|
+
dispatch &block
|
46
|
+
else
|
47
|
+
super filename, 'a+'
|
48
|
+
|
49
|
+
if args.include?(:always_append)
|
50
|
+
dispatch &block
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def from filename
|
56
|
+
ICING_SEARCH.search(filename) { |file|
|
57
|
+
FileUtils.cp file, path
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
class Marker
|
15
|
+
def initialize *args, &block
|
16
|
+
@wd = Dir.pwd
|
17
|
+
|
18
|
+
Bakery.markers << self
|
19
|
+
end
|
20
|
+
|
21
|
+
def getPath
|
22
|
+
@wd
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
class Project < Dir
|
15
|
+
def initialize name, *args, &block
|
16
|
+
if name.is_a? Hash
|
17
|
+
fail "Project Argument Error" if name.size != 1
|
18
|
+
|
19
|
+
projname, recipe = name.map { |k, v| [k, v] }.first
|
20
|
+
else
|
21
|
+
projname, recipe = name.to_s, nil
|
22
|
+
end
|
23
|
+
|
24
|
+
super projname, *args do
|
25
|
+
Bakery.addCake
|
26
|
+
|
27
|
+
if recipe
|
28
|
+
# if an external recipe is specified, load it
|
29
|
+
extern_recipe_loc = File.join(Bakery::ROOT_DIR, recipe)
|
30
|
+
load extern_recipe_loc
|
31
|
+
end
|
32
|
+
|
33
|
+
local_recipe_loc = File.join(Dir.pwd, '.recipe')
|
34
|
+
|
35
|
+
# load .recipe if it isn't the external recipe and it exists
|
36
|
+
if local_recipe_loc != extern_recipe_loc
|
37
|
+
load_if_exists local_recipe_loc
|
38
|
+
end
|
39
|
+
|
40
|
+
dispatch &block
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
class ScriptFile < Bakery::Ingredient::File
|
15
|
+
def toBlockCommentLine line
|
16
|
+
"##{super line}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize filename, shebang, *args, &block
|
20
|
+
super filename, *args do
|
21
|
+
if args.include? :shebang
|
22
|
+
puts "#!/usr/bin/env #{shebang}"
|
23
|
+
puts ''
|
24
|
+
end
|
25
|
+
|
26
|
+
unless args.include? :no_copyright
|
27
|
+
puts '#'
|
28
|
+
insertCopyrightNotice
|
29
|
+
puts '#'
|
30
|
+
puts ''
|
31
|
+
end
|
32
|
+
|
33
|
+
dispatch &block
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
module Ruby
|
15
|
+
class ScriptFile < Bakery::Ingredient::ScriptFile
|
16
|
+
def initialize filename, *args, &block
|
17
|
+
super filename, 'ruby', *args do
|
18
|
+
if args.include? :main
|
19
|
+
puts 'if __FILE__ == $PROGRAM_NAME'
|
20
|
+
puts ''
|
21
|
+
puts 'end'
|
22
|
+
puts ''
|
23
|
+
end
|
24
|
+
|
25
|
+
dispatch &block
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
module Ingredient
|
14
|
+
module Shell
|
15
|
+
class BashScriptFile < Bakery::Ingredient::ScriptFile
|
16
|
+
def initialize filename, *args, &block
|
17
|
+
super filename, 'bash', *args, &block
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class ShScriptFile < Bakery::Ingredient::ScriptFile
|
22
|
+
def initialize filename, *args, &block
|
23
|
+
super filename, 'sh', *args, &block
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class TcshScriptFile < Bakery::Ingredient::ScriptFile
|
28
|
+
def initialize filename, *args, &block
|
29
|
+
super filename, 'tcsh', *args, &block
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class CshScriptFile < Bakery::Ingredient::ScriptFile
|
34
|
+
def initialize filename, *args, &block
|
35
|
+
super filename, 'csh', *args, &block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class ZshScriptFile < Bakery::Ingredient::File
|
40
|
+
def initialize filename, *args, &block
|
41
|
+
super filename, 'zsh', *args, &block
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
module Bakery
|
13
|
+
VERSION = '0.4.0'
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013
|
3
|
+
# Nathan Currier
|
4
|
+
#
|
5
|
+
# Use, modification, and distribution are all subject to the
|
6
|
+
# Boost Software License, Version 1.0. (See the accompanying
|
7
|
+
# file LICENSE.md or at http://rideliner.tk/LICENSE.html).
|
8
|
+
#
|
9
|
+
# <description>
|
10
|
+
#
|
11
|
+
|
12
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'file.ingredient')
|
13
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'dir.ingredient')
|
14
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'project.ingredient')
|
15
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'marker.ingredient')
|
16
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'build.ingredient')
|
17
|
+
load File.join(Bakery::INGREDIENTS_DETAIL_DIR, 'script.ingredient')
|
18
|
+
|
19
|
+
ingredient :file => Bakery::Ingredient::File
|
20
|
+
ingredient :dir => Bakery::Ingredient::Dir
|
21
|
+
ingredient :marker => Bakery::Ingredient::Marker
|
22
|
+
ingredient :project => Bakery::Ingredient::Project
|
23
|
+
ingredient :build => Bakery::Ingredient::Build
|
24
|
+
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bakery
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nathan Currier
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Design the layout of a project and have it ready for coding.
|
15
|
+
email: nathan.currier@gmail.com
|
16
|
+
executables:
|
17
|
+
- bake
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- bin/bake
|
22
|
+
- lib/bakery/version.rb
|
23
|
+
- lib/bakery/ingredients/ruby.ingredient
|
24
|
+
- lib/bakery/ingredients/c++.ingredient
|
25
|
+
- lib/bakery/ingredients/detail/dir.ingredient
|
26
|
+
- lib/bakery/ingredients/detail/script.ingredient
|
27
|
+
- lib/bakery/ingredients/detail/marker.ingredient
|
28
|
+
- lib/bakery/ingredients/detail/file.ingredient
|
29
|
+
- lib/bakery/ingredients/detail/build.ingredient
|
30
|
+
- lib/bakery/ingredients/detail/project.ingredient
|
31
|
+
- lib/bakery/ingredients/shell.ingredient
|
32
|
+
- lib/bakery/detail/load.rb
|
33
|
+
- lib/bakery/detail/global_function.rb
|
34
|
+
- lib/bakery/detail/search.rb
|
35
|
+
- lib/bakery/detail/dispatcher.rb
|
36
|
+
- lib/bakery/ingredient.rb
|
37
|
+
- lib/bakery/icing.rb
|
38
|
+
- lib/bakery/bakery.rb
|
39
|
+
- lib/bakery/cake.rb
|
40
|
+
- lib/default.ingredients
|
41
|
+
- lib/bakery.rb
|
42
|
+
- LICENSE.md
|
43
|
+
- README.md
|
44
|
+
homepage: http://rideliner.tk
|
45
|
+
licenses:
|
46
|
+
- Boost
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
requirements: []
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.8.23
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: Project management made simple.
|
69
|
+
test_files: []
|