73 lines
2 KiB
Ruby
Executable file
73 lines
2 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()
|
|
|
|
$core.add_artefact_engine Comfpile::FilesourceEngine, root_path: File.join(File.dirname(__FILE__), '../test/faux_build_dir')
|
|
|
|
$core.add_artefact_engine Comfpile::ParserEngine,
|
|
file_regex: /^(.+)\.(h|c|cpp)$/,
|
|
search_regexes: [
|
|
{
|
|
regex: /^#include\s*[<"](?<value>.+)[>"]/,
|
|
key: 'include'
|
|
},
|
|
{
|
|
regex: /\/\/\s*comf\.(?<key>\w+)[=:]\s*(?<value>.+)/
|
|
}
|
|
]
|
|
|
|
$core.add_artefact_engine do |engine|
|
|
|
|
engine.add_recipe(:dependency_list, /^(.+)\.(h|c|cpp)$/) do |match, a|
|
|
|
|
a.require_artefact :dependency_analysis, a.target
|
|
a.require_artefact :dependency_analysis_include, a.target
|
|
|
|
a.add_step do
|
|
deps_artefact = find_artefact(:dependency_analysis, @target)
|
|
@parameters[:dependency_list] = deps_artefact.dependencies
|
|
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
|
|
|
|
t_start = Time.now()
|
|
dep_art = $core.craft_and_complete(:dependency_analysis, "main.cpp")
|
|
t_end = Time.now()
|
|
|
|
puts "Full dependency list is: #{dep_art.dependencies.map(&:target)} (took #{t_end - t_start})"
|
|
puts "Includes of all source files:"
|
|
|
|
dep_art.dependencies.each do |art|
|
|
next unless ['.cpp', '.c'].include? File.extname(art.target)
|
|
|
|
include_art = $core.craft_and_complete(:dependency_analysis_include, art.target)
|
|
|
|
puts "Included dependencies for #{art.target} are #{include_art.dependencies.map(&:target)}"
|
|
end
|
|
|
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
require "pry"
|
|
Pry.start
|
|
|