akro 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/akro.rb +16 -9
  3. data/lib/akrobuild.rake +8 -7
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9cde35182bf4c229ae6c69f93d9b93845dd465b
4
- data.tar.gz: b4eddd80a57434cc08afa83573c224a6eacdb4c0
3
+ metadata.gz: 4edd5eba5c3d173422d004d467b3b1421ca106aa
4
+ data.tar.gz: 7da62956faa155e9745c302051d400cd1fe10b53
5
5
  SHA512:
6
- metadata.gz: ee4b34956e2f1e70b517f42aaa7fa58fe27a355695c71d80b2c1ca24beb16e41d7b4eecac1695df45d9d886917876951b72894d4965ce963dbd45372f5a960d7
7
- data.tar.gz: c48a54a82ab33aa85a42b5047bc42fa774fcc84222879adbd2813300cdf9de6d7a1c1c3f0eed9417f6c7be4bdbc3bd5bcbd0333738c79ec86ffc6aa379786ca4
6
+ metadata.gz: e9e183811d8e7a9810ebecd5069835834c7a812b207d4a66b2b381050bf1faadd3f920ac1ebfe32d85c79c3c930ab0ee1b2465d681eb47831fea3faa3cb2ed00
7
+ data.tar.gz: ad7ae1cba7049a6965cf2de198c95f2a729955fe7cfaac375e9f4346b647deb5aa5aedb86011115646f22ff9fbf3ccf6fe17b96e94a57a5942239674cceb7b11
@@ -46,13 +46,8 @@ def windows?
46
46
  (RUBY_PLATFORM =~ /cygwin|mswin|mingw|bccwin|wince|emx/) != nil
47
47
  end
48
48
 
49
- if windows?
50
- $HEADER_EXTENSIONS = [".H", ".hpp"]
51
- $CPP_EXTENSIONS = [".C", ".cc", ".cpp", ".cxx", ".c++"]
52
- else
53
- $HEADER_EXTENSIONS = [".h", ".hpp", ".H"]
54
- $CPP_EXTENSIONS = [".c", ".cc", ".cpp", ".cxx", ".c++", ".C"]
55
- end
49
+ $HEADER_EXTENSIONS = [".h", ".hpp", ".H"]
50
+ $CPP_EXTENSIONS = [".c", ".cc", ".cpp", ".cxx", ".c++", ".C"]
56
51
  $OBJ_EXTENSION = ".o"
57
52
  $STATIC_LIB_EXTENSION = ".a"
58
53
  if windows?
@@ -83,12 +78,13 @@ $AKRO_BINARIES = []
83
78
  $BIN_EXTRA_FLAGS = Hash.new
84
79
 
85
80
  def add_binaries(*paths)
81
+ puts("add_binaries call is obsolete. Use add_binary with array instead")
86
82
  paths.each do |path|
87
83
  $AKRO_BINARIES << path.to_str()
88
84
  end
89
85
  end
90
86
 
91
- def add_binary(path: nil, additional_link_params: nil)
87
+ def add_binary_internal(path: nil, additional_link_params: nil)
92
88
  raise "Must specify path for binary" if path.nil?
93
89
  if !additional_link_params.nil? && additional_link_params != ""
94
90
  $BIN_EXTRA_FLAGS[path] = additional_link_params
@@ -96,6 +92,17 @@ def add_binary(path: nil, additional_link_params: nil)
96
92
  $AKRO_BINARIES << path.to_str()
97
93
  end
98
94
 
95
+ def add_binary(path: nil, additional_link_params: nil)
96
+ raise "No path defined" if path.nil?
97
+ files = path;
98
+ if !files.kind_of?(Array)
99
+ files = [path]
100
+ end
101
+ files.each do |file|
102
+ add_binary_internal(path: file, additional_link_params: additional_link_params)
103
+ end
104
+ end
105
+
99
106
  AkroLibrary = Struct.new("AkroLibrary", :path, :sources, :static, :recurse, :capture_deps, :additional_params)
100
107
  $AKRO_LIBS = []
101
108
 
@@ -141,7 +148,7 @@ module CmdLine
141
148
  def CmdLine.link_cmdline(mode, objs, bin)
142
149
  nomodebin = FileMapper.strip_mode(bin)
143
150
  per_file_flags = if $BIN_EXTRA_FLAGS.has_key?(nomodebin) then " " + $BIN_EXTRA_FLAGS[nomodebin] else "" end
144
- "#{$LINKER_PREFIX}#{$LINKER} #{$LINK_FLAGS} #{$MODE_LINK_FLAGS[mode]} #{objs.join(' ')} #{$ADDITIONAL_LINK_FLAGS}#{per_file_flags} -o #{bin}"
151
+ "#{$LINKER_PREFIX}#{$LINKER} #{$LINK_FLAGS} #{objs.join(' ')} #{$ADDITIONAL_LINK_FLAGS}#{per_file_flags} #{$MODE_LINK_FLAGS[mode]} -o #{bin}"
145
152
  end
146
153
  def CmdLine.static_lib_cmdline(objs, bin)
147
154
  "#{$AR} rcs #{bin} #{objs.join(' ')}"
@@ -74,8 +74,9 @@ module FileMapper
74
74
  def FileMapper.map_obj_to_cpp(path)
75
75
  raise "#{path} is not a #{$OBJ_EXTENSION} file" if !path.end_with?($OBJ_EXTENSION)
76
76
  file = FileMapper.strip_mode(path)
77
- file = file[0..-$OBJ_EXTENSION.length-1]
78
- srcs = $CPP_EXTENSIONS.map{|ext| file + ext}.select{|fname| File.exist?(fname)}
77
+ file = file[0..-$OBJ_EXTENSION.length-1]
78
+ # Under windows, make_relative_path also canonicalizes the path.
79
+ srcs = $CPP_EXTENSIONS.map{|ext| file + ext}.select{|fname| File.exist?(fname)}.map{|fname| Util.make_relative_path(fname)}.uniq
79
80
  raise "Multiple sources for base name #{file}: #{srcs.join(' ')}" if srcs.length > 1
80
81
  srcs.length == 0? nil : srcs[0]
81
82
  end
@@ -139,8 +140,6 @@ module FileMapper
139
140
  rel_path = Util.make_relative_path(path)
140
141
  # file is not local
141
142
  return nil if rel_path.nil?
142
- #$HEADER_EXTENSIONS.select{|ext| rel_path.end_with?(ext)}.each do |ext|
143
- #end
144
143
  srcs = $HEADER_EXTENSIONS.select{|ext| rel_path.end_with?(ext)}.collect{ |ext|
145
144
  base_path = rel_path[0..-ext.length-1]
146
145
  $CPP_EXTENSIONS.map{|cppext| base_path + cppext}.select{|file| File.exist?(file)}
@@ -295,7 +294,7 @@ rule ".dynlinkcmd" => ->(dc) {
295
294
  dynlib = FileMapper.map_linkcmd_to_dynamic_lib(dc)
296
295
  raise "Internal error - linkcmd not mapped for #{dynlib}" if !$LINK_BINARY_OBJS.has_key?(dynlib)
297
296
  mode = FileMapper.get_mode_from_akpath(dc)
298
- cmd = CmdLine.dynamic_lib_cmdline(mode, $LINK_BINARY_OBJS[dynlib], "", dynlib)
297
+ cmd = CmdLine.dynamic_lib_cmdline(mode, $LINK_BINARY_OBJS[dynlib], $LINK_LIBRARY_EXTRAFLAGS[dynlib], dynlib)
299
298
  if File.exists?(dc) && File.read(dc).strip == cmd.strip then
300
299
  []
301
300
  else
@@ -307,7 +306,7 @@ rule ".dynlinkcmd" => ->(dc) {
307
306
  FileUtils.mkdir_p(basedir)
308
307
  output = File.open(task.name, "w")
309
308
  mode = FileMapper.get_mode_from_akpath(task.name)
310
- output << CmdLine.dynamic_lib_cmdline(mode, $LINK_BINARY_OBJS[dynlib], "", dynlib) << "\n"
309
+ output << CmdLine.dynamic_lib_cmdline(mode, $LINK_BINARY_OBJS[dynlib], $LINK_LIBRARY_EXTRAFLAGS[dynlib], dynlib) << "\n"
311
310
  output.close
312
311
  end
313
312
 
@@ -334,7 +333,7 @@ end
334
333
 
335
334
  rule ".depcache" => ->(dc){
336
335
  [FileMapper.map_dc_to_compcmd(dc), FileMapper.map_dc_to_cpp(dc)] +
337
- (File.exist?(dc) ? File.readlines(dc).map{|line| line.strip}: [])
336
+ (File.exist?(dc) ? File.readlines(dc).map{|line| line.strip}.map{|file| File.exist?(file) ? file : "always"}: [])
338
337
  } do |task|
339
338
  src = FileMapper.map_dc_to_cpp(task.name)
340
339
  Builder.create_depcache(src, task.name)
@@ -356,6 +355,7 @@ def libname(mode, lib)
356
355
  end
357
356
 
358
357
  $LINK_BINARY_OBJS = Hash.new
358
+ $LINK_LIBRARY_EXTRAFLAGS = Hash.new
359
359
 
360
360
  rule ".exe" => ->(binary){
361
361
  obj = binary.gsub(/\.exe$/, $OBJ_EXTENSION)
@@ -462,6 +462,7 @@ rule $DYNAMIC_LIB_EXTENSION => ->(library) {
462
462
  $CAPTURING_LIBS << library
463
463
  end
464
464
  $LINK_BINARY_OBJS[library] = objs
465
+ $LINK_LIBRARY_EXTRAFLAGS[library] = libspec.additional_params
465
466
  [FileMapper.map_dynamic_lib_to_linkcmd(library)] + objs
466
467
  } do |task|
467
468
  libspec = nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Petric
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-16 00:00:00.000000000 Z
11
+ date: 2017-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake