class AutoC::CMake

CMake package renderer for the AutoC module

Attributes

module[R]

Public Class Methods

new(m) click to toggle source
# File lib/autoc/cmake.rb, line 18
  def initialize(m) = @module = m

  def render
    m = self.module
    sources = self.module.sources.collect { |s| "${CMAKE_CURRENT_SOURCE_DIR}/#{s.file_name}" } .join(' ')
    stream = %{
      set(#{m.name}_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/#{m.header.file_name})
      set(#{m.name}_SOURCES #{sources})
      add_library(#{m.name} OBJECT ${#{m.name}_SOURCES})
      target_include_directories(#{m.name} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
    }
    unless Digest::MD5.digest(stream) == (Digest::MD5.digest(File.read(file_name)) rescue nil)
      File.write(file_name, stream)
    end
  end
  
  def self.render(m) = self.new(m).render

end # CMake


end
render(m) click to toggle source
# File lib/autoc/cmake.rb, line 34
  def self.render(m) = self.new(m).render

end

Public Instance Methods

file_name(= " click to toggle source
# File lib/autoc/cmake.rb, line 16
  def file_name = "#{self.module.name}.cmake"

  def initialize(m) = @module = m

  def render
    m = self.module
    sources = self.module.sources.collect { |s| "${CMAKE_CURRENT_SOURCE_DIR}/#{s.file_name}" } .join(' ')
    stream = %{
      set(#{m.name}_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/#{m.header.file_name})
      set(#{m.name}_SOURCES #{sources})
      add_library(#{m.name} OBJECT ${#{m.name}_SOURCES})
      target_include_directories(#{m.name} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
    }
    unless Digest::MD5.digest(stream) == (Digest::MD5.digest(File.read(file_name)) rescue nil)
      File.write(file_name, stream)
    end
  end
  
  def self.render(m) = self.new(m).render

end # CMake


end


### On code generation vs. CMake

# https://here-be-braces.com/integrating-a-flexible-code-generator-into-cmake/
# https://blog.kangz.net/posts/2016/05/26/integrating-a-code-generator-with-cmake/


### On code packaging

# https://www.youtube.com/watch?v=sBP17HQAQjk
# https://www.youtube.com/watch?v=_5weX5mx8hc

render() click to toggle source
# File lib/autoc/cmake.rb, line 20
def render
  m = self.module
  sources = self.module.sources.collect { |s| "${CMAKE_CURRENT_SOURCE_DIR}/#{s.file_name}" } .join(' ')
  stream = %{
    set(#{m.name}_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/#{m.header.file_name})
    set(#{m.name}_SOURCES #{sources})
    add_library(#{m.name} OBJECT ${#{m.name}_SOURCES})
    target_include_directories(#{m.name} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
  }
  unless Digest::MD5.digest(stream) == (Digest::MD5.digest(File.read(file_name)) rescue nil)
    File.write(file_name, stream)
  end
end