# Installs packages from source define :source_package, :action => :install, :configure => true, :build_command => "make", :install_command => "make install" do %w{tar gzip bzip2 unzip}.each do |p| package p end directory "/usr/local/src" do recursive true end directory "/etc/source-packages" do recursive true end if params[:action] == :install filename = params[:url].split("/").last basename, extension = $1, $2.downcase if filename =~ /(.*)(\.tgz|\.tar(?:\.gz|\.bz(?:ip)?2)?|\.zip)$/i unpack_target = params[:unpacks_to] || basename unpack_target_dir = "/usr/local/src/#{unpack_target}" unzip_command ||= case when params[:type] == :gzip || [".tar.gz", ".tgz"].include?(extension) "tar xzf" when params[:type] == :bzip2 || extension =~ /\.bz(ip)?2/ "tar xjf" when params[:type] == :zip || extension == ".zip" params[:zip_includes_directory] ? "unzip" : "unzip -d #{unpack_target_dir}" end remote_file "/usr/local/src/#{filename}" do source params[:url] end execute "Unpack source package for #{params[:name]}" do cwd "/usr/local/src" creates unpack_target_dir unless params[:force] command "#{unzip_command} #{filename}" end execute "Configure source package for #{params[:name]}" do command "./configure #{Autoconf.switches(params[:configure])}" cwd unpack_target_dir creates "#{unpack_target_dir}/Makefile" unless params[:force] only_if params[:configure] end execute "Build source package for #{params[:name]}" do cwd unpack_target_dir command params[:build_command] creates "/etc/source-packages/#{basename}" unless params[:force] end execute "Install source package for #{params[:name]}" do cwd unpack_target_dir command params[:install_command] creates "/etc/source-packages/#{basename}" unless params[:force] notifies :touch, resources(:file => "/etc/source-packages/#{basename}") end file "/etc/source-packages/#{basename}" do action :nothing end end end