# encoding: utf-8## Phusion Passenger - https://www.phusionpassenger.com/# Copyright (c) 2010-2014 Phusion## "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.## Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in# all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN# THE SOFTWARE.require'fileutils'require'logger'PhusionPassenger.require_passenger_lib'constants'PhusionPassenger.require_passenger_lib'abstract_installer'PhusionPassenger.require_passenger_lib'config/installation_utils'PhusionPassenger.require_passenger_lib'platform_info'PhusionPassenger.require_passenger_lib'utils/shellwords'PhusionPassenger.require_passenger_lib'utils/progress_bar'PhusionPassenger.require_passenger_lib'utils/tmpio'modulePhusionPassengermoduleConfigclassAgentCompiler<AbstractInstallerprotecteddefdependenciesspecs=['depcheck_specs/compiler_toolchain','depcheck_specs/ruby','depcheck_specs/gems','depcheck_specs/libs','depcheck_specs/utilities']ids=['cc','c++','rake','libcurl-dev','openssl-dev','zlib-dev'].compactreturn[specs,ids]enddefusers_guide_pathreturnPhusionPassenger.standalone_doc_pathenddefusers_guide_urlreturnSTANDALONE_DOC_URLenddefrun_stepscheck_source_code_available!if!@forcecheck_whether_os_is_brokencheck_whether_system_has_enough_ramInstallationUtils.check_for_download_tool!endcheck_dependencies(false)||abortputs@destdir=InstallationUtils.find_or_create_writable_support_binaries_dir!confirm_enable_optimizationscompile_agentenddefbefore_installsuperif!@working_dir@working_dir=PhusionPassenger::Utils.mktmpdir("passenger-install.",PlatformInfo.tmpexedir)@owns_working_dir=trueendenddefafter_installsuperFileUtils.remove_entry_secure(@working_dir)if@owns_working_direndprivatedefcheck_source_code_available!ifPhusionPassenger.build_system_dir.nil?puts"<red>Cannot compile agent binary</red>"putsputs"This #{PROGRAM_NAME} installation does not "+"come with any source code, so the agent binary cannot "+"be compiled. So instead, please try to download a "+"precompiled agent binary from the #{PROGRAM_NAME} website, "+"by running:\n\n"+" <b>passenger-config download-agent</b>"abortendenddefconfirm_enable_optimizationsif@autoif@optimizeputs"Compiling with optimizations."elseputs"Not compiling with optimizations."endelseif@optimizeputs"Compiling with optimizations."elsenew_screenrender_template'config/agent_compiler/confirm_enable_optimizations',:total_ram=>total_ram_gbputs@optimize=prompt_confirmation('Compile with optimizations?')putsendendenddefcompile_agentputs"<banner>Compiling #{PROGRAM_NAME} agent...</banner>"progress_bar=ProgressBar.newe_working_dir=Shellwords.escape(@working_dir)args="#{e_working_dir}/support-binaries/#{AGENT_EXE}"+" CACHING=false"+" OUTPUT_DIR=#{e_working_dir} "" OPTIMIZE=#{!!@optimize}"beginprogress_bar.set(0)Dir.chdir(PhusionPassenger.build_system_dir)doInstallationUtils.run_rake_task!(args)do|progress,total|progress_bar.set(0.05+(progress/total.to_f)*0.95)endendprogress_bar.set(1)ensureprogress_bar.finishendFileUtils.cp("#{@working_dir}/support-binaries/#{AGENT_EXE}","#{@destdir}/#{AGENT_EXE}")puts"<green>Compilation finished!</green>"enddeftotal_ram_gbbeginmeminfo=File.read("/proc/meminfo")ifmeminfo=~/^MemTotal: *(\d+) kB$/returnsprintf("%.1f",$1.to_i/1024/1024)endrescueErrno::ENOENT,Errno::EACCES# Don't do anything on systems without memory information.returnnilendendendend# module Standaloneend# module PhusionPassenger