paper_house 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +17 -0
- data/Gemfile +35 -0
- data/Guardfile +28 -0
- data/README.md +116 -0
- data/Rakefile +139 -0
- data/cucumber.yml +3 -0
- data/examples/c_extension/.gitignore +5 -0
- data/examples/c_extension/Rakefile +3 -0
- data/examples/c_extension/Rakefile.llvm +5 -0
- data/examples/c_extension/hello.c +6 -0
- data/examples/executable/.gitignore +4 -0
- data/examples/executable/Rakefile +3 -0
- data/examples/executable/Rakefile.llvm +5 -0
- data/examples/executable/hello.c +7 -0
- data/examples/executable_subdirs/.gitignore +4 -0
- data/examples/executable_subdirs/Rakefile +9 -0
- data/examples/executable_subdirs/includes/hello.h +1 -0
- data/examples/executable_subdirs/sources/hello.c +6 -0
- data/examples/executable_subdirs/sources/main.c +8 -0
- data/examples/shared_library/.gitignore +8 -0
- data/examples/shared_library/Rakefile +17 -0
- data/examples/shared_library/Rakefile.llvm +19 -0
- data/examples/shared_library/hello.c +6 -0
- data/examples/shared_library/hello.h +1 -0
- data/examples/shared_library/main.c +7 -0
- data/examples/shared_library/symlinks.rake +7 -0
- data/examples/shared_library_subdirs/.gitignore +8 -0
- data/examples/shared_library_subdirs/Rakefile +27 -0
- data/examples/shared_library_subdirs/includes/hello.h +1 -0
- data/examples/shared_library_subdirs/sources/hello.c +6 -0
- data/examples/shared_library_subdirs/sources/main.c +8 -0
- data/examples/static_library/.gitignore +7 -0
- data/examples/static_library/Rakefile +13 -0
- data/examples/static_library/Rakefile.llvm +14 -0
- data/examples/static_library/hello.c +6 -0
- data/examples/static_library/hello.h +1 -0
- data/examples/static_library/main.c +7 -0
- data/examples/static_library_subdirs/.gitignore +7 -0
- data/examples/static_library_subdirs/Rakefile +17 -0
- data/examples/static_library_subdirs/includes/hello.h +1 -0
- data/examples/static_library_subdirs/sources/hello.c +6 -0
- data/examples/static_library_subdirs/sources/main.c +8 -0
- data/features/c_extension_task.feature +119 -0
- data/features/executable_task.feature +83 -0
- data/features/shared_library_task.feature +209 -0
- data/features/static_library_task.feature +116 -0
- data/features/step_definitions/paper_house_steps.rb +8 -0
- data/features/support/env.rb +41 -0
- data/features/support/hooks.rb +12 -0
- data/lib/paper_house/auto_depends.rb +95 -0
- data/lib/paper_house/build_task.rb +188 -0
- data/lib/paper_house/c_extension_task.rb +95 -0
- data/lib/paper_house/cc_options.rb +81 -0
- data/lib/paper_house/dependency.rb +74 -0
- data/lib/paper_house/executable_task.rb +77 -0
- data/lib/paper_house/library_task.rb +64 -0
- data/lib/paper_house/linker_options.rb +89 -0
- data/lib/paper_house/platform.rb +69 -0
- data/lib/paper_house/safe_popen.rb +50 -0
- data/lib/paper_house/shared_library_task.rb +92 -0
- data/lib/paper_house/static_library_task.rb +65 -0
- data/lib/paper_house/version.rb +30 -0
- data/lib/paper_house.rb +30 -0
- data/paper_house.gemspec +34 -0
- data/spec/paper_house/c_extension_task_spec.rb +59 -0
- data/spec/paper_house/cc_options_spec.rb +59 -0
- data/spec/paper_house/executable_task_spec.rb +49 -0
- data/spec/paper_house/shared_library_task_spec.rb +94 -0
- data/spec/paper_house/static_library_task_spec.rb +61 -0
- data/spec/paper_house/version_spec.rb +31 -0
- data/spec/spec_helper.rb +46 -0
- metadata +161 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
module PaperHouse
|
20
|
+
#
|
21
|
+
# Linker option utilities.
|
22
|
+
#
|
23
|
+
module LinkerOptions
|
24
|
+
# @!attribute ldflags
|
25
|
+
# Linker options pass to C compiler.
|
26
|
+
attr_writer :ldflags
|
27
|
+
|
28
|
+
def ldflags
|
29
|
+
@ldflags ||= []
|
30
|
+
[ @ldflags ].flatten.compact
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#
|
35
|
+
# List of libraries to link.
|
36
|
+
#
|
37
|
+
def library_dependencies= name
|
38
|
+
@library_dependencies = [ name ].flatten.compact
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
#
|
43
|
+
# List of libraries to link.
|
44
|
+
#
|
45
|
+
def library_dependencies
|
46
|
+
@library_dependencies ||= []
|
47
|
+
[ @library_dependencies ].flatten.compact
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
############################################################################
|
52
|
+
private
|
53
|
+
############################################################################
|
54
|
+
|
55
|
+
|
56
|
+
def find_prerequisites task, klass_list
|
57
|
+
klass_list.each do | klass |
|
58
|
+
maybe_enhance task, klass
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
def maybe_enhance name, klass
|
64
|
+
task = klass.find_by( name )
|
65
|
+
enhance task if task
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
def enhance library_task
|
70
|
+
@library_dependencies ||= []
|
71
|
+
@library_dependencies |= [ library_task.lname ]
|
72
|
+
Rake::Task[ target_path ].enhance [ library_task.target_path ]
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def l_options
|
77
|
+
library_dependencies.collect do | each |
|
78
|
+
"-l#{ each }"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
### Local variables:
|
86
|
+
### mode: Ruby
|
87
|
+
### coding: utf-8-unix
|
88
|
+
### indent-tabs-mode: nil
|
89
|
+
### End:
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "rbconfig"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
#
|
24
|
+
# Platform-dependent stuff.
|
25
|
+
#
|
26
|
+
module Platform
|
27
|
+
include RbConfig
|
28
|
+
|
29
|
+
|
30
|
+
# MACOSX or not.
|
31
|
+
MAC = ( /darwin|mac os/=~ CONFIG[ "host_os" ] )
|
32
|
+
|
33
|
+
|
34
|
+
if MAC
|
35
|
+
# File extension of C extensions.
|
36
|
+
SHARED_EXT = ".bundle"
|
37
|
+
# CC options for compiling shared libraries.
|
38
|
+
LDSHARED = "-dynamic -bundle"
|
39
|
+
# CC option for setting soname.
|
40
|
+
SONAME_OPTION = "-install_name"
|
41
|
+
else
|
42
|
+
SHARED_EXT = ".so"
|
43
|
+
LDSHARED = "-shared"
|
44
|
+
SONAME_OPTION = "-soname"
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
# Include directories for compiling C extensions.
|
49
|
+
RUBY_INCLUDES = if RUBY_VERSION >= "1.9.0"
|
50
|
+
[
|
51
|
+
File.join( CONFIG[ "rubyhdrdir" ], CONFIG[ "arch" ] ),
|
52
|
+
File.join( CONFIG[ "rubyhdrdir" ], "ruby/backward" ),
|
53
|
+
CONFIG[ "rubyhdrdir" ]
|
54
|
+
]
|
55
|
+
else
|
56
|
+
[ CONFIG[ "archdir" ] ]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Library directories for compiling C extensions.
|
60
|
+
RUBY_LIBDIR = CONFIG[ "libdir" ]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
### Local variables:
|
66
|
+
### mode: Ruby
|
67
|
+
### coding: utf-8-unix
|
68
|
+
### indent-tabs-mode: nil
|
69
|
+
### End:
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "popen4"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
#
|
24
|
+
# Thin POpen4 wrapper that avoids POpen4's segraults in 1.8.6.
|
25
|
+
# See also https://github.com/engineyard/engineyard/issues/115
|
26
|
+
#
|
27
|
+
class SafePopen
|
28
|
+
#
|
29
|
+
# Starts a new process and pass the subprocess IOs and pid to the
|
30
|
+
# block supplied.
|
31
|
+
#
|
32
|
+
def self.popen command, &block
|
33
|
+
status = nil
|
34
|
+
begin
|
35
|
+
GC.disable
|
36
|
+
status = POpen4.popen4( command, &block )
|
37
|
+
ensure
|
38
|
+
GC.enable
|
39
|
+
end
|
40
|
+
status
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
### Local variables:
|
47
|
+
### mode: Ruby
|
48
|
+
### coding: utf-8-unix
|
49
|
+
### indent-tabs-mode: nil
|
50
|
+
### End:
|
@@ -0,0 +1,92 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/library_task"
|
20
|
+
require "paper_house/linker_options"
|
21
|
+
require "paper_house/platform"
|
22
|
+
|
23
|
+
|
24
|
+
module PaperHouse
|
25
|
+
# Compiles *.c files into a shared library.
|
26
|
+
class SharedLibraryTask < LibraryTask
|
27
|
+
include LinkerOptions
|
28
|
+
include Platform
|
29
|
+
|
30
|
+
|
31
|
+
# Library version string.
|
32
|
+
attr_accessor :version
|
33
|
+
|
34
|
+
|
35
|
+
def initialize name, version = nil, &block
|
36
|
+
@version = version
|
37
|
+
super name, &block
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
# Real name of target library.
|
42
|
+
def target_file_name
|
43
|
+
fail ":version option is a mandatory." if not @version
|
44
|
+
[ linker_name, @version ].join "."
|
45
|
+
end
|
46
|
+
alias :real_name :target_file_name
|
47
|
+
|
48
|
+
|
49
|
+
# Name of library used by linkers.
|
50
|
+
def linker_name
|
51
|
+
library_name + ".so"
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Soname of target library.
|
56
|
+
def soname
|
57
|
+
File.basename( target_file_name ).sub( /\.\d+\.\d+\Z/, "" )
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
############################################################################
|
62
|
+
private
|
63
|
+
############################################################################
|
64
|
+
|
65
|
+
|
66
|
+
def generate_target
|
67
|
+
sh ( [ cc ] + cc_options ).join( " " )
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def cc_options
|
72
|
+
[ "-shared", wl_option, o_option, objects, ldflags, l_options ].flatten
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def wl_option
|
77
|
+
"-Wl,#{ SONAME_OPTION },#{ soname }"
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def o_option
|
82
|
+
"-o #{ target_path }"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
### Local variables:
|
89
|
+
### mode: Ruby
|
90
|
+
### coding: utf-8-unix
|
91
|
+
### indent-tabs-mode: nil
|
92
|
+
### End:
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/library_task"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
# Compiles *.c files into a static library.
|
24
|
+
class StaticLibraryTask < LibraryTask
|
25
|
+
# Name of target library file.
|
26
|
+
def target_file_name
|
27
|
+
library_name + ".a"
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
##########################################################################
|
32
|
+
private
|
33
|
+
##########################################################################
|
34
|
+
|
35
|
+
|
36
|
+
def generate_target
|
37
|
+
maybe_rm_target
|
38
|
+
ar
|
39
|
+
ranlib
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
def maybe_rm_target
|
44
|
+
a_file = target_path
|
45
|
+
sh "rm #{ a_file }" if FileTest.exist?( a_file )
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def ar
|
50
|
+
sh "ar -cq #{ target_path } #{ objects.to_s }"
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def ranlib
|
55
|
+
sh "ranlib #{ target_path }"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
### Local variables:
|
62
|
+
### mode: Ruby
|
63
|
+
### coding: utf-8-unix
|
64
|
+
### indent-tabs-mode: nil
|
65
|
+
### End:
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
# Base module.
|
20
|
+
module PaperHouse
|
21
|
+
# gem version.
|
22
|
+
VERSION = "0.4.0"
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
### Local variables:
|
27
|
+
### mode: Ruby
|
28
|
+
### coding: utf-8
|
29
|
+
### indent-tabs-mode: nil
|
30
|
+
### End:
|
data/lib/paper_house.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/c_extension_task"
|
20
|
+
require "paper_house/executable_task"
|
21
|
+
require "paper_house/shared_library_task"
|
22
|
+
require "paper_house/static_library_task"
|
23
|
+
require "paper_house/version"
|
24
|
+
|
25
|
+
|
26
|
+
### Local variables:
|
27
|
+
### mode: Ruby
|
28
|
+
### coding: utf-8-unix
|
29
|
+
### indent-tabs-mode: nil
|
30
|
+
### End:
|
data/paper_house.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
lib = File.expand_path( "../lib", __FILE__ )
|
2
|
+
$LOAD_PATH.unshift( lib ) unless $LOAD_PATH.include?( lib )
|
3
|
+
require "paper_house/version"
|
4
|
+
|
5
|
+
|
6
|
+
Gem::Specification.new do | gem |
|
7
|
+
gem.name = "paper_house"
|
8
|
+
gem.version = PaperHouse::VERSION
|
9
|
+
gem.summary = "Rake for C projects."
|
10
|
+
gem.description = "Rake tasks for compiling C projects."
|
11
|
+
|
12
|
+
gem.license = "GPL3"
|
13
|
+
|
14
|
+
gem.authors = [ "Yasuhito Takamiya" ]
|
15
|
+
gem.email = [ "yasuhito@gmail.com" ]
|
16
|
+
gem.homepage = "http://github.com/trema/paper-house"
|
17
|
+
|
18
|
+
gem.files = `git ls-files`.split( "\n" )
|
19
|
+
|
20
|
+
gem.require_paths = [ "lib" ]
|
21
|
+
|
22
|
+
gem.extra_rdoc_files = [ "README.md" ]
|
23
|
+
gem.test_files = `git ls-files -- {spec,features}/*`.split( "\n" )
|
24
|
+
|
25
|
+
gem.add_dependency "POpen4", "~> 0.1.4"
|
26
|
+
gem.add_dependency "rake", "~> 10.1.0"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
### Local variables:
|
31
|
+
### mode: Ruby
|
32
|
+
### coding: utf-8-unix
|
33
|
+
### indent-tabs-mode: nil
|
34
|
+
### End:
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/c_extension_task"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
[ CExtensionTask, RubyLibraryTask ].each do | klass |
|
24
|
+
describe klass, ".new :libtest" do
|
25
|
+
subject { klass.new :libtest }
|
26
|
+
|
27
|
+
its( :cc ) { should eq "gcc" }
|
28
|
+
its( :cflags ) { should be_empty }
|
29
|
+
its( :includes ) { should be_empty }
|
30
|
+
its( :name ) { should eq "libtest" }
|
31
|
+
its( :sources ) { should eq "*.c" }
|
32
|
+
its( :target_directory ) { should eq "." }
|
33
|
+
|
34
|
+
it {
|
35
|
+
expect {
|
36
|
+
Rake::Task[ subject.name ].invoke
|
37
|
+
}.to raise_error( "Cannot find sources (*.c)." )
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
describe klass, ".new( :libtest ) do ... end" do
|
43
|
+
subject {
|
44
|
+
klass.new :libtest do | task |
|
45
|
+
task.library_name = "test"
|
46
|
+
end
|
47
|
+
}
|
48
|
+
|
49
|
+
its( :library_name ) { should eq "test" }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
### Local variables:
|
56
|
+
### mode: Ruby
|
57
|
+
### coding: utf-8-unix
|
58
|
+
### indent-tabs-mode: nil
|
59
|
+
### End:
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/cc_options"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
class TestTask
|
24
|
+
include CcOptions
|
25
|
+
|
26
|
+
public
|
27
|
+
:i_options
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe CcOptions, "(default properties)" do
|
32
|
+
subject { TestTask.new }
|
33
|
+
|
34
|
+
its( :sources ) { should eq "*.c" }
|
35
|
+
its( :cflags ) { should be_empty }
|
36
|
+
its( :includes ) { should be_empty }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
describe CcOptions, "(sources=./sources/foo.c, includes=./includes)" do
|
41
|
+
subject {
|
42
|
+
task = TestTask.new
|
43
|
+
task.sources = "./sources/foo.c"
|
44
|
+
task.includes = "./includes"
|
45
|
+
task
|
46
|
+
}
|
47
|
+
|
48
|
+
its( "i_options.size" ) { should eq 2 }
|
49
|
+
its( :i_options ) { should include "-I./includes" }
|
50
|
+
its( :i_options ) { should include "-I./sources" }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
### Local variables:
|
56
|
+
### mode: Ruby
|
57
|
+
### coding: utf-8-unix
|
58
|
+
### indent-tabs-mode: nil
|
59
|
+
### End:
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 3, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require "paper_house/executable_task"
|
20
|
+
|
21
|
+
|
22
|
+
module PaperHouse
|
23
|
+
describe ExecutableTask, ".new( :test )" do
|
24
|
+
subject { ExecutableTask.new :test }
|
25
|
+
|
26
|
+
its( :cc ) { should eq "gcc" }
|
27
|
+
its( :cflags ) { should be_empty }
|
28
|
+
its( :executable_name ) { should eq "test" }
|
29
|
+
its( :includes ) { should be_empty }
|
30
|
+
its( :ldflags ) { should be_empty }
|
31
|
+
its( :library_dependencies ) { should be_empty }
|
32
|
+
its( :name ) { should eq "test" }
|
33
|
+
its( :sources ) { should eq "*.c" }
|
34
|
+
its( :target_directory ) { should eq "." }
|
35
|
+
|
36
|
+
it {
|
37
|
+
expect {
|
38
|
+
Rake::Task[ subject.name ].invoke
|
39
|
+
}.to raise_error( "Cannot find sources (*.c)." )
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
### Local variables:
|
46
|
+
### mode: Ruby
|
47
|
+
### coding: utf-8-unix
|
48
|
+
### indent-tabs-mode: nil
|
49
|
+
### End:
|