Top Level Namespace

Defined Under Namespace

Modules: DuckDB

Constant Summary collapse

DUCKDB_REQUIRED_VERSION =
'1.4.0'
FALLBACK_PREFIXES =
%w[/opt/homebrew /opt/homebrew/opt/duckdb /opt/local].freeze

Instance Method Summary collapse

Instance Method Details

#brew_dirs(subdir) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'ext/duckdb/extconf.rb', line 15

def brew_dirs(subdir)
  dirs = []
  dirs << "#{brew_prefix('duckdb')}/#{subdir}" if brew_prefix('duckdb')
  if (prefix = brew_prefix)
    dirs << "#{prefix}/#{subdir}"
    dirs << "#{prefix}/opt/duckdb/#{subdir}"
  end
  dirs
end

#brew_prefix(formula = nil) ⇒ Object



7
8
9
10
11
# File 'ext/duckdb/extconf.rb', line 7

def brew_prefix(formula = nil)
  cmd = formula ? "brew --prefix #{formula} 2>/dev/null" : 'brew --prefix 2>/dev/null'
  prefix = `#{cmd}`.chomp
  prefix.empty? ? nil : prefix
end

#check_duckdb_header(header, version) ⇒ Object



33
34
35
36
37
38
39
40
# File 'ext/duckdb/extconf.rb', line 33

def check_duckdb_header(header, version)
  found = find_header(header, *homebrew_include_dirs)
  return if found

  msg = "#{header} is not found. Install #{header} of duckdb >= #{version}."
  print_message(msg)
  raise msg
end

#check_duckdb_library(library, func, version) ⇒ Object



42
43
44
45
46
47
48
# File 'ext/duckdb/extconf.rb', line 42

def check_duckdb_library(library, func, version)
  found = find_library(library, func, *homebrew_lib_dirs)
  have_func(func, 'duckdb.h')
  return if found

  raise_not_found_library(library, version)
end

#duckdb_library_name(library) ⇒ Object



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

def duckdb_library_name(library)
  "lib#{library}.#{RbConfig::CONFIG['DLEXT']}"
end

#homebrew_include_dirsObject



25
26
27
# File 'ext/duckdb/extconf.rb', line 25

def homebrew_include_dirs
  (brew_dirs('include') + FALLBACK_PREFIXES.map { |p| "#{p}/include" }).uniq
end

#homebrew_lib_dirsObject



29
30
31
# File 'ext/duckdb/extconf.rb', line 29

def homebrew_lib_dirs
  (brew_dirs('lib') + FALLBACK_PREFIXES.map { |p| "#{p}/lib" }).uniq
end


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

def print_message(msg)
  print <<~END_OF_MESSAGE

    #{'*' * 80}
    #{msg}
    #{'*' * 80}

  END_OF_MESSAGE
end

#raise_not_found_library(library, version) ⇒ Object



50
51
52
53
54
55
# File 'ext/duckdb/extconf.rb', line 50

def raise_not_found_library(library, version)
  library_name = duckdb_library_name(library)
  msg = "#{library_name} is not found. Install #{library_name} of duckdb >= #{version}."
  print_message(msg)
  raise msg
end