require 'rubygems'
begin
require 'erlake'
rescue LoadError
puts "You don't have the erlake gem. Run `rake setup` or install the erlake gem yourself."
end
GemDependencies = [
{:name => "erlake", :version => ">=0.1.0"}
]
task :setup do
puts "Checking for gems that need to be installed."
gems = Gem::SourceIndex.from_installed_gems
GemDependencies.each do |dep|
if gems.search(dep[:name], dep[:version]).empty?
puts "Installing dependency: #{dep[:name]}, #{dep[:version]}"
begin
require 'rubygems/dependency_installer'
di = Gem::DependencyInstaller.new()
di.install dep[:name], dep[:version]
rescue LoadError # < rubygems 1.0.1
require 'rubygems/remote_installer'
Gem::RemoteInstaller.new.install(dep.name, dep.version_requirements)
end
end
end
puts "And done."
end
# This unless-statement is here to prevent this rakefile from crashing if the
# Erlake gem is not present. As you can see above, we print a nice message
# telling the user to install the gem and crashing from an uninitialized
# constant error before we can print is a Bad Thing.
exit(1) unless defined?(Erlake)
ErlangProject = Erlake::ErlangProject
this_dir = File.dirname(__FILE__)
eunit = ErlangProject.new('eunit', File.join(this_dir, 'lib/eunit')) do |proj|
# Required ordering.
proj.sources = %w(
src/eunit_autoexport.erl
src/eunit_striptests.erl
src/eunit.erl
src/eunit_tests.erl
src/eunit_server.erl
src/eunit_proc.erl
src/eunit_serial.erl
src/eunit_test.erl
src/eunit_lib.erl
src/eunit_data.erl
src/eunit_tty.erl
src/code_monitor.erl
src/file_monitor.erl
src/autoload.erl
)
proj.include_paths = ["include"]
proj.warnings = %w(+warn_unused_vars +nowarn_shadow_vars +warn_unused_import)
end
mochiweb = ErlangProject.new('mochiweb', File.join(this_dir, 'lib/mochiweb'))
smerl = ErlangProject.new('smerl', File.join(this_dir, 'lib/smerl')) do |proj|
proj.sources = ['smerl.erl']
proj.output_path = '../../ebin'
end
recess = ErlangProject.new('recess', this_dir) do |proj|
proj.dependencies = [eunit, mochiweb, smerl]
# The include_paths must have one path ending in "include/eunit" or else
# eunit freaks out and crashes.
proj.test_include_paths = ["./lib/include/eunit"]
end
recess.use_globally!