Module: PhusionPassenger::Dependencies

Defined in:
lib/phusion_passenger/dependencies.rb

Overview

Namespace which contains the different dependencies that Passenger may require. See Dependency for more information.

Constant Summary collapse

GCC =
Dependency.new do |dep|
	dep.name = "GNU C++ compiler"
	dep.define_checker do |result|
		gxx = PlatformInfo.find_command('g++')
		if gxx.nil?
			result.not_found
		else
			result.found(gxx)
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install build-essential"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi gcc-c++"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install gcc-c++"
		elsif tags.include?(:gentoo)
			dep.install_command = "emerge -av gcc"
		end
	elsif RUBY_PLATFORM =~ /darwin/
		dep.install_instructions = "Please install the Apple Development Tools: http://developer.apple.com/tools/"
	end
	dep.website = "http://gcc.gnu.org/"
end
Ruby_DevHeaders =
Dependency.new do |dep|
	dep.name = "Ruby development headers"
	dep.define_checker do |result|
		require 'rbconfig'
		begin
			require 'mkmf'
			header_dir = Config::CONFIG['rubyhdrdir'] || Config::CONFIG['archdir']
			result.found(File.exist?("#{header_dir}/ruby.h"))
		rescue LoadError, SystemExit
			# On RedHat/Fedora/CentOS, if ruby-devel is not installed then
			# mkmf.rb will print an error and call 'exit'. So here we
			# catch SystemExit.
			result.not_found
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install ruby1.8-dev"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi urpmi ruby-RubyGems"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install ruby-devel"
		elsif tags.include?(:gentoo)
			dep.install_command = "emerge -av ruby"
		end
	elsif RUBY_PLATFORM =~ /freebsd/
		dep.install_command = "make -C /usr/ports/lang/ruby18 install"
	end
	dep.website = "http://www.ruby-lang.org/"
	dep.install_instructions = "Please reinstall Ruby by downloading it from <b>#{dep.website}</b>"
end
Ruby_OpenSSL =
Dependency.new do |dep|
	dep.name = "OpenSSL support for Ruby"
	dep.define_checker do |result|
		begin
			require 'openssl'
			result.found
		rescue LoadError
			result.not_found
		end
	end
	if RUBY_PLATFORM =~ /linux/
		case PlatformInfo.linux_distro
		when :ubuntu, :debian
			dep.install_command = "apt-get install libopenssl-ruby"
		end
	end
	if dep.install_command.nil?
		dep.website = "http://www.ruby-lang.org/"
		dep.install_instructions = "Please (re)install Ruby with OpenSSL " <<
			"support by downloading it from <b>#{dep.website}</b>."
	end
end
RubyGems =
Dependency.new do |dep|
	dep.name = "RubyGems"
	dep.define_checker do |result|
		begin
			require 'rubygems'
			result.found
		rescue LoadError
			result.not_found
		end
	end
	dep.website = "http://www.rubygems.org/"
	dep.install_instructions = "Please download it from <b>#{dep.website}</b>. " <<
		"Extract the tarball, and run <b>ruby setup.rb</b>"
end
Rake =
Dependency.new do |dep|
	dep.name = "Rake"
	dep.define_checker do |result|
		if PlatformInfo.rake.nil?
			result.not_found
		else
			result.found(PlatformInfo.rake)
		end
	end
	dep.website = "http://rake.rubyforge.org/"
	dep.install_instructions = "Please install RubyGems first, then run <b>#{PlatformInfo::GEM || "gem"} install rake</b>"
end
Apache2 =
Dependency.new do |dep|
	dep.name = "Apache 2"
	dep.define_checker do |result|
		if PlatformInfo.httpd.nil?
			result.not_found
		else
			result.found(PlatformInfo.httpd)
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install apache2-mpm-prefork"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi apache"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install httpd"
		elsif tags.include?(:gentoo)
			dep.install_command = "emerge -av apache"
		end
	elsif RUBY_PLATFORM =~ /freebsd/
		dep.install_command = "make -C /usr/ports/www/apache22 install"
		dep.provides = [Apache2_DevHeaders, APR_DevHeaders, APU_DevHeaders]
	end
	dep.website = "http://httpd.apache.org/"
end
Apache2_DevHeaders =
Dependency.new do |dep|
	dep.name = "Apache 2 development headers"
	dep.define_checker do |result|
		if PlatformInfo.apxs2.nil?
			result.not_found
		else
			result.found(PlatformInfo.apxs2)
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install apache2-prefork-dev"
			dep.provides = [Apache2]
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi apache-devel"
			dep.provides = [Apache2]
		elsif tags.include?(:redhat)
			dep.install_command = "yum install httpd-devel"
			dep.provides = [Apache2]
		elsif tags.include?(:gentoo)
			dep.install_command = "emerge -av apache"
			dep.provides = [Apache2]
		end
	elsif RUBY_PLATFORM =~ /freebsd/
		dep.install_command = "make -C /usr/ports/www/apache22 install"
	end
	dep.website = "http://httpd.apache.org/"
end
APR_DevHeaders =
Dependency.new do |dep|
	dep.name = "Apache Portable Runtime (APR) development headers"
	dep.define_checker do |result|
		if PlatformInfo.apr_config.nil?
			result.not_found
		else
			result.found(PlatformInfo.apr_config)
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install libapr1-dev"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi libapr-devel"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install apr-devel"
		elsif tags.include?(:gentoo)
			dep.install_command = "emerge -av apr"
		end
	elsif RUBY_PLATFORM =~ /darwin/
		dep.install_instructions = "Please install Apache from MacPorts, which will " <<
			"provide APR automatically. <b>Or</b>, if you're installing against MacOS X's " <<
			"default provided Apache, then please install the OS X Developer SDK."
	end
	dep.website = "http://httpd.apache.org/"
	dep.website_comments = "APR is an integrated part of Apache."
end
APU_DevHeaders =
Dependency.new do |dep|
	dep.name = "Apache Portable Runtime Utility (APU) development headers"
	dep.define_checker do |result|
		if PlatformInfo.apu_config.nil?
			result.not_found
		else
			result.found(PlatformInfo.apu_config)
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install libaprutil1-dev"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi libapr-util-devel"
		end
	elsif RUBY_PLATFORM =~ /darwin/
		dep.install_instructions = "Please install Apache from MacPorts, which will " <<
			"provide APU automatically. <b>Or</b>, if you're installing against MacOS X's " <<
			"default provided Apache, then please install the OS X Developer SDK."
	end
	dep.website = "http://httpd.apache.org/"
	dep.website_comments = "APR Utility is an integrated part of Apache."
end
FastThread =
Dependency.new do |dep|
	dep.name = "fastthread"
	dep.define_checker do |result|
		begin
			begin
				require 'rubygems'
			rescue LoadError
			end
			require 'fastthread'
			result.found
		rescue LoadError
			result.not_found
		end
	end
	dep.install_instructions = "Please install RubyGems first, then run <b>#{PlatformInfo::GEM || "gem"} install fastthread</b>"
end
Rack =
Dependency.new do |dep|
	dep.name = "rack"
	dep.define_checker do |result|
		begin
			begin
				require 'rubygems'
			rescue LoadError
			end
			require 'rack'
			result.found
		rescue LoadError
			result.not_found
		end
	end
	dep.install_instructions = "Please install RubyGems first, then run <b>#{PlatformInfo::GEM || "gem"} install rack</b>"
end
OpenSSL_Dev =
Dependency.new do |dep|
	dep.name = "OpenSSL development headers"
	dep.define_checker do |result|
		source_file = '/tmp/passenger-openssl-check.c'
		object_file = '/tmp/passenger-openssl-check.o'
		begin
			File.open(source_file, 'w') do |f|
				f.write("#include <openssl/ssl.h>")
			end
			Dir.chdir(File.dirname(source_file)) do
				if system("(gcc #{ENV['CFLAGS']} -c '#{source_file}') >/dev/null 2>/dev/null")
					result.found
				else
					result.not_found
				end
			end
		ensure
			File.unlink(source_file) rescue nil
			File.unlink(object_file) rescue nil
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install libssl-dev"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install openssl-devel"
		end
	end
	dep.website = "http://www.openssl.org/"
end
Zlib_Dev =
Dependency.new do |dep|
	dep.name = "Zlib development headers"
	dep.define_checker do |result|
		begin
			File.open('/tmp/r8ee-check.c', 'w') do |f|
				f.write("#include <zlib.h>")
			end
			Dir.chdir('/tmp') do
				if system("(g++ -c r8ee-check.c) >/dev/null 2>/dev/null")
					result.found
				else
					result.not_found
				end
			end
		ensure
			File.unlink('/tmp/r8ee-check.c') rescue nil
			File.unlink('/tmp/r8ee-check.o') rescue nil
		end
	end
	if RUBY_PLATFORM =~ /linux/
		tags = PlatformInfo.linux_distro_tags
		if tags.include?(:debian)
			dep.install_command = "apt-get install zlib1g-dev"
		elsif tags.include?(:mandriva)
			dep.install_command = "urpmi zlib1-devel"
		elsif tags.include?(:redhat)
			dep.install_command = "yum install zlib-devel"
		end
	end
	dep.website = "http://www.zlib.net/"
end

Class Method Summary collapse

Class Method Details

.fastthread_required?Boolean

Returns whether fastthread is a required dependency for the current Ruby interpreter.

Returns:

  • (Boolean)


100
101
102
# File 'lib/phusion_passenger/dependencies.rb', line 100

def self.fastthread_required?
	return (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby") && RUBY_VERSION < "1.8.7"
end