require "set" class BuildEnvironment def initialize(*settings) @settings = Set.new(*settings) end def merge(*args) @settings.merge(*args) self end def <<(o) @settings << o self end def std? @settings.include? :std end def userpaths? @settings.include? :userpaths end end module BuildEnvironmentDSL def env(*settings) @env ||= BuildEnvironment.new @env.merge(settings) end end module Homebrew def build_env_keys(env) keys = %w[ CC CXX LD OBJC OBJCXX HOMEBREW_CC HOMEBREW_CXX CFLAGS CXXFLAGS CPPFLAGS LDFLAGS SDKROOT MAKEFLAGS CMAKE_PREFIX_PATH CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH CMAKE_FRAMEWORK_PATH MACOSX_DEPLOYMENT_TARGET PKG_CONFIG_PATH PKG_CONFIG_LIBDIR HOMEBREW_DEBUG HOMEBREW_MAKE_JOBS HOMEBREW_VERBOSE HOMEBREW_SVN HOMEBREW_GIT HOMEBREW_SDKROOT HOMEBREW_BUILD_FROM_SOURCE MAKE GIT CPP ACLOCAL_PATH PATH CPATH] keys += %w[LD_LIBRARY_PATH LD_RUN_PATH LIBRARY_PATH] if OS.linux? keys.select { |key| env.key?(key) } end def dump_build_env(env, f = $stdout) keys = build_env_keys(env) keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"] keys.each do |key| value = env[key] s = "#{key}: #{value}" case key when "CC", "CXX", "LD" s << " => #{Pathname.new(value).realpath}" if File.symlink?(value) end f.puts s end end end