101 lines
2.6 KiB
Ruby
Executable file
101 lines
2.6 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require "bundler/setup"
|
|
require "comfpile"
|
|
|
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
# with your gem easier. You can also use a different console, if you like.
|
|
|
|
$core = Comfpile::Core.new()
|
|
|
|
`mkdir /tmp/test`
|
|
`touch /tmp/test/main.cpp`
|
|
|
|
`mkdir /tmp/test2/`
|
|
`touch /tmp/test2/main.cpp`
|
|
|
|
$core.add_artefact_engine Comfpile::FilesourceEngine, root_path: "/tmp/test2"
|
|
$core.add_artefact_engine Comfpile::FilesourceEngine, root_path: "/tmp/test"
|
|
|
|
|
|
$core.add_artefact_engine do |engine|
|
|
engine.add_recipe(:parsed, /^(.+)\.(h|c|cpp)$/) do |match, a|
|
|
|
|
a.parent_artefact :sourcefile, a.target
|
|
|
|
a.add_step do
|
|
puts "Parsing file #{@target}..."
|
|
|
|
@linked_artefacts = []
|
|
|
|
File.readlines(@required_artefacts[:sourcefile][@target][:file]).each do |l|
|
|
case l
|
|
when /^#include\s*[<"](.+)[>"]/
|
|
|
|
puts "Got include for file #{$1}!"
|
|
@linked_artefacts << craft_artefact(:parsed, $1)
|
|
|
|
when /\/\/+\s*require\s*[<"]((?:.+)\.(?:c|cpp))[>"]/
|
|
puts "Got require for file #{$1}!"
|
|
@linked_artefacts << require_artefact(:parsed, $1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
engine.add_recipe(:dependency_list, /^(.+)\.(h|c|cpp)$/) do |match, a|
|
|
a.parent_artefact :parsed, a.target
|
|
|
|
a.add_step do
|
|
puts "Generating dependency list for #{@target}..."
|
|
|
|
parsed_marker = {}
|
|
parsing_list = [@parent_artefact]
|
|
|
|
loop do
|
|
break if parsing_list.empty?
|
|
a = parsing_list.pop
|
|
|
|
next if a.nil?
|
|
next unless a.stage == :parsed
|
|
next unless a.succeeded?
|
|
|
|
next if parsed_marker[a.target]
|
|
parsed_marker[a.target] = true
|
|
|
|
parsing_list += a.linked_artefacts
|
|
end
|
|
|
|
@parameters[:dependency_list] = parsed_marker.keys
|
|
end
|
|
end
|
|
|
|
engine.add_recipe(:x86_debug, /^run (.+)/) do |match, a|
|
|
|
|
a.require_artefact :parsed, "#{match[1]}.cpp"
|
|
end
|
|
|
|
engine.add_recipe(:x86_debug, /(.+)\.o$/) do |match, a|
|
|
a.require_artefact :sourcefile, "#{match[1]}.cpp"
|
|
|
|
a.add_step do
|
|
|
|
end
|
|
|
|
true
|
|
end
|
|
end
|
|
|
|
$tst = $core.craft_artefact(:dependency_list, "main.cpp");
|
|
|
|
50.times do
|
|
$core.execute_step
|
|
end
|
|
|
|
puts "Dependency list is: #{$tst[:dependency_list]}"
|
|
|
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
require "pry"
|
|
Pry.start
|
|
|