class Uwsgi < Formula desc "Full stack for building hosting services" homepage "https://uwsgi-docs.readthedocs.org/en/latest/" revision 2 head "https://github.com/unbit/uwsgi.git" stable do url "https://projects.unbit.it/downloads/uwsgi-2.0.18.tar.gz" sha256 "4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583" # Fix "library not found for -lgcc_s.10.5" with 10.14 SDK # Remove in next release patch do url "https://github.com/unbit/uwsgi/commit/6b1b397f.diff?full_index=1" sha256 "b2c3a22f980a4e3bd2ab2fe5c5356d8a91e567a3ab3e6ccbeeeb2ba4efe4568a" end end bottle do sha256 "a918ea316ed8408dae9257ee12ad3df6db84996be08a2e657efab291a688d702" => :catalina sha256 "d7d6455c84e3a0f02ba2843f2a0c05a8433ce12042b54024048fb30457f24035" => :mojave sha256 "5064635530307154b9d08a912ed246b1c0049f9a8bcf1e7e9b9994160be09069" => :high_sierra end depends_on "pkg-config" => :build depends_on "openssl@1.1" depends_on "pcre" depends_on "python" depends_on "yajl" uses_from_macos "curl" uses_from_macos "libxml2" def install # Fix file not found errors for /usr/lib/system/libsystem_symptoms.dylib and # /usr/lib/system/libsystem_darwin.dylib on 10.11 and 10.12, respectively if MacOS.version == :sierra || MacOS.version == :el_capitan ENV["SDKROOT"] = MacOS.sdk_path end ENV.append %w[CFLAGS LDFLAGS], "-arch #{MacOS.preferred_arch}" openssl = Formula["openssl@1.1"] ENV.prepend "CFLAGS", "-I#{openssl.opt_include}" ENV.prepend "LDFLAGS", "-L#{openssl.opt_lib}" (buildpath/"buildconf/brew.ini").write <<~EOS [uwsgi] ssl = true json = yajl xml = libxml2 yaml = embedded inherit = base plugin_dir = #{libexec}/uwsgi embedded_plugins = null EOS system "python3", "uwsgiconfig.py", "--verbose", "--build", "brew" plugins = %w[airbrake alarm_curl alarm_speech asyncio cache carbon cgi cheaper_backlog2 cheaper_busyness corerouter curl_cron cplusplus dumbloop dummy echo emperor_amqp fastrouter forkptyrouter gevent http logcrypto logfile ldap logpipe logsocket msgpack notfound pam ping psgi pty rawrouter router_basicauth router_cache router_expires router_hash router_http router_memcached router_metrics router_radius router_redirect router_redis router_rewrite router_static router_uwsgi router_xmldir rpc signal spooler sqlite3 sslrouter stats_pusher_file stats_pusher_socket symcall syslog transformation_chunked transformation_gzip transformation_offload transformation_tofile transformation_toupper ugreen webdav zergpool] (libexec/"uwsgi").mkpath plugins.each do |plugin| system "python3", "uwsgiconfig.py", "--verbose", "--plugin", "plugins/#{plugin}", "brew" end system "python3", "uwsgiconfig.py", "--verbose", "--plugin", "plugins/python", "brew", "python3" bin.install "uwsgi" end plist_options :manual => "uwsgi" def plist; <<~EOS Label #{plist_name} RunAtLoad KeepAlive ProgramArguments #{opt_bin}/uwsgi --uid _www --gid _www --master --die-on-term --autoload --logto #{HOMEBREW_PREFIX}/var/log/uwsgi.log --emperor #{HOMEBREW_PREFIX}/etc/uwsgi/apps-enabled WorkingDirectory #{HOMEBREW_PREFIX} EOS end test do (testpath/"helloworld.py").write <<~EOS def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] EOS pid = fork do exec "#{bin}/uwsgi --http-socket 127.0.0.1:8080 --protocol=http --plugin python3 -w helloworld" end sleep 2 begin assert_match "Hello World", shell_output("curl localhost:8080") ensure Process.kill("SIGINT", pid) Process.wait(pid) end end end