#!/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::ConfigLoaderEngine $core.add_artefact_engine Comfpile::ParserEngine, file_regex: /^(.+)\.(h|c|cpp)$/, search_regexes: [ { regex: /^#include\s*[<"](?.+)[>"]/, key: 'include' }, { regex: /\/\/\s*comf\.(?\w+)[=:]\s*(?.+)/ } ] $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