Module: Beni::BuildConfig

Defined in:
lib/beni/build_config.rb

Overview

Generates the consumer’s editable mruby build config: a verbatim copy of the staged mruby source’s own build_config/default.rb —the configured version’s upstream default. Exposed as rake beni:config by Beni::Tasks; the generated file belongs to the consuming project and seeds further customization.

Class Method Summary collapse

Class Method Details

.generate(dest, mruby_dir:, version:) ⇒ Object

Copy the staged source’s default config to dest, creating missing parent directories. Requires version‘s mruby source staged under mruby_dir and refuses to clobber an existing (likely hand-tuned) config. Returns dest.

Raises:



18
19
20
21
22
23
24
25
# File 'lib/beni/build_config.rb', line 18

def generate(dest, mruby_dir:, version:)
  raise Error, "[beni] #{dest} already exists — delete it first to regenerate" if File.exist?(dest)

  source = staged_default_config(mruby_dir, version)
  FileUtils.mkdir_p(File.dirname(dest))
  FileUtils.cp(source, dest)
  dest
end

.staged_default_config(mruby_dir, version) ⇒ Object

The staged source’s upstream default config path, verified to be version‘s: the .beni-version marker Vendor::Tarball#prepare stamps must match, so a stale tree never seeds a config for the wrong release.

Raises:



31
32
33
34
35
36
37
38
# File 'lib/beni/build_config.rb', line 31

def staged_default_config(mruby_dir, version)
  source = File.join(mruby_dir, "build_config", "default.rb")
  return source if staged_version(mruby_dir) == version && File.exist?(source)

  raise Error,
        "[beni] mruby #{version}'s source is not staged at #{mruby_dir}" \
        "run `rake beni:vendor:setup` first"
end

.staged_version(mruby_dir) ⇒ Object



40
41
42
43
# File 'lib/beni/build_config.rb', line 40

def staged_version(mruby_dir)
  marker = File.join(mruby_dir, Vendor::Tarball::VERSION_MARKER)
  File.read(marker).strip if File.exist?(marker)
end