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_compilerObject

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_tasksObject

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_tasksObject

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 <<~END_WARNING

				You appear to have one or more extensions, but rake-compiler
				is not a dependency. You should either add it to gem.deps.rb
				or set `disable_rake_compiler` on the project to disable this
				warning.

			END_WARNING
		end
	end

	task( :extensions_debug, &method(:do_extensions_debug) )
	task :debug => :extensions_debug
end

#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