Module: Rake::DevEiate::Extension

Extended by:
Rake::DSL
Defined in:
lib/rake/deveiate/extensions.rb

Overview

Extension compilation and maintenance tasks

Constant Summary collapse

EXTENSION_GLOB_PATTERN =

The glob pattern to use when looking for extension config scripts (relative to EXT_DIR).

'**/extconf.rb'

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#disable_rake_compiler ⇒ Object

Set to true to indicate that this project provides its own extension-management tasks.



31
32
33
# File 'lib/rake/deveiate/extensions.rb', line 31

def disable_rake_compiler
  @disable_rake_compiler
end

Instance Method Details

#define_extension_tasks ⇒ Object

Set up the tasks to build extensions.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rake/deveiate/extensions.rb', line 72

def define_extension_tasks
  ENV['RUBY_CC_VERSION'] ||= RUBY_VERSION[ /(\d+\.\d+)/ ]

  require 'rake/extensiontask'
  self.extensions.each do |extconf|
    Rake::ExtensionTask.new( extconf.pathmap('%{ext/,}d') )
  end

  task :spec => :compile

  task :maint do
    ENV['V'] = '1'
    ENV['MAINTAINER_MODE'] = 'yes'
  end
end

#define_tasks ⇒ Object

Define extension tasks



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rake/deveiate/extensions.rb', line 48

def define_tasks
  super if defined?( super )

  if self.extensions_present?
    if self.has_rakecompiler_dependency?
      self.define_extension_tasks
    elsif !self.disable_rake_compiler?
      warn "\n        You appear to have one or more extensions, but rake-compiler\n        is not a dependency. You should either add it to gem.deps.rb\n        or set `disable_rake_compiler` on the project to disable this\n        warning.\n\n      END_WARNING\n    end\n  end\n\n  task( :extensions_debug, &method(:do_extensions_debug) )\n  task :debug => :extensions_debug\nend\n"

#disable_rake_compiler? ⇒ Boolean

Predicate for the #disable_rake_compiler attribute.

Returns:

  • (Boolean)


35
36
37
# File 'lib/rake/deveiate/extensions.rb', line 35

def disable_rake_compiler?
  return self.disable_rake_compiler ? true :false
end

#do_extensions_debug(task, args) ⇒ Object

Task function -- output debugging for extension tasks.



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/rake/deveiate/extensions.rb', line 98

def do_extensions_debug( task, args )
  self.prompt.say( "Extension config scripts:", color: :bright_green )

  if self.extensions.empty?
    self.prompt.say "None."
  else
    self.extensions.uniq.each do |path|
      self.prompt.say "- %s" % [ path ]
    end
  end

  if self.has_rakecompiler_dependency?
    self.prompt.say "\n"
    self.prompt.say "✔ has rake-compiler dependency"
  end

  self.prompt.say( "\n" )
end

#extensions_present? ⇒ Boolean

Returns true if there appear to be extensions as part of the current project.

Returns:

  • (Boolean)


42
43
44
# File 'lib/rake/deveiate/extensions.rb', line 42

def extensions_present?
  return !self.extensions.empty?
end

#has_rakecompiler_dependency? ⇒ Boolean

Returns true if the projects dependencies include rake-compiler.

Returns:

  • (Boolean)


90
91
92
93
94
# File 'lib/rake/deveiate/extensions.rb', line 90

def has_rakecompiler_dependency?
  return self.dependencies.any? do |dep|
    dep.name == 'rake-compiler'
  end
end

#setup(_name, **options) ⇒ Object

Set some defaults when the task lib is set up.



20
21
22
23
24
25
# File 'lib/rake/deveiate/extensions.rb', line 20

def setup( _name, **options )
  super if defined?( super )

  self.extensions.include( Rake::DevEiate::EXT_DIR + EXTENSION_GLOB_PATTERN )
  @disable_rake_compiler = false
end