comfpile-old/bin/console

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