Module: Superenv

Includes:
SharedEnvExtension
Defined in:
extend/os/mac/extend/ENV/super.rb,
extend/os/linux/extend/ENV/super.rb,
extend/ENV/super.rb

Overview

Why superenv?

  1. Only specify the environment we need (NO LDFLAGS for cmake)
  2. Only apply compiler-specific options when we are calling that compiler
  3. Force all incpaths and libpaths into the cc instantiation (fewer bugs)
  4. Cater toolchain usage to specific Xcode versions
  5. Remove flags that we don’t want or that will break builds
  6. Simpler code
  7. Simpler formulae that just work
  8. Build-system agnostic configuration of the toolchain

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SharedEnvExtension

#append, #append_path, #append_to_cccfg, #append_to_cflags, #cc, #cflags, #compiler, #cppflags, #cxx, #cxxflags, #fc, #fcflags, #fflags, #fortran, #ldflags, #no_fixup_chains_support?, #no_weak_imports_support?, #prepend, #prepend_create_path, #prepend_path, #remove, #remove_cc_etc, #remove_from_cflags

Class Method Details

.extended(base) ⇒ void

This method returns an undefined value.

Parameters:



24
25
26
27
28
# File 'extend/ENV/super.rb', line 24

def self.extended(base)
  base.keg_only_deps = []
  base.deps = []
  base.run_time_deps = []
end

.shims_pathPathname

The location of Homebrew’s shims on this OS.

Returns:



7
8
9
# File 'extend/os/mac/extend/ENV/super.rb', line 7

def shims_path
  HOMEBREW_SHIMS_PATH/"mac/super"
end

Instance Method Details

#cxx11void

This method returns an undefined value.



334
335
336
337
# File 'extend/ENV/super.rb', line 334

def cxx11
  append_to_cccfg "x"
  append_to_cccfg "g" if homebrew_cc == "clang"
end

#deparallelize(&block) ⇒ T.untyped

Removes the MAKEFLAGS environment variable, causing make to use a single job. This is useful for makefiles with race conditions. When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion.

Parameters:

  • block (T.proc.returns(T.untyped))

Returns:

  • (T.untyped)


304
305
306
307
308
309
310
311
312
313
314
315
# File 'extend/ENV/super.rb', line 304

def deparallelize(&block)
  old = delete("MAKEFLAGS")
  if block
    begin
      yield
    ensure
      self["MAKEFLAGS"] = old
    end
  end

  old
end

#determine_cccfgString

Returns:



78
79
80
81
82
83
# File 'extend/os/mac/extend/ENV/super.rb', line 78

def determine_cccfg
  s = +""
  # Fix issue with >= Mountain Lion apr-1-config having broken paths
  s << "a"
  s.freeze
end

#determine_dynamic_linker_pathString?

Returns:



58
59
60
61
62
63
# File 'extend/os/linux/extend/ENV/super.rb', line 58

def determine_dynamic_linker_path
  path = "#{HOMEBREW_PREFIX}/lib/ld.so"
  return unless File.readable? path

  path
end

#determine_rpath_paths(formula) ⇒ Object



48
49
50
51
52
53
54
55
# File 'extend/os/linux/extend/ENV/super.rb', line 48

def determine_rpath_paths(formula)
  PATH.new(
    *formula&.lib,
    "#{HOMEBREW_PREFIX}/opt/gcc/lib/gcc/current",
    PATH.new(run_time_deps.map { |dep| dep.opt_lib.to_s }).existing,
    "#{HOMEBREW_PREFIX}/lib",
  )
end

#homebrew_extra_cmake_frameworks_pathsArray<Pathname>

Returns:



72
73
74
75
76
# File 'extend/os/mac/extend/ENV/super.rb', line 72

def homebrew_extra_cmake_frameworks_paths
  paths = []
  paths << "#{self["HOMEBREW_SDKROOT"]}/System/Library/Frameworks" if MacOS::Xcode.without_clt?
  paths
end

#homebrew_extra_cmake_include_pathsArray<Pathname>

Returns:



60
61
62
63
64
65
66
# File 'extend/os/mac/extend/ENV/super.rb', line 60

def homebrew_extra_cmake_include_paths
  paths = []
  paths << "#{self["HOMEBREW_SDKROOT"]}/usr/include/libxml2" if libxml2_include_needed?
  paths << "#{self["HOMEBREW_SDKROOT"]}/usr/include/apache2" if MacOS::Xcode.without_clt?
  paths << "#{self["HOMEBREW_SDKROOT"]}/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers"
  paths
end

#homebrew_extra_cmake_library_pathsArray<Pathname>

Returns:



68
69
70
# File 'extend/os/mac/extend/ENV/super.rb', line 68

def homebrew_extra_cmake_library_paths
  [Pathname("#{self["HOMEBREW_SDKROOT"]}/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries")]
end

#homebrew_extra_isystem_pathsArray<Pathname>

Returns:



42
43
44
45
46
47
48
# File 'extend/os/mac/extend/ENV/super.rb', line 42

def homebrew_extra_isystem_paths
  paths = []
  paths << "#{self["HOMEBREW_SDKROOT"]}/usr/include/libxml2" if libxml2_include_needed?
  paths << "#{self["HOMEBREW_SDKROOT"]}/usr/include/apache2" if MacOS::Xcode.without_clt?
  paths << "#{self["HOMEBREW_SDKROOT"]}/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers"
  paths
end

#homebrew_extra_library_pathsArray<Pathname>

Returns:



50
51
52
53
54
55
56
57
58
# File 'extend/os/mac/extend/ENV/super.rb', line 50

def homebrew_extra_library_paths
  paths = []
  if compiler == :llvm_clang
    paths << "#{self["HOMEBREW_SDKROOT"]}/usr/lib"
    paths << Formula["llvm"].opt_lib.to_s
  end
  paths << "#{self["HOMEBREW_SDKROOT"]}/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries"
  paths
end

#homebrew_extra_pathsArray<Pathname> Also known as: generic_homebrew_extra_paths

Returns:



26
27
28
29
30
31
32
33
34
35
# File 'extend/os/linux/extend/ENV/super.rb', line 26

def homebrew_extra_paths
  paths = generic_homebrew_extra_paths
  paths += %w[binutils make].map do |f|
    bin = Formulary.factory(f).opt_bin
    bin if bin.directory?
  rescue FormulaUnavailableError
    nil
  end.compact
  paths
end

#libcxxvoid

This method returns an undefined value.



340
341
342
# File 'extend/ENV/super.rb', line 340

def libcxx
  append_to_cccfg "g" if compiler == :clang
end

#make_jobsInteger

Returns:

  • (Integer)


318
319
320
321
# File 'extend/ENV/super.rb', line 318

def make_jobs
  self["MAKEFLAGS"] =~ /-\w*j(\d+)/
  [Regexp.last_match(1).to_i, 1].max
end

#no_fixup_chainsObject



143
144
145
# File 'extend/os/mac/extend/ENV/super.rb', line 143

def no_fixup_chains
  append_to_cccfg "f" if no_fixup_chains_support?
end

#no_weak_importsObject



139
140
141
# File 'extend/os/mac/extend/ENV/super.rb', line 139

def no_weak_imports
  append_to_cccfg "w" if no_weak_imports_support?
end

#O0(&block) ⇒ Object



358
359
360
361
362
363
364
# File 'extend/ENV/super.rb', line 358

def O0(&block)
  if block
    with_env(HOMEBREW_OPTIMIZATION_LEVEL: "O0", &block)
  else
    self["HOMEBREW_OPTIMIZATION_LEVEL"] = "O0"
  end
end

#O1(&block) ⇒ void

This method returns an undefined value.

Parameters:

  • block (T.proc.void, nil)


367
368
369
370
371
372
373
# File 'extend/ENV/super.rb', line 367

def O1(&block)
  if block
    with_env(HOMEBREW_OPTIMIZATION_LEVEL: "O1", &block)
  else
    self["HOMEBREW_OPTIMIZATION_LEVEL"] = "O1"
  end
end

#permit_arch_flagsvoid

This method returns an undefined value.



324
325
326
# File 'extend/ENV/super.rb', line 324

def permit_arch_flags
  append_to_cccfg "K"
end

#resetvoid

This method returns an undefined value.



41
42
43
44
45
46
# File 'extend/ENV/super.rb', line 41

def reset
  super
  # Configure scripts generated by autoconf 2.61 or later export as_nl, which
  # we use as a heuristic for running under configure
  delete("as_nl")
end

#runtime_cpu_detectionvoid

This method returns an undefined value.



329
330
331
# File 'extend/ENV/super.rb', line 329

def runtime_cpu_detection
  append_to_cccfg "d"
end

#set_debug_symbolsvoid

This method returns an undefined value.



345
346
347
# File 'extend/ENV/super.rb', line 345

def set_debug_symbols
  append_to_cccfg "D"
end