csd 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/csd +1 -1
- data/csd.gemspec +22 -14
- data/lib/csd.rb +1 -1
- data/lib/csd/applications/base.rb +6 -27
- data/lib/csd/applications/minisip/base.rb +125 -0
- data/lib/csd/applications/minisip/init.rb +4 -7
- data/lib/csd/applications/minisip/unix/base.rb +54 -0
- data/lib/csd/commands.rb +171 -0
- data/lib/csd/init.rb +9 -4
- data/lib/csd/options.rb +48 -11
- data/lib/csd/{path_struct.rb → path_container.rb} +2 -2
- data/lib/extensions/core/array.rb +13 -0
- data/lib/extensions/core/file.rb +13 -0
- data/lib/extensions/core/object.rb +22 -0
- data/lib/extensions/core/pathname.rb +23 -0
- data/lib/extensions/core/string.rb +20 -0
- data/lib/extensions/gem/platform.rb +20 -0
- data/test/functional/test_commands.rb +98 -0
- data/test/helper.rb +11 -1
- data/test/unit/test_pathname.rb +19 -0
- data/test/unit/test_string.rb +13 -0
- metadata +21 -13
- data/lib/csd/applications/minisip/darwin/minisip_darwin.rb +0 -12
- data/lib/csd/applications/minisip/linux/minisip_linux.rb +0 -36
- data/lib/csd/applications/minisip/minisip.rb +0 -75
- data/lib/extensions/array.rb +0 -7
- data/lib/extensions/string.rb +0 -15
- data/test/test_csd.rb +0 -7
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gemspec.homepage = "http://github.com/csd/csd"
|
13
13
|
gemspec.authors = ["Technology Transfer Alliance Team"]
|
14
14
|
gemspec.add_dependency "term-ansicolor", ">= 0"
|
15
|
-
gemspec.add_dependency "
|
15
|
+
gemspec.add_dependency "active_support", ">= 0"
|
16
16
|
gemspec.add_dependency "builder", ">= 0"
|
17
17
|
gemspec.executables = ["csd"]
|
18
18
|
gemspec.post_install_message = %q{
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.14
|
data/bin/csd
CHANGED
data/csd.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{csd}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.14"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Technology Transfer Alliance Team"]
|
12
|
-
s.date = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-22}
|
13
13
|
s.default_executable = %q{csd}
|
14
14
|
s.description = %q{CSD stands for Communication Systems Design and is a project of the Telecommunication Systems Laboratory (TSLab) of the Royal Institute of Technology in Stockholm, Sweden. Within CSD many software tools are used to build up various networks and services. This gem is supposed to automate processes to handle the compilation and installation of these software tools. Technology Transfer Alliance (TTA) is the project team, which maintains this code.}
|
15
15
|
s.email = %q{mtoday11@gmail.com}
|
@@ -29,18 +29,24 @@ Gem::Specification.new do |s|
|
|
29
29
|
"csd.gemspec",
|
30
30
|
"lib/csd.rb",
|
31
31
|
"lib/csd/applications/base.rb",
|
32
|
-
"lib/csd/applications/minisip/
|
32
|
+
"lib/csd/applications/minisip/base.rb",
|
33
33
|
"lib/csd/applications/minisip/init.rb",
|
34
|
-
"lib/csd/applications/minisip/
|
35
|
-
"lib/csd/
|
34
|
+
"lib/csd/applications/minisip/unix/base.rb",
|
35
|
+
"lib/csd/commands.rb",
|
36
36
|
"lib/csd/init.rb",
|
37
37
|
"lib/csd/options.rb",
|
38
|
-
"lib/csd/
|
39
|
-
"lib/extensions/array.rb",
|
40
|
-
"lib/extensions/
|
38
|
+
"lib/csd/path_container.rb",
|
39
|
+
"lib/extensions/core/array.rb",
|
40
|
+
"lib/extensions/core/file.rb",
|
41
|
+
"lib/extensions/core/object.rb",
|
42
|
+
"lib/extensions/core/pathname.rb",
|
43
|
+
"lib/extensions/core/string.rb",
|
44
|
+
"lib/extensions/gem/platform.rb",
|
41
45
|
"publish",
|
46
|
+
"test/functional/test_commands.rb",
|
42
47
|
"test/helper.rb",
|
43
|
-
"test/
|
48
|
+
"test/unit/test_pathname.rb",
|
49
|
+
"test/unit/test_string.rb"
|
44
50
|
]
|
45
51
|
s.homepage = %q{http://github.com/csd/csd}
|
46
52
|
s.post_install_message = %q{
|
@@ -63,8 +69,10 @@ Gem::Specification.new do |s|
|
|
63
69
|
s.rubygems_version = %q{1.3.7}
|
64
70
|
s.summary = %q{Installation and compilation handler for software used in CSD projects.}
|
65
71
|
s.test_files = [
|
66
|
-
"test/
|
67
|
-
"test/
|
72
|
+
"test/functional/test_commands.rb",
|
73
|
+
"test/helper.rb",
|
74
|
+
"test/unit/test_pathname.rb",
|
75
|
+
"test/unit/test_string.rb"
|
68
76
|
]
|
69
77
|
|
70
78
|
if s.respond_to? :specification_version then
|
@@ -73,16 +81,16 @@ Gem::Specification.new do |s|
|
|
73
81
|
|
74
82
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
75
83
|
s.add_runtime_dependency(%q<term-ansicolor>, [">= 0"])
|
76
|
-
s.add_runtime_dependency(%q<
|
84
|
+
s.add_runtime_dependency(%q<active_support>, [">= 0"])
|
77
85
|
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
78
86
|
else
|
79
87
|
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
80
|
-
s.add_dependency(%q<
|
88
|
+
s.add_dependency(%q<active_support>, [">= 0"])
|
81
89
|
s.add_dependency(%q<builder>, [">= 0"])
|
82
90
|
end
|
83
91
|
else
|
84
92
|
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
85
|
-
s.add_dependency(%q<
|
93
|
+
s.add_dependency(%q<active_support>, [">= 0"])
|
86
94
|
s.add_dependency(%q<builder>, [">= 0"])
|
87
95
|
end
|
88
96
|
end
|
data/lib/csd.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
Dir.glob(File.join(File.dirname(__FILE__), 'extensions', '*.rb')) { |file| require file }
|
1
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'extensions', '**', '*.rb')) { |file| require file }
|
2
2
|
require File.join(File.dirname(__FILE__), 'csd', 'init')
|
@@ -1,15 +1,18 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'commands')
|
1
2
|
require 'rbconfig'
|
2
3
|
|
3
|
-
module
|
4
|
+
module Csd
|
4
5
|
module Application
|
5
6
|
|
6
|
-
# This is the root parent of all Applications
|
7
|
+
# This is the class root parent of all Applications
|
7
8
|
#
|
8
9
|
class Base
|
9
10
|
|
11
|
+
include Commands
|
10
12
|
include Gem::UserInteraction
|
11
13
|
|
12
14
|
attr_reader :gem_version, :options
|
15
|
+
attr_reader :after_build, :before_build # Dummies to be overwritten by methods
|
13
16
|
attr_accessor :path
|
14
17
|
|
15
18
|
def initialize(options={})
|
@@ -20,34 +23,10 @@ module CSD
|
|
20
23
|
end
|
21
24
|
|
22
25
|
def introduction
|
23
|
-
say "CSD
|
24
|
-
say
|
25
|
-
say "The working directory is:"
|
26
|
-
say path.root
|
26
|
+
say "CSD Version: #{gem_version}".blue
|
27
27
|
end
|
28
28
|
|
29
|
-
def test_command(*args)
|
30
|
-
say "Testing command for success: #{args.join(' ')}".cyan
|
31
|
-
system(*args)
|
32
|
-
end
|
33
|
-
|
34
|
-
def run_command(cmd)
|
35
|
-
log "Running command: #{cmd} in #{Dir.pwd}".magenta
|
36
|
-
ret = ''
|
37
|
-
unless options.dry
|
38
|
-
IO.popen(cmd) do |stdout|
|
39
|
-
stdout.each do |line|
|
40
|
-
say line
|
41
|
-
ret << line
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
ret
|
46
|
-
end
|
47
29
|
|
48
|
-
def log(msg="")
|
49
|
-
say msg.yellow unless options.silent
|
50
|
-
end
|
51
30
|
|
52
31
|
end
|
53
32
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'base')
|
2
|
+
|
3
|
+
module Csd
|
4
|
+
module Application
|
5
|
+
module Minisip
|
6
|
+
class Base < Csd::Application::Base
|
7
|
+
|
8
|
+
def introduction
|
9
|
+
super
|
10
|
+
define_paths
|
11
|
+
say " Working directory: ".green + path.work.to_s.yellow
|
12
|
+
say " Your Platform: ".green + Gem::Platform.local.humanize.to_s.yellow
|
13
|
+
say " Application module: ".green + self.class.name.to_s.yellow
|
14
|
+
say
|
15
|
+
unless options.yes
|
16
|
+
exit unless ask_yes_no("Continue?".red.bold, true)
|
17
|
+
end
|
18
|
+
say
|
19
|
+
build!
|
20
|
+
end
|
21
|
+
|
22
|
+
def build!
|
23
|
+
before_build
|
24
|
+
mkdir path.work
|
25
|
+
make_hdviper if checkout_hdviper or options.dry
|
26
|
+
checkout_minisip
|
27
|
+
make_minisip
|
28
|
+
after_build
|
29
|
+
end
|
30
|
+
|
31
|
+
def define_paths
|
32
|
+
path.work = Pathname.new(File.join(path.root, 'minisip'))
|
33
|
+
path.repository = Pathname.new(File.join(path.work, 'repository'))
|
34
|
+
path.open_gl_display = Pathname.new(File.join(path.repository, 'libminisip', 'source', 'subsystem_media', 'video', 'display', 'OpenGLDisplay.cxx'))
|
35
|
+
path.hdviper = Pathname.new(File.join(path.work, 'hdviper'))
|
36
|
+
path.hdviper_x264 = Pathname.new(File.join(path.hdviper, 'x264'))
|
37
|
+
path.hdviper_x264_test_x264api = Pathname.new(File.join(path.hdviper_x264, 'test', 'x264API'))
|
38
|
+
path.build = Pathname.new(File.join(path.work, 'build'))
|
39
|
+
path.build_include = Pathname.new(File.join(path.build, 'include'))
|
40
|
+
path.build_lib = Pathname.new(File.join(path.build, 'lib'))
|
41
|
+
path.build_lib_pkg_config = Pathname.new(File.join(path.build_lib, 'pkgconfig'))
|
42
|
+
path.build_share = Pathname.new(File.join(path.build, 'share'))
|
43
|
+
path.build_share_aclocal = Pathname.new(File.join(path.build_share, 'aclocal'))
|
44
|
+
end
|
45
|
+
|
46
|
+
def checkout_hdviper
|
47
|
+
if path.hdviper.directory?
|
48
|
+
say "Skipping hdviper, because the directory already exists: #{path.hdviper}".green.bold
|
49
|
+
else
|
50
|
+
if path.hdviper.parent.writable? or options.dry
|
51
|
+
say "Downloading hdviper to: #{path.hdviper}".green.bold
|
52
|
+
run_command("svn co --quiet svn://hdviper.org/hdviper/wp3/src #{path.hdviper}")
|
53
|
+
return true
|
54
|
+
else
|
55
|
+
say "Could not download hdviper (no permission): #{path.hdviper}".red
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def make_hdviper
|
61
|
+
cd path.hdviper_x264
|
62
|
+
run_command('./configure')
|
63
|
+
run_command('make')
|
64
|
+
cd path.hdviper_x264_test_x264api
|
65
|
+
run_command('make')
|
66
|
+
end
|
67
|
+
|
68
|
+
def checkout_minisip # TODO: Refactor because redudancy with checkout_hdviper
|
69
|
+
if path.repository.directory?
|
70
|
+
say "Skipping repository download, because the directory already exists: #{path.repository}".green.bold
|
71
|
+
else
|
72
|
+
if path.repository.parent.writable? or options.dry
|
73
|
+
say "Downloading minisip repository to: #{path.repository}".green.bold
|
74
|
+
run_command("git clone http://github.com/csd/minisip.git #{path.repository}")
|
75
|
+
# Fixing hard-coded stuff
|
76
|
+
new_file_content = File.read(path.open_gl_display).gsub('/home/erik', path.build)
|
77
|
+
File.open(path.open_gl_display, 'w+') { |file| file << new_file_content }
|
78
|
+
return true
|
79
|
+
else
|
80
|
+
say "Could not download minisip repository (no permission): #{path.hdviper}".red
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def make_minisip
|
86
|
+
[path.build, path.build_include, path.build_lib, path.build_share, path.build_share_aclocal].each { |target| mkdir target }
|
87
|
+
['libmutil', 'libmnetutil', 'libmcrypto', 'libmikey', 'libmsip', 'libmstun', 'libminisip', 'minisip'].each do |library|
|
88
|
+
directory = Pathname.new(File.join(path.repository, library))
|
89
|
+
next if options.only and !options.only.include?(library)
|
90
|
+
if cd(directory) or options.dry
|
91
|
+
if options.bootstrap
|
92
|
+
say "Bootstrapping #{library}".green.bold
|
93
|
+
run_command("./bootstrap -I #{path.build_share_aclocal.enquote}")
|
94
|
+
end
|
95
|
+
if options.configure
|
96
|
+
say "Configuring #{library}".green.bold
|
97
|
+
individual_options = case library
|
98
|
+
when 'libminisip'
|
99
|
+
%Q{--enable-debug --enable-video --disable-mil --disable-decklink --enable-opengl --disable-sdl CPPFLAGS="-I#{path.hdviper_x264_test_x264api} -I#{path.hdviper_x264}" LDFLAGS="#{File.join(path.hdviper_x264_test_x264api, 'libx264api.a')} #{File.join(path.hdviper_x264, 'libtidx264.a')} -lpthread -lrt"}
|
100
|
+
#%Q{--enable-debug --enable-video --disable-mil --disable-decklink --enable-opengl --disable-sdl CPPFLAGS="-I#{path.hdviper_x264}" LDFLAGS="#{File.join(path.hdviper_x264, 'libx264.a')} -lpthread -lrt"}
|
101
|
+
when 'minisip'
|
102
|
+
%Q{--enable-debug --enable-video --enable-textui --enable-opengl}
|
103
|
+
else
|
104
|
+
''
|
105
|
+
end
|
106
|
+
run_command(%Q{./configure #{individual_options} --prefix=#{path.build.enquote} PKG_CONFIG_PATH=#{path.build_lib_pkg_config.enquote} ACLOCAL_FLAGS=#{path.build_share_aclocal} LD_LIBRARY_PATH=#{path.build_lib.enquote} --silent})
|
107
|
+
end
|
108
|
+
if options.make
|
109
|
+
say "Make #{library}".green.bold
|
110
|
+
run_command("make")
|
111
|
+
end
|
112
|
+
if options.make_install
|
113
|
+
say "Make install #{library}".green.bold
|
114
|
+
run_command("make install")
|
115
|
+
end
|
116
|
+
else
|
117
|
+
say "Skipping minisip library #{library} because it not be found: #{directory}".green.bold
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -1,19 +1,16 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'minisip')
|
2
1
|
Dir.glob(File.join(File.dirname(__FILE__), '**', '*.rb')) { |file| require file }
|
3
2
|
|
4
|
-
module
|
3
|
+
module Csd
|
5
4
|
module Application
|
6
5
|
module Minisip
|
7
6
|
class Init
|
8
7
|
|
9
8
|
def self.application(*args)
|
10
|
-
case Gem::Platform.local
|
9
|
+
case Gem::Platform.local.os
|
11
10
|
when 'linux'
|
12
|
-
|
13
|
-
when 'darwin'
|
14
|
-
MinisipDarwin.new(*args)
|
11
|
+
Unix::Base.new(*args)
|
15
12
|
else
|
16
|
-
|
13
|
+
Base.new(*args)
|
17
14
|
end
|
18
15
|
end
|
19
16
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'base')
|
2
|
+
|
3
|
+
module Csd
|
4
|
+
module Application
|
5
|
+
module Minisip
|
6
|
+
module Unix
|
7
|
+
class Base < Csd::Application::Minisip::Base
|
8
|
+
|
9
|
+
# A list of apt-get packages that are required by this application.
|
10
|
+
#
|
11
|
+
DEBIAN_DEPENDENCIES = %w{ libssl-dev libglademm-2.4-dev libsdl-dev git-core subversion automake libtool libltdl3-dev build-essential libavcodec-dev libswscale-dev nasm yasm libasound2-dev libsdl-ttf2.0-dev }
|
12
|
+
|
13
|
+
def before_build
|
14
|
+
fix_aclocal_dirlist
|
15
|
+
install_aptitude_dependencies
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_build
|
19
|
+
ldconfig_and_gtkgui
|
20
|
+
end
|
21
|
+
|
22
|
+
def install_aptitude_dependencies
|
23
|
+
DEBIAN_DEPENDENCIES.each do |apt|
|
24
|
+
run_command("sudo apt-get --yes install #{apt}")
|
25
|
+
end if options.apt_get
|
26
|
+
end
|
27
|
+
|
28
|
+
def fix_aclocal_dirlist
|
29
|
+
return
|
30
|
+
content = '/usr/local/share/aclocal'
|
31
|
+
target = Pathname.new('/usr/share/aclocal/dirlist')
|
32
|
+
unless target.exist? and File.new(target).read == content # TODO: replace with File.read
|
33
|
+
begin
|
34
|
+
File.new(target, 'w').write(content).close
|
35
|
+
rescue Errno::EACCES => e
|
36
|
+
say "Please run the following commands with the right permissions.".red.bold
|
37
|
+
say " sudo rm /usr/share/aclocal/dirlist".green.bold
|
38
|
+
say " sudo touch /usr/share/aclocal/dirlist".green.bold
|
39
|
+
say " sudo echo /usr/local/share/aclocal >> /usr/share/aclocal/dirlist".green.bold
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def ldconfig_and_gtkgui
|
46
|
+
run_command("ldconfig /usr/local/lib/libminisip.so.0")
|
47
|
+
run_command("minisip_gtkgui")
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/csd/commands.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module Csd
|
6
|
+
# This module contains wrapper methods for standard file system commands. They are meant to be
|
7
|
+
# a little bit more robust (e.g. raising no exceptions) and return elaborate feedback on their operation.
|
8
|
+
#
|
9
|
+
module Commands
|
10
|
+
|
11
|
+
# The Process module is a collection of methods used to manipulate processes.
|
12
|
+
# We use it to check whether we run as sudo or not by evaluating the uid of ths user (if it's 0 it's root)
|
13
|
+
include Process
|
14
|
+
|
15
|
+
# Objects of this class can be returned by Commands. Since it is an OpenStruct object,
|
16
|
+
# it can contain an arbritary number of values.
|
17
|
+
#
|
18
|
+
class CommandResult < OpenStruct
|
19
|
+
|
20
|
+
# This creates an convenient, read-only accessor for the OpenStruct object values.
|
21
|
+
# It simply maps methods that end with a <tt>?</tt> to the same method without <tt>?</tt>.
|
22
|
+
#
|
23
|
+
# ==== Examples
|
24
|
+
#
|
25
|
+
# command_result.something? # => command_result.something
|
26
|
+
#
|
27
|
+
def method_missing(meth, *args, &block)
|
28
|
+
meth.to_s.ends_with?('?') ? self.send(meth.to_s.chop.to_sym, *args, &block) : super
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
# Creates a directory recursively.
|
34
|
+
#
|
35
|
+
# ==== Returns
|
36
|
+
#
|
37
|
+
# This method returns a CommandResult object with the following values:
|
38
|
+
#
|
39
|
+
# [+success?+] +true+ if the directory exists after the operation, +nil+ if not.
|
40
|
+
# [+already_existed?+] +true+ if the directory existed before the operation, +nil+ if not.
|
41
|
+
# [+writable?+] +true+ if the directory is writable, +false+ if not, +nil+ if the directory doesn't exist.
|
42
|
+
#
|
43
|
+
# ==== Examples
|
44
|
+
#
|
45
|
+
# result = mkdir('foo') # => #<CommandResult...>
|
46
|
+
# result.success? # => true
|
47
|
+
# result.already_existed? # => false
|
48
|
+
#
|
49
|
+
# puts "I created a directory" if mkdir('bar').success?
|
50
|
+
#
|
51
|
+
# mkdir('i/can/create/directories/recursively')
|
52
|
+
#
|
53
|
+
def mkdir(target)
|
54
|
+
target = target.pathnamify
|
55
|
+
result = CommandResult.new
|
56
|
+
if target.directory?
|
57
|
+
# Don't say anything if the directory already exists
|
58
|
+
result.already_existed = true
|
59
|
+
else
|
60
|
+
begin
|
61
|
+
say "Creating directory: #{target}".cyan unless options.quiet
|
62
|
+
# Try to create the directory
|
63
|
+
target.mkpath unless options.dry
|
64
|
+
rescue Errno::EACCES => e
|
65
|
+
say "Cannot create directory (no permission): #{target}".red unless options.quiet
|
66
|
+
return result
|
67
|
+
end
|
68
|
+
end
|
69
|
+
result.success = (target.directory? or options.dry)
|
70
|
+
result.writable = (target.writable? or options.dry)
|
71
|
+
result
|
72
|
+
end
|
73
|
+
|
74
|
+
# Changes the current directory.
|
75
|
+
#
|
76
|
+
# ==== Returns
|
77
|
+
#
|
78
|
+
# This method returns a CommandResult object with the following values:
|
79
|
+
#
|
80
|
+
# [+success?+] +true+ if pwd is where it was requested to be after the operation, +nil+ if not.
|
81
|
+
#
|
82
|
+
def cd(target)
|
83
|
+
target = target.pathnamify
|
84
|
+
result = CommandResult.new
|
85
|
+
if target.directory? or options.dry
|
86
|
+
say "cd #{target}".yellow
|
87
|
+
Dir.chdir(target)
|
88
|
+
elsif target.exist?
|
89
|
+
say "Cannot change to directory because it exists but is not a directory: #{target}".red
|
90
|
+
end
|
91
|
+
result.success = (target.current_path? or options.dry)
|
92
|
+
result
|
93
|
+
end
|
94
|
+
|
95
|
+
# Runs a command on the system.
|
96
|
+
#
|
97
|
+
# ==== Returns
|
98
|
+
#
|
99
|
+
# The command's output as an +Array+. Note that the exit code can be accessed via the global variable <tt>$?</tt>
|
100
|
+
#
|
101
|
+
# ==== Options
|
102
|
+
#
|
103
|
+
# The following options can be passed as a hash.
|
104
|
+
#
|
105
|
+
# [+:exit_on_failure+] If the exit code of the command was not 0, exit the CSD application.
|
106
|
+
#
|
107
|
+
#
|
108
|
+
def sh(cmd, params={})
|
109
|
+
default_params = { :exit_on_failure => true }
|
110
|
+
params = default_params.merge(params)
|
111
|
+
say "Running command in #{Dir.pwd}".yellow unless options.silent
|
112
|
+
say cmd.cyan
|
113
|
+
ret = ''
|
114
|
+
unless options.dry
|
115
|
+
IO.popen(cmd) do |stdout|
|
116
|
+
stdout.each do |line|
|
117
|
+
say " #{line}" if options.verbose
|
118
|
+
ret << line
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
exit_if_last_command_had_errors if params[:exit_on_failure]
|
123
|
+
ret
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
def test_command(*args)
|
128
|
+
say "Testing command for success: #{args.join(' ')}".yellow
|
129
|
+
system(*args)
|
130
|
+
end
|
131
|
+
|
132
|
+
def run_command(cmd, params={})
|
133
|
+
default_params = { :exit_on_failure => true }
|
134
|
+
params = default_params.merge(params)
|
135
|
+
say "Running command in #{Dir.pwd}".yellow unless options.quiet
|
136
|
+
say cmd.cyan
|
137
|
+
ret = ''
|
138
|
+
unless options.dry
|
139
|
+
IO.popen(cmd) do |stdout|
|
140
|
+
stdout.each do |line|
|
141
|
+
say " #{line}"
|
142
|
+
ret << line
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
exit_if_last_command_had_errors if params[:exit_on_failure]
|
147
|
+
ret
|
148
|
+
end
|
149
|
+
|
150
|
+
def exit_if_last_command_had_errors
|
151
|
+
unless $?.try(:success?) or options.dry
|
152
|
+
say "The last command was unsuccessful.".red unless options.quiet
|
153
|
+
exit
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
def say(something='')
|
159
|
+
end
|
160
|
+
|
161
|
+
def log(msg="")
|
162
|
+
say msg.yellow unless options.silent
|
163
|
+
end
|
164
|
+
|
165
|
+
# Dummy to be overwritten by real options
|
166
|
+
def options
|
167
|
+
OpenStruct.new
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
end
|
data/lib/csd/init.rb
CHANGED
@@ -6,7 +6,12 @@ require 'ostruct'
|
|
6
6
|
require 'tmpdir'
|
7
7
|
require 'active_support/core_ext'
|
8
8
|
|
9
|
-
|
9
|
+
# This namespace is given to the entire CSD gem.
|
10
|
+
#
|
11
|
+
module Csd
|
12
|
+
# On initialization, this class bootstraps and runs the CSD gem.
|
13
|
+
# The initialization is most likely be done by the `csd´ executable.
|
14
|
+
#
|
10
15
|
class Init
|
11
16
|
|
12
17
|
include Gem::UserInteraction
|
@@ -16,7 +21,7 @@ module CSD
|
|
16
21
|
def initialize
|
17
22
|
@options = Options.parse
|
18
23
|
@path = path_struct
|
19
|
-
@gem_version = File.
|
24
|
+
@gem_version = File.read(File.join(path.gem_root, 'VERSION'))
|
20
25
|
validate_arguments
|
21
26
|
@application = initialize_application
|
22
27
|
@application.introduction
|
@@ -24,7 +29,7 @@ module CSD
|
|
24
29
|
end
|
25
30
|
|
26
31
|
def path_struct
|
27
|
-
path =
|
32
|
+
path = PathContainer.new
|
28
33
|
if options.path
|
29
34
|
if File.directory?(options.path)
|
30
35
|
path.root = File.expand_path(options.path)
|
@@ -53,7 +58,7 @@ module CSD
|
|
53
58
|
directory_name = ARGV.second.underscore
|
54
59
|
begin
|
55
60
|
require File.join(File.join(path.applications, "#{directory_name}"), 'init.rb')
|
56
|
-
"
|
61
|
+
"Csd::Application::#{directory_name.camelize}::Init".constantize.application(:gem_version => @gem_version, :options => @options, :path => @path)
|
57
62
|
rescue LoadError
|
58
63
|
say "Unknown application: #{directory_name}"
|
59
64
|
exit
|
data/lib/csd/options.rb
CHANGED
@@ -2,7 +2,7 @@ require 'optparse'
|
|
2
2
|
require 'optparse/time'
|
3
3
|
require 'ostruct'
|
4
4
|
|
5
|
-
module
|
5
|
+
module Csd
|
6
6
|
class Options
|
7
7
|
|
8
8
|
#
|
@@ -10,14 +10,17 @@ module CSD
|
|
10
10
|
#
|
11
11
|
def self.parse
|
12
12
|
# Default options
|
13
|
-
options
|
14
|
-
options.temp
|
15
|
-
options.silent
|
16
|
-
options.dry
|
13
|
+
options = OpenStruct.new
|
14
|
+
options.temp = false
|
15
|
+
options.silent = false
|
16
|
+
options.dry = false
|
17
17
|
options.bootstrap = true
|
18
18
|
options.configure = true
|
19
19
|
options.make = true
|
20
20
|
options.make_install = true
|
21
|
+
options.owner = nil
|
22
|
+
options.apt_get = true
|
23
|
+
options.yes = false
|
21
24
|
|
22
25
|
# Parse the command line options
|
23
26
|
OptionParser.new do |opts|
|
@@ -41,28 +44,53 @@ module CSD
|
|
41
44
|
options.dry = value
|
42
45
|
end
|
43
46
|
|
44
|
-
opts.on("-
|
47
|
+
opts.on("-y", "--yes","Answering all questions with 'yes'") do |value|
|
48
|
+
options.yes = value
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on("-na", "--no-apt-get","Don't run any apt-get commands") do |value|
|
52
|
+
options.apt_get = value
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on("-nb", "--no-bootstrap","Don't run any bootstrap commands") do |value|
|
45
56
|
options.bootstrap = value
|
46
57
|
end
|
47
58
|
|
48
|
-
opts.on("-
|
59
|
+
opts.on("-nc", "--no-configure","Don't run any configure commands") do |value|
|
49
60
|
options.configure = value
|
50
61
|
end
|
51
62
|
|
52
|
-
opts.on("-
|
63
|
+
opts.on("-nm", "--no-make","Don't run any make commands") do |value|
|
53
64
|
options.make = value
|
54
65
|
end
|
55
66
|
|
56
|
-
opts.on("-
|
67
|
+
opts.on("-nmi", "--no-make-install","Don't run any make install commands") do |value|
|
57
68
|
options.make_install = value
|
58
69
|
end
|
59
70
|
|
71
|
+
opts.on("--only libmcrypto,libmnetuli,etc.", Array, "Include only these libraries") do |list|
|
72
|
+
options.only = list
|
73
|
+
end
|
74
|
+
|
75
|
+
opts.on("-o", "--owner [OWNER]","Specify OWNER:GROUP for this operation") do |value|
|
76
|
+
options.owner = value
|
77
|
+
end
|
78
|
+
|
60
79
|
opts.on("-p", "--path [PATH]",
|
61
80
|
"Defines the working directory manually.",
|
62
81
|
"(This will override the --temp option)") do |value|
|
63
82
|
options.path = value
|
64
83
|
end
|
65
84
|
|
85
|
+
|
86
|
+
opts.on("-d", "--debug","Show debugging information") do |value|
|
87
|
+
options.quiet = value
|
88
|
+
end
|
89
|
+
|
90
|
+
opts.on("--verbose","Show elaborate output") do |value|
|
91
|
+
options.quiet = value
|
92
|
+
end
|
93
|
+
|
66
94
|
opts.on("-s", "--silent","Don't show any output") do |value|
|
67
95
|
options.silent = value
|
68
96
|
end
|
@@ -73,10 +101,19 @@ module CSD
|
|
73
101
|
end
|
74
102
|
|
75
103
|
opts.on_tail("-v", "--version", "Show version") do
|
76
|
-
puts "CSD Gem Version: #{
|
104
|
+
puts "CSD Gem Version: #{File.read(File.join(PathContainer.new.gem_root, 'VERSION'))}"
|
77
105
|
exit
|
78
106
|
end
|
79
|
-
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#.parse!
|
110
|
+
|
111
|
+
if options.owner
|
112
|
+
chmod = options.owner.split(':')
|
113
|
+
options.owner = chmod.first
|
114
|
+
options.group = chmod.last
|
115
|
+
end
|
116
|
+
|
80
117
|
options
|
81
118
|
end
|
82
119
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Csd
|
2
|
+
module Extensions
|
3
|
+
module Core
|
4
|
+
module Object
|
5
|
+
|
6
|
+
# Creates a Pathname object from the current object. Preferrably from Strings and Hashes.
|
7
|
+
#
|
8
|
+
def pathnamify
|
9
|
+
case self
|
10
|
+
when ::Pathname then self
|
11
|
+
else ::Pathname.new(self)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Object #:nodoc:
|
21
|
+
include Csd::Extensions::Core::Object
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'string')
|
2
|
+
|
3
|
+
module Csd
|
4
|
+
module Extensions
|
5
|
+
module Core
|
6
|
+
module Pathname
|
7
|
+
|
8
|
+
def enquote
|
9
|
+
to_s.enquote
|
10
|
+
end
|
11
|
+
|
12
|
+
def current_path?
|
13
|
+
self.exist? and self.realpath == self.class.getwd.realpath
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Pathname #:nodoc:
|
22
|
+
include Csd::Extensions::Core::Pathname
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'term/ansicolor'
|
2
|
+
|
3
|
+
module Csd
|
4
|
+
module Extensions
|
5
|
+
module Core
|
6
|
+
module String
|
7
|
+
|
8
|
+
def enquote
|
9
|
+
%Q{"#{self}"}
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class String #:nodoc:
|
18
|
+
include Term::ANSIColor
|
19
|
+
include Csd::Extensions::Core::String
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Csd
|
2
|
+
module Extensions
|
3
|
+
module Gem
|
4
|
+
module Platform
|
5
|
+
|
6
|
+
def humanize
|
7
|
+
version_string = version ? ", version #{version}" : ''
|
8
|
+
"#{os} (CPU: #{cpu}#{version_string})"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module Gem
|
17
|
+
class Platform #:nodoc:
|
18
|
+
include Csd::Extensions::Gem::Platform
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
class Cmd
|
5
|
+
include Csd::Commands
|
6
|
+
attr_accessor :options
|
7
|
+
def initialize
|
8
|
+
@options = OpenStruct.new({ :silent => true, :quiet => true, :dry => false })
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class TestCommands < Test::Unit::TestCase
|
13
|
+
|
14
|
+
context "As a directory function" do
|
15
|
+
|
16
|
+
setup do
|
17
|
+
@cmd = Cmd.new
|
18
|
+
@tmp = Dir.mktmpdir
|
19
|
+
@dir = Pathname.new File.join(@tmp, 'folder')
|
20
|
+
@subdir = Pathname.new File.join(@dir, 'subfolder')
|
21
|
+
end
|
22
|
+
|
23
|
+
teardown do
|
24
|
+
FileUtils.rm_r(@tmp)
|
25
|
+
end
|
26
|
+
|
27
|
+
context "mkdir" do
|
28
|
+
|
29
|
+
should "return the proper CommandResult if the directory already existed" do
|
30
|
+
ensure_mkdir(@dir)
|
31
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.mkdir(@dir))
|
32
|
+
assert result.success?
|
33
|
+
assert result.already_existed?
|
34
|
+
assert result.writable?
|
35
|
+
end
|
36
|
+
|
37
|
+
should "return the proper CommandResult if the directory already existed in dry mode" do
|
38
|
+
@cmd.options.dry = true
|
39
|
+
ensure_mkdir(@dir)
|
40
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.mkdir(@dir))
|
41
|
+
assert result.success?
|
42
|
+
assert result.already_existed?
|
43
|
+
assert result.writable?
|
44
|
+
end
|
45
|
+
|
46
|
+
should "create the directory if it doesn't exist yet" do
|
47
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.mkdir(@dir))
|
48
|
+
assert result.success?
|
49
|
+
assert !result.already_existed?
|
50
|
+
assert result.writable?
|
51
|
+
end
|
52
|
+
|
53
|
+
should "create the directory if it doesn't exist yet in dry mode" do
|
54
|
+
@cmd.options.dry = true
|
55
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.mkdir(@dir))
|
56
|
+
assert result.success?
|
57
|
+
assert !result.already_existed?
|
58
|
+
assert result.writable?
|
59
|
+
end
|
60
|
+
|
61
|
+
should "notify if there is no permission to create the directory" do
|
62
|
+
ensure_mkdir(@dir)
|
63
|
+
@dir.chmod(0000)
|
64
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.mkdir(@dir))
|
65
|
+
assert result.success?
|
66
|
+
assert result.already_existed?
|
67
|
+
assert !result.writable?
|
68
|
+
Pathname.new(@dir).chmod(0777) # Cleanup
|
69
|
+
end
|
70
|
+
|
71
|
+
end # context "mkdir"
|
72
|
+
|
73
|
+
context "cd" do
|
74
|
+
|
75
|
+
should "return a CommanResult with success? if the directory was changed successfully" do
|
76
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.cd('/'))
|
77
|
+
assert result.success?
|
78
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.cd(@tmp))
|
79
|
+
assert result.success?
|
80
|
+
end
|
81
|
+
|
82
|
+
should "realize when the target is not a directory, but a file or something" do
|
83
|
+
testfile_path = File.join(@tmp, 'testfile')
|
84
|
+
File.new(testfile_path, 'w')
|
85
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.cd(testfile_path))
|
86
|
+
assert !result.success?
|
87
|
+
end
|
88
|
+
|
89
|
+
should "realize when the target doesn't exist" do
|
90
|
+
assert_kind_of(Cmd::CommandResult, result = @cmd.cd('/i/for/sure/dont/exist'))
|
91
|
+
assert !result.success?
|
92
|
+
end
|
93
|
+
|
94
|
+
end # context "cd"
|
95
|
+
|
96
|
+
end # context "As a directory function"
|
97
|
+
|
98
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
3
|
require 'shoulda'
|
4
|
+
require 'tmpdir'
|
5
|
+
require 'redgreen'
|
4
6
|
|
5
7
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
8
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
9
|
require 'csd'
|
8
10
|
|
9
11
|
class Test::Unit::TestCase
|
10
|
-
|
12
|
+
|
13
|
+
def ensure_mkdir(target)
|
14
|
+
target = Pathname.new(target) unless target.is_a?(Pathname)
|
15
|
+
target.mkpath
|
16
|
+
assert target.directory?
|
17
|
+
target
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestPathname < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "A normal Pathname object" do
|
6
|
+
|
7
|
+
should "be enquotable" do
|
8
|
+
assert_equal '"/"', Pathname.new('/').enquote
|
9
|
+
end
|
10
|
+
|
11
|
+
should "know if its the current pwd or not (regardless of the requested directory actually existing)" do
|
12
|
+
Dir.chdir('/tmp')
|
13
|
+
assert Pathname.new('/tmp').current_path?
|
14
|
+
assert !Pathname.new('/i/do/not/exist').current_path?
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 14
|
10
|
+
version: 0.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Technology Transfer Alliance Team
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-22 00:00:00 +02:00
|
19
19
|
default_executable: csd
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: active_support
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
@@ -80,18 +80,24 @@ files:
|
|
80
80
|
- csd.gemspec
|
81
81
|
- lib/csd.rb
|
82
82
|
- lib/csd/applications/base.rb
|
83
|
-
- lib/csd/applications/minisip/
|
83
|
+
- lib/csd/applications/minisip/base.rb
|
84
84
|
- lib/csd/applications/minisip/init.rb
|
85
|
-
- lib/csd/applications/minisip/
|
86
|
-
- lib/csd/
|
85
|
+
- lib/csd/applications/minisip/unix/base.rb
|
86
|
+
- lib/csd/commands.rb
|
87
87
|
- lib/csd/init.rb
|
88
88
|
- lib/csd/options.rb
|
89
|
-
- lib/csd/
|
90
|
-
- lib/extensions/array.rb
|
91
|
-
- lib/extensions/
|
89
|
+
- lib/csd/path_container.rb
|
90
|
+
- lib/extensions/core/array.rb
|
91
|
+
- lib/extensions/core/file.rb
|
92
|
+
- lib/extensions/core/object.rb
|
93
|
+
- lib/extensions/core/pathname.rb
|
94
|
+
- lib/extensions/core/string.rb
|
95
|
+
- lib/extensions/gem/platform.rb
|
92
96
|
- publish
|
97
|
+
- test/functional/test_commands.rb
|
93
98
|
- test/helper.rb
|
94
|
-
- test/
|
99
|
+
- test/unit/test_pathname.rb
|
100
|
+
- test/unit/test_string.rb
|
95
101
|
has_rdoc: true
|
96
102
|
homepage: http://github.com/csd/csd
|
97
103
|
licenses: []
|
@@ -127,5 +133,7 @@ signing_key:
|
|
127
133
|
specification_version: 3
|
128
134
|
summary: Installation and compilation handler for software used in CSD projects.
|
129
135
|
test_files:
|
136
|
+
- test/functional/test_commands.rb
|
130
137
|
- test/helper.rb
|
131
|
-
- test/
|
138
|
+
- test/unit/test_pathname.rb
|
139
|
+
- test/unit/test_string.rb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'minisip')
|
2
|
-
|
3
|
-
module CSD
|
4
|
-
module Application
|
5
|
-
module Minisip
|
6
|
-
class MinisipLinux < Minisip
|
7
|
-
|
8
|
-
def build!
|
9
|
-
define_paths
|
10
|
-
create_working_dir
|
11
|
-
install_aptitude_dependencies
|
12
|
-
checkout_repository
|
13
|
-
make_libraries
|
14
|
-
fix_aclocal_dirlist
|
15
|
-
ldconfig_and_gtkgui
|
16
|
-
end
|
17
|
-
|
18
|
-
def install_aptitude_dependencies
|
19
|
-
['git-core', 'subversion', 'automake', 'libssl-dev', 'libtool', 'libglademm-2.4-dev'].each do |apt|
|
20
|
-
run_command("sudo apt-get --yes install #{apt}")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def fix_aclocal_dirlist
|
25
|
-
run_command "sudo echo /usr/local/share/aclocal >> /usr/share/aclocal/dirlist"
|
26
|
-
end
|
27
|
-
|
28
|
-
def ldconfig_and_gtkgui
|
29
|
-
run_command("ldconfig /usr/local/lib/libminisip.so.0")
|
30
|
-
run_command("minisip_gtkgui")
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'base')
|
2
|
-
|
3
|
-
module CSD
|
4
|
-
module Application
|
5
|
-
module Minisip
|
6
|
-
class Minisip < CSD::Application::Base
|
7
|
-
|
8
|
-
def introduction
|
9
|
-
super
|
10
|
-
log
|
11
|
-
log "Hello, I'm the application #{self.class.name}"
|
12
|
-
exit unless ask_yes_no("Continue?", true)
|
13
|
-
build!
|
14
|
-
end
|
15
|
-
|
16
|
-
def build!
|
17
|
-
define_paths
|
18
|
-
create_working_dir
|
19
|
-
checkout_repository
|
20
|
-
make_libraries
|
21
|
-
end
|
22
|
-
|
23
|
-
def define_paths
|
24
|
-
path.work = File.expand_path(File.join(path.root, 'minisip_building'))
|
25
|
-
path.repository = File.expand_path(File.join(path.work, 'repository'))
|
26
|
-
end
|
27
|
-
|
28
|
-
def create_working_dir
|
29
|
-
if File.directory?(path.work)
|
30
|
-
log "Working directory ´#{path.work}´ already exists."
|
31
|
-
else
|
32
|
-
log "Creating working directory ´#{path.work}´"
|
33
|
-
Dir.mkdir(path.work)
|
34
|
-
end
|
35
|
-
Dir.chdir(path.work)
|
36
|
-
end
|
37
|
-
|
38
|
-
def checkout_repository
|
39
|
-
if File.directory?(path.repository)
|
40
|
-
log "The minisip repository already exists in ´#{path.repository}´"
|
41
|
-
else
|
42
|
-
log "Checking out minisip repository to ´#{path.repository}´"
|
43
|
-
#run_command("git clone http://github.com/csd/minisip.git repository")
|
44
|
-
if test_command('svn', 'info', 'svn://minisip.org/minisip/trunk')
|
45
|
-
run_command("svn co svn://minisip.org/minisip/trunk #{path.repository}")
|
46
|
-
else
|
47
|
-
log "Sorry, something is wrong with subversion.".red.bold
|
48
|
-
exit
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def make_libraries
|
54
|
-
['libmutil', 'libmnetutil', 'libmcrypto', 'libmikey', 'libmsip', 'libmstun', 'libminisip'].each do |lib|
|
55
|
-
lib_dir = File.join(path.repository, lib)
|
56
|
-
if File.directory?(lib_dir)
|
57
|
-
Dir.chdir(lib_dir)
|
58
|
-
log "Bootstrapping #{lib}".green.bold
|
59
|
-
run_command("./bootstrap")
|
60
|
-
log "Configuring #{lib}".green.bold
|
61
|
-
run_command("./configure")
|
62
|
-
log "Make #{lib}".green.bold
|
63
|
-
run_command("make")
|
64
|
-
log "Make install #{lib}".green.bold
|
65
|
-
run_command("make install")
|
66
|
-
else
|
67
|
-
log "Skipping ´#{lib}´ because ´#{lib_dir}´ could not be found".red.bold
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/lib/extensions/array.rb
DELETED
data/lib/extensions/string.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'term/ansicolor'
|
2
|
-
#require 'active_support'
|
3
|
-
|
4
|
-
module StringExtensions
|
5
|
-
|
6
|
-
#def constantize
|
7
|
-
# ActiveSupport::Inflector.constantize(self)
|
8
|
-
#end
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
class String #:nodoc:
|
13
|
-
include Term::ANSIColor
|
14
|
-
include StringExtensions
|
15
|
-
end
|