Module: RCEE::Precompiled::ExtConf

Defined in:
ext/precompiled/extconf.rb

Constant Summary collapse

PACKAGE_ROOT_DIR =
File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))

Class Method Summary collapse

Class Method Details

.configureObject



10
11
12
13
14
# File 'ext/precompiled/extconf.rb', line 10

def configure
  configure_cross_compilers
  configure_packaged_libraries
  create_makefile("rcee/precompiled/precompiled")
end

.configure_cross_compilersObject



16
17
18
19
# File 'ext/precompiled/extconf.rb', line 16

def configure_cross_compilers
  RbConfig::CONFIG["CC"] = RbConfig::MAKEFILE_CONFIG["CC"] = ENV["CC"] if ENV["CC"]
  ENV["CC"] = RbConfig::CONFIG["CC"]
end

.configure_packaged_librariesObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'ext/precompiled/extconf.rb', line 21

def configure_packaged_libraries
  recipe = libyaml_recipe

  # pass some environment variables to the libyaml configuration for cross-compilation
  if cross_build?
    ENV.to_h.tap do |env|
      # -fPIC is necessary for linking into a shared library
      env["CFLAGS"] = [env["CFLAGS"], "-fPIC"].join(" ")
      env["SUBDIRS"] = "include src" # libyaml: skip tests

      recipe.configure_options += env.map { |key, value| "#{key}=#{value.strip}" }
    end
  end

  # ensure libyaml has already been unpacked, configured, and compiled
  unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version))
    recipe.cook
  end

  # use the packaged libyaml
  recipe.activate

  # explicitly add include/lib paths (pkg_config may not extract them correctly on all platforms)
  $INCFLAGS << " -I#{File.join(recipe.path, "include")}"
  $LIBPATH << File.join(recipe.path, "lib")

  # assert that we can build against the packaged libyaml
  unless have_library("yaml", "yaml_get_version", "yaml.h")
    abort("\nERROR: *** could not find libyaml development environment ***\n\n")
  end
end

.cross_build?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'ext/precompiled/extconf.rb', line 53

def cross_build?
  enable_config("cross-build")
end

.downloadObject



57
58
59
# File 'ext/precompiled/extconf.rb', line 57

def download
  libyaml_recipe.download
end

.libyaml_recipeObject



61
62
63
64
65
66
67
68
69
70
# File 'ext/precompiled/extconf.rb', line 61

def libyaml_recipe
  MiniPortile.new("yaml", "0.2.5").tap do |recipe|
    recipe.files = [{
      url: "https://github.com/yaml/libyaml/releases/download/0.2.5/yaml-0.2.5.tar.gz",
      sha256: "c642ae9b75fee120b2d96c712538bd2cf283228d2337df2cf2988e3c02678ef4"
    }]
    recipe.target = File.join(PACKAGE_ROOT_DIR, "ports")
    recipe.patch_files = Dir[File.join(PACKAGE_ROOT_DIR, "patches", "libyaml", "*.patch")].sort
  end
end