canoe 0.3.1.1 → 0.3.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f86609a6f492e0a6633dab5d94a46443c24de7cad25640d9b4cfa0a8c97b2907
4
- data.tar.gz: e80970d6113b6a155edbfed18e490ad297ad75d0da626394ecdc9d4f2a166d7b
3
+ metadata.gz: 7b97a389b6d90008ad3e69fc0937e7382f904574ae28180f2fe98c9920f41aca
4
+ data.tar.gz: 8e1fe69ac5b71343a68389d2053a691caa4df6b7ca51c03c2bc50ec5e3527d51
5
5
  SHA512:
6
- metadata.gz: 69ea4c7960c5240f870b9d9a851a55cf3ebfa41fed2417b2a0eae9d49dff93fe6d1bb1e0dedfcb6abf72d5c452ca38297b643848d25a1103000d0b280765f4a8
7
- data.tar.gz: b9fc0c80a96a201af4f32eb6d8d787ebe7869996fbdd2c97b5f0c2f0871c52e5ae3bdeef94b2f79e5153a2fc5c43704fa6a3ee7b9286771de9aceed60339c798
6
+ metadata.gz: 7d8698fea60f94b97246aecd1af2b51a2996871fdabc2aa0fab47c84dd764ac20c7b460cd3183d653777f11b8c403c36b2f6054f8d60baff65ca7e47f11fac9c
7
+ data.tar.gz: c740ad122d12eb555aae933c931cfab5dd2225057c4367cfae7f8abd1811601cafbf1e9a3987fdf0992a71d849c4d1f2d30d85bb6b078e6cb2a574e9a0ea336a
data/bin/canoe CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # require_relative '../lib/canoe'
3
2
  require 'canoe'
4
3
 
5
- Canoe.new.parse ARGV
4
+ Canoe::Builder.new.parse ARGV
data/lib/canoe.rb CHANGED
@@ -1,25 +1,27 @@
1
- require_relative "workspace/workspace.rb"
2
- require_relative "cmd"
3
- require_relative "source_files"
1
+ require_relative 'workspace/workspace'
2
+ require_relative 'cmd'
3
+ require_relative 'source_files'
4
4
 
5
- class Canoe
6
- def initialize
7
- options = ["new",
8
- "add",
9
- "build",
10
- "generate",
11
- "make",
12
- "run",
13
- "dep",
14
- "clean",
15
- "version",
16
- "help",
17
- "update",
18
- "test"]
19
- @cmd = CmdParser.new options
20
- end
5
+ module Canoe
6
+ class Builder
7
+ def initialize
8
+ options = ['new',
9
+ 'add',
10
+ 'build',
11
+ 'generate',
12
+ 'make',
13
+ 'run',
14
+ 'dep',
15
+ 'clean',
16
+ 'version',
17
+ 'help',
18
+ 'update',
19
+ 'test']
20
+ @cmd = CmdParser.new options
21
+ end
21
22
 
22
- def parse(args)
23
- @cmd.parse args
23
+ def parse(args)
24
+ @cmd.parse args
25
+ end
24
26
  end
25
27
  end
data/lib/cmd.rb CHANGED
@@ -1,112 +1,99 @@
1
- require_relative "workspace/workspace"
2
- require_relative "err"
3
- require_relative "config_reader"
1
+ require_relative 'workspace/workspace'
2
+ require_relative 'util'
3
+ require_relative 'config_reader'
4
4
 
5
5
  ##
6
6
  # class CmdParser
7
7
  # Parsing command arguments passed to canoe
8
- class CmdParser
9
- include Err
8
+ module Canoe
9
+ class CmdParser
10
+ include Err
11
+ include WorkSpaceUtil
10
12
 
11
- def initialize(options)
12
- @options = options
13
- end
14
-
15
- def parse(args)
16
- if args.size < 1
17
- abort_on_err "please give one command among #{@options.join(", ")}"
13
+ def initialize(options)
14
+ @options = options
18
15
  end
19
16
 
20
- unless @options.include?(args[0])
21
- abort_on_err "unknown command #{args[0]}"
22
- end
23
-
24
- self.send "parse_#{args[0]}", args[1..]
25
- end
26
-
27
- private
28
-
29
- def get_current_workspace
30
- abort_on_err "not in a canoe workspace" unless File.exists? ".canoe"
31
- config = ConfigReader.extract_flags("config.json")
32
-
33
- src_sfx = config["source-suffix"] ? config["source-suffix"] : "cpp"
34
- hdr_sfx = config["header-suffix"] ? config["header-suffix"] : "hpp"
17
+ def parse(args)
18
+ if args.size < 1
19
+ abort_on_err "please give one command among #{@options.join(", ")}"
20
+ end
35
21
 
36
- name = Dir.pwd.split("/")[-1]
37
- mode = File.exists?("src/main.#{src_sfx}") ? :bin : :lib
22
+ unless @options.include?(args[0])
23
+ abort_on_err "unknown command #{args[0]}"
24
+ end
38
25
 
39
- Dir.chdir("..") do
40
- return WorkSpace.new(name, mode, src_sfx, hdr_sfx)
26
+ self.send "parse_#{args[0]}", args[1..]
41
27
  end
42
- end
43
-
44
- def parse_new(args)
45
- abort_on_err "not enough arguments to canoe new" if args.size < 1
46
-
47
- name, mode = nil, "bin"
48
- suffixes = ["cpp", "hpp"]
49
28
 
50
- args.each do |arg|
51
- case arg
52
- when "--bin", "--lib"
53
- mode = arg[2..]
54
- when /--suffix=(\w+)\:(\w+)/
55
- suffixes[0], suffixes[1] = $1, $2
56
- else
57
- name = arg unless name
29
+ private
30
+ def parse_new(args)
31
+ abort_on_err "not enough arguments to canoe new" if args.size < 1
32
+
33
+ name, mode = nil, "bin"
34
+ suffixes = ["cpp", "hpp"]
35
+
36
+ args.each do |arg|
37
+ case arg
38
+ when "--bin", "--lib"
39
+ mode = arg[2..]
40
+ when /--suffix=(\w+)\:(\w+)/
41
+ suffixes[0], suffixes[1] = $1, $2
42
+ else
43
+ name = arg unless name
44
+ end
58
45
  end
46
+
47
+ abort_on_err('please give a name to this project') unless name
48
+ WorkSpace.new(name, mode.to_sym, suffixes[0], suffixes[1], true).new
59
49
  end
60
50
 
61
- abort_on_err("please give a name to this project") unless name
62
- WorkSpace.new(name, mode.to_sym, suffixes[0], suffixes[1]).new
63
- end
51
+ def parse_add(args)
52
+ if args.size < 1
53
+ abort_on_err "it's not reasonable to add a component with no name given"
54
+ end
64
55
 
65
- def parse_add(args)
66
- if args.size < 1
67
- abort_on_err "it's not reasonable to add a component with no name given"
56
+ get_current_workspace.add args
68
57
  end
69
58
 
70
- get_current_workspace.add args
71
- end
72
-
73
- def parse_build(args)
74
- get_current_workspace.build args
75
- end
59
+ def parse_build(args)
60
+ get_current_workspace.build args
61
+ end
76
62
 
77
- def parse_generate(args)
78
- get_current_workspace.generate
79
- end
63
+ def parse_generate(args)
64
+ get_current_workspace.generate
65
+ end
80
66
 
81
- def parse_run(args)
82
- get_current_workspace.run args
83
- end
67
+ def parse_run(args)
68
+ get_current_workspace.run args
69
+ end
84
70
 
85
- def parse_dep(args)
86
- get_current_workspace.dep
87
- end
71
+ def parse_dep(args)
72
+ get_current_workspace.dep
73
+ end
88
74
 
89
- def parse_clean(args)
90
- get_current_workspace.clean
91
- end
75
+ def parse_clean(args)
76
+ get_current_workspace.clean args
77
+ end
92
78
 
93
- def parse_test(args)
94
- get_current_workspace.test args
95
- end
79
+ def parse_test(args)
80
+ get_current_workspace.test args
81
+ end
96
82
 
97
- def parse_version(args)
98
- WorkSpace.version
99
- end
83
+ def parse_version(args)
84
+ WorkSpace.version
85
+ end
100
86
 
101
- def parse_help(args)
102
- WorkSpace.help
103
- end
87
+ def parse_help(args)
88
+ WorkSpace.help
89
+ end
104
90
 
105
- def parse_update(args)
106
- get_current_workspace.update
107
- end
91
+ def parse_update(args)
92
+ get_current_workspace.update
93
+ end
108
94
 
109
- def parse_make(args)
110
- get_current_workspace.make
95
+ def parse_make(args)
96
+ get_current_workspace.make
97
+ end
111
98
  end
112
99
  end
data/lib/compiler.rb CHANGED
@@ -1,50 +1,49 @@
1
+ require_relative 'util'
2
+
1
3
  ##
2
4
  # class Compiler
3
5
  # Storing compiler name in String and flags as an array
4
- class Compiler
5
- attr_reader :name, :flags
6
- ##
7
- # @name: String
8
- # @flgs: Array of String
9
- def initialize(name, compiling_flags, linking_flags)
10
- @name = name
11
- @linking_flags = linking_flags
12
- @compiling_flags = compiling_flags
13
- end
14
-
15
- def compiling_flags_as_str
16
- @compiling_flags.join " "
17
- end
18
-
19
- def linking_flags_as_str
20
- @linking_flags.join " "
21
- end
22
-
23
- def append_compiling_flag(flag)
24
- @compiling_flags << flag
25
- end
26
-
27
- def append_linking_flag(flag)
28
- @linking_flags << flag
29
- end
30
-
31
- def compile(src, out)
32
- puts "#{name} -o #{out} #{compiling_flags_as_str} -c #{src}"
33
- system "#{name} -o #{out} #{compiling_flags_as_str} -c #{src}"
34
- end
35
-
36
- def link_executable(out, objs)
37
- puts "#{name} -o #{out} #{objs.join(" ")} #{linking_flags_as_str}"
38
- system "#{name} -o #{out} #{objs.join(" ")} #{linking_flags_as_str}"
39
- end
40
-
41
- def link_shared(out, objs)
42
- puts "#{name} -shared -o #{out}.so #{objs.join(" ")} #{linking_flags_as_str}"
43
- system "#{name} -shared -o #{out}.so #{objs.join(" ")} #{linking_flags_as_str}"
44
- end
45
-
46
- def inspect
47
- puts "compiler name: #{name.inspect}"
48
- puts "compiler flags: #{flags.inspect}"
6
+ module Canoe
7
+ class Compiler
8
+ include SystemCommand
9
+
10
+ attr_reader :name, :flags
11
+
12
+ ##
13
+ # @name: String
14
+ # @flgs: Array of String
15
+ def initialize(name, compiling_flags, linking_flags)
16
+ @name = name
17
+ @linking_flags = linking_flags
18
+ @compiling_flags = compiling_flags
19
+ end
20
+
21
+ def compiling_flags_as_str
22
+ @compiling_flags.join ' '
23
+ end
24
+
25
+ def linking_flags_as_str
26
+ @linking_flags.join ' '
27
+ end
28
+
29
+ def append_compiling_flag(flag)
30
+ @compiling_flags << flag
31
+ end
32
+
33
+ def append_linking_flag(flag)
34
+ @linking_flags << flag
35
+ end
36
+
37
+ def compile(src, out)
38
+ issue_command "#{name} -o #{out} #{compiling_flags_as_str} -c #{src}"
39
+ end
40
+
41
+ def link_executable(out, objs)
42
+ issue_command "#{name} -o #{out} #{objs.join(' ')} #{linking_flags_as_str}"
43
+ end
44
+
45
+ def link_shared(out, objs)
46
+ issue_command "#{name} -shared -o #{out}.so #{objs.join(' ')} #{linking_flags_as_str}"
47
+ end
49
48
  end
50
49
  end
data/lib/config_reader.rb CHANGED
@@ -1,11 +1,11 @@
1
- require "json"
1
+ require 'json'
2
2
 
3
3
  ##
4
4
  # class ConfigReader
5
5
  # Just read a json file
6
6
  class ConfigReader
7
7
  def self.extract_flags(file)
8
- abort_on_err("config file #{file} does not exsit") unless File.exists? file
8
+ abort_on_err("config file #{file} does not exsit") unless File.exist? file
9
9
  JSON.parse(File.read(file))
10
10
  end
11
11
  end
data/lib/default_files.rb CHANGED
@@ -5,12 +5,12 @@
5
5
  class DefaultFiles
6
6
  class << self
7
7
  def open_file_and_write(filename, content)
8
- File.open(filename, "w") do |f|
8
+ File.open(filename, 'w') do |f|
9
9
  f.write(content)
10
10
  end
11
11
  end
12
12
 
13
- def create_config(path, src_sfx = "cpp", hdr_sfx = "hpp")
13
+ def create_config(path, src_sfx = 'cpp', hdr_sfx = 'hpp')
14
14
  open_file_and_write(
15
15
  "#{path}/config.json",
16
16
  <<~CONFIG
@@ -25,16 +25,15 @@ class DefaultFiles
25
25
  "std": "-std=c++17"
26
26
  },
27
27
  "link": {
28
-
28
+
29
29
  }
30
30
  }
31
31
  }
32
32
  CONFIG
33
-
34
- )
33
+ )
35
34
  end
36
35
 
37
- def create_main(path, suffix = "cpp")
36
+ def create_main(path, suffix = 'cpp')
38
37
  open_file_and_write(
39
38
  "#{path}/main.#{suffix}",
40
39
  <<~DOC
@@ -43,56 +42,40 @@ class DefaultFiles
43
42
  std::cout << "hello world!" << std::endl;
44
43
  }
45
44
  DOC
46
-
47
- )
45
+ )
48
46
  end
49
47
 
50
- def create_lib_header(path, lib_name, suffix = "hpp")
48
+ def create_lib_header(path, lib_name, suffix = 'hpp')
51
49
  open_file_and_write(
52
50
  "#{path}/#{lib_name}.#{suffix}",
53
51
  <<~DOC
54
52
  #ifndef __#{lib_name.upcase}__
55
53
  #define __#{lib_name.upcase}__
56
-
54
+
57
55
  #endif
58
56
  DOC
59
-
60
- )
57
+ )
61
58
  end
62
59
 
63
- # def create_emacs_dir_local(path)
64
- # open_file_and_write(
65
- # "#{path}/.dir-locals.el",
66
- # <<~DOC
67
- # ((nil . ((company-clang-arguments . ("-I./src/components/"
68
- # "-I./components/"))))
69
- # (nil . ((company-c-headers-path-user . ("./src/components/"
70
- # "./components/")))))
71
- # DOC
72
- # )
73
- # end
74
-
75
- def create_cpp(filename, src_sfx = "cpp", hdr_sfx = "hpp")
60
+ def create_cpp(filename, src_sfx = 'cpp', hdr_sfx = 'hpp')
76
61
  open_file_and_write(
77
62
  "#{filename}.#{src_sfx}",
78
63
  <<~DOC
79
64
  #include "#{filename}.#{hdr_sfx}"
80
65
  DOC
81
-
82
- )
66
+ )
83
67
  end
84
68
 
85
- def create_hpp(workspace, prefix, filename, hdr_sfx = "hpp")
69
+ def create_hpp(workspace, prefix, filename, hdr_sfx = 'hpp')
86
70
  open_file_and_write(
87
71
  "#{filename}.#{hdr_sfx}",
88
72
  <<~DOC
89
73
  #ifndef __#{workspace.upcase}__#{prefix.upcase}__#{filename.upcase}__
90
74
  #define __#{workspace.upcase}__#{prefix.upcase}__#{filename.upcase}__
91
-
75
+
92
76
  #endif
93
77
  DOC
94
-
95
- )
78
+ )
96
79
  end
97
80
  end
98
81
  end