# coding: utf-8 require 'date' require 'set' module Sitegen def self.init @mk = {} @want = Set[] end def self.add(page) @deps = nil page.local_depends.keys.each do |filename| @mk[filename] = page unless filename.empty? end end def self.pages @mk.values.to_set end def self.want(filename) @deps = nil @want.add(filename) end def self.dependencies if @deps.nil? libfiles = Dir::entries('lib').select{|s|s!='..'}.map{|s|"lib/#{s}"}.to_set ret = {} ret[:all] = @want @want.each do |filename| ret[filename] = libfiles.clone.merge(@mk[filename].local_depends[filename]) end @deps = ret end @deps end def self.Makefile() str = '' dependencies.each do |target, deps| str += "#{target.to_s}: #{deps.sort.join(' ')}\n" end return str end def self.make(target) newest = Time::new(0) (dependencies[target] || []).each do |dep| ts = make(dep) newest = ts if ts > newest end unless target.is_a?(String) return Time::now end if File::exist?(target) ctime = File::ctime(target) if ctime > newest return ctime end end generate(target) return File::ctime(target) end def self.generate(target) # TODO end end