class Rscons::Builders::Preprocess

The Preprocess builder invokes the C preprocessor

Public Instance Methods

default_variables(env) click to toggle source

Return default construction variables for the builder.

@param env [Environment] The Environment using the builder.

@return [Hash] Default construction variables for the builder.

# File lib/rscons/builders/preprocess.rb, line 13
def default_variables(env)
  {
    "CPP_CMD" => %w[
      ${_PREPROCESS_CC} -E ${_PREPROCESS_DEPGEN}
      -o ${_TARGET} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${_SOURCES}],
  }
end
finalize(options) click to toggle source

Finalize the build operation.

@param options [Hash] Builder finalize options.

@return [String, nil]

Name of the target file on success or nil on failure.
# File lib/rscons/builders/preprocess.rb, line 54
def finalize(options)
  if options[:command_status]
    target, deps, cache, env, vars = options.values_at(:target, :sources, :cache, :env, :vars)
    if File.exists?(vars['_DEPFILE'])
      deps += Environment.parse_makefile_deps(vars['_DEPFILE'])
      FileUtils.rm_f(vars['_DEPFILE'])
    end
    cache.register_build(target, options[:tc].command, deps.uniq, env)
    target
  end
end
run(options) click to toggle source

Run the builder to produce a build target.

@param options [Hash] Builder run options.

@return [String, ThreadedCommand]

Target file name if target is up to date or a {ThreadedCommand}
to execute to build the target.
# File lib/rscons/builders/preprocess.rb, line 28
def run(options)
  target, sources, cache, env, vars = options.values_at(:target, :sources, :cache, :env, :vars)
  if sources.find {|s| s.end_with?(*env.expand_varref("${CXXSUFFIX}", vars))}
    pp_cc = "${CXX}"
    depgen = "${CXXDEPGEN}"
  else
    pp_cc = "${CC}"
    depgen = "${CCDEPGEN}"
  end
  vars = vars.merge("_PREPROCESS_CC" => pp_cc,
                    "_PREPROCESS_DEPGEN" => depgen,
                    "_TARGET" => target,
                    "_SOURCES" => sources,
                    "_DEPFILE" => Rscons.set_suffix(target, env.expand_varref("${DEPFILESUFFIX}", vars)))
  command = env.build_command("${CPP_CMD}", vars)
  # Store vars back into options so new keys are accessible in #finalize.
  options[:vars] = vars
  standard_threaded_build("#{name} #{target}", target, command, sources, env, cache)
end