homebrew-core/Formula/httpd.rb

141 lines
4.7 KiB
Ruby
Raw Normal View History

class Httpd < Formula
desc "Apache HTTP server"
homepage "https://httpd.apache.org/"
url "https://www.apache.org/dyn/closer.cgi?path=httpd/httpd-2.4.27.tar.bz2"
sha256 "71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a"
revision 3
bottle do
2017-10-03 08:15:21 +00:00
sha256 "936085a3765b2f865811de1a7717f2c356da6f70bd4a9b1cf42428234092ae0e" => :high_sierra
sha256 "9f3f88db8996c64b68e15283ef9b63c1a80356797480049ff461b79097b88496" => :sierra
sha256 "b16c00dcbf6011f23843872a6d7c4bd73192ac375d0d0f95799209bb0c6a61fe" => :el_capitan
end
depends_on "apr"
depends_on "apr-util"
depends_on "nghttp2"
depends_on "openssl"
depends_on "pcre"
def install
# fixup prefix references in favour of opt_prefix references
inreplace "Makefile.in",
'#@@ServerRoot@@#$(prefix)#', '#@@ServerRoot@@'"##{opt_prefix}#"
inreplace "docs/conf/extra/httpd-autoindex.conf.in",
"@exp_iconsdir@", "#{opt_pkgshare}/icons"
inreplace "docs/conf/extra/httpd-multilang-errordoc.conf.in",
"@exp_errordir@", "#{opt_pkgshare}/error"
# use Slackware-FHS layout as it's closest to what we want.
# these values cannot be passed directly to configure, unfortunately.
inreplace "config.layout" do |s|
s.gsub! "${datadir}/htdocs", "${datadir}"
s.gsub! "${htdocsdir}/manual", "#{pkgshare}/manual"
s.gsub! "${datadir}/error", "#{pkgshare}/error"
s.gsub! "${datadir}/icons", "#{pkgshare}/icons"
end
system "./configure", "--enable-layout=Slackware-FHS",
"--prefix=#{prefix}",
"--sbindir=#{bin}",
"--mandir=#{man}",
"--sysconfdir=#{etc}/httpd",
"--datadir=#{var}/www",
"--localstatedir=#{var}",
"--enable-mpms-shared=all",
"--enable-mods-shared=all",
"--enable-pie",
"--with-port=8080",
"--with-sslport=8443",
"--with-apr=#{Formula["apr"].opt_prefix}",
"--with-apr-util=#{Formula["apr-util"].opt_prefix}",
"--with-nghttp2=#{Formula["nghttp2"].opt_prefix}",
"--with-ssl=#{Formula["openssl"].opt_prefix}",
"--with-pcre=#{Formula["pcre"].opt_prefix}"
system "make", "install"
# remove non-executable files in bin dir (for brew audit)
rm bin/"envvars"
rm bin/"envvars-std"
# avoid using Cellar paths
inreplace %W[
#{include}/httpd/ap_config_layout.h
#{lib}/httpd/build/config_vars.mk
] do |s|
s.gsub! "#{lib}/httpd/modules", "#{HOMEBREW_PREFIX}/lib/httpd/modules"
end
inreplace %W[
#{bin}/apachectl
#{bin}/apxs
#{include}/httpd/ap_config_auto.h
#{include}/httpd/ap_config_layout.h
#{lib}/httpd/build/config_vars.mk
#{lib}/httpd/build/config.nice
] do |s|
s.gsub! prefix, opt_prefix
end
inreplace "#{lib}/httpd/build/config_vars.mk" do |s|
pcre = Formula["pcre"]
s.gsub! pcre.prefix.realpath, pcre.opt_prefix
s.gsub! "${prefix}/lib/httpd/modules",
"#{HOMEBREW_PREFIX}/lib/httpd/modules"
end
end
def post_install
(var/"cache/httpd").mkpath
(var/"www").mkpath
end
plist_options :manual => "apachectl start"
def plist; <<-EOS.undent
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>#{plist_name}</string>
<key>ProgramArguments</key>
<array>
<string>#{opt_bin}/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOS
end
test do
begin
expected_output = "Hello world!"
(testpath/"index.html").write expected_output
(testpath/"httpd.conf").write <<-EOS.undent
Listen 8080
DocumentRoot "#{testpath}"
ErrorLog "#{testpath}/httpd-error.log"
LoadModule authz_core_module #{lib}/httpd/modules/mod_authz_core.so
LoadModule unixd_module #{lib}/httpd/modules/mod_unixd.so
LoadModule dir_module #{lib}/httpd/modules/mod_dir.so
LoadModule mpm_event_module #{lib}/httpd/modules/mod_mpm_event.so
EOS
pid = fork do
exec bin/"httpd", "-DFOREGROUND", "-f", "#{testpath}/httpd.conf"
end
sleep 3
assert_match expected_output, shell_output("curl 127.0.0.1:8080")
ensure
Process.kill("TERM", pid)
Process.wait(pid)
end
end
end