From 4eb6e3e42a89946c76f7f978972c36ae397b067b Mon Sep 17 00:00:00 2001 From: Rui Chen Date: Thu, 21 Nov 2024 09:29:29 -0500 Subject: [PATCH] php@8.3 8.3.14 (new formula) Signed-off-by: Rui Chen --- .github/autobump.txt | 1 + Formula/p/php@8.3.rb | 470 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 471 insertions(+) create mode 100644 Formula/p/php@8.3.rb diff --git a/.github/autobump.txt b/.github/autobump.txt index f71aacb324641..e866362f94d5a 100644 --- a/.github/autobump.txt +++ b/.github/autobump.txt @@ -2257,6 +2257,7 @@ php-code-sniffer php-cs-fixer php@8.1 php@8.2 +php@8.3 phpmd phpmyadmin phpunit diff --git a/Formula/p/php@8.3.rb b/Formula/p/php@8.3.rb new file mode 100644 index 0000000000000..731e510880653 --- /dev/null +++ b/Formula/p/php@8.3.rb @@ -0,0 +1,470 @@ +class PhpAT83 < Formula + desc "General-purpose scripting language" + homepage "https://www.php.net/" + # Should only be updated if the new version is announced on the homepage, https://www.php.net/ + url "https://www.php.net/distributions/php-8.3.14.tar.xz" + mirror "https://fossies.org/linux/www/php-8.3.14.tar.xz" + sha256 "58b4cb9019bf70c0cbcdb814c7df79b9065059d14cf7dbf48d971f8e56ae9be7" + license "PHP-3.01" + + livecheck do + url "https://www.php.net/downloads" + regex(/href=.*?php[._-]v?(#{Regexp.escape(version.major_minor)}(?:\.\d+)*)\.t/i) + end + + bottle do + sha256 arm64_sequoia: "8fedb3512013d468f65bdf6016c92eeeb3214a1033a41c05a2252b01be7d709e" + sha256 arm64_sonoma: "4d75851f04e7082fb7ccbe26590a0224ad3fee9abc5bf987fd4ab28e98b55892" + sha256 arm64_ventura: "fcbcc34c8b092d32a42c21317939b87e02aa063424b33b5f23d4626b3f1a4c69" + sha256 sonoma: "08a458e6199c152a6b01f8faed44af4fd6a703e6a6039929926d5694b9241532" + sha256 ventura: "20b4fb87769fbe4ca162808d8cf23cad8aeed2c4f01b5ed4524a67b6435ed23c" + sha256 x86_64_linux: "c447bdd7172fe25fa1face958c1361c77adef4c7b38b3886a41f71ca1ddde698" + end + + keg_only :versioned_formula + + # Security Support Until 31 Dec 2027 + # https://www.php.net/supported-versions.php + deprecate! date: "2027-12-31", because: :unsupported + + depends_on "httpd" => [:build, :test] + depends_on "pkgconf" => :build + depends_on "apr" + depends_on "apr-util" + depends_on "argon2" + depends_on "aspell" + depends_on "autoconf" + depends_on "curl" + depends_on "freetds" + depends_on "gd" + depends_on "gettext" + depends_on "gmp" + depends_on "icu4c@76" + depends_on "krb5" + depends_on "libpq" + depends_on "libsodium" + depends_on "libzip" + depends_on "oniguruma" + depends_on "openldap" + depends_on "openssl@3" + depends_on "pcre2" + depends_on "sqlite" + depends_on "tidy-html5" + depends_on "unixodbc" + + uses_from_macos "xz" => :build + uses_from_macos "bzip2" + uses_from_macos "libedit" + uses_from_macos "libffi", since: :catalina + uses_from_macos "libxml2" + uses_from_macos "libxslt" + uses_from_macos "zlib" + + on_macos do + # PHP build system incorrectly links system libraries + # see https://github.com/php/php-src/issues/10680 + patch :DATA + end + + def install + # buildconf required due to system library linking bug patch + system "./buildconf", "--force" + + inreplace "configure" do |s| + s.gsub! "APACHE_THREADED_MPM=`$APXS_HTTPD -V 2>/dev/null | grep 'threaded:.*yes'`", + "APACHE_THREADED_MPM=" + s.gsub! "APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR`", + "APXS_LIBEXECDIR='$(INSTALL_ROOT)#{lib}/httpd/modules'" + s.gsub! "-z `$APXS -q SYSCONFDIR`", + "-z ''" + end + + # Update error message in apache sapi to better explain the requirements + # of using Apache http in combination with php if the non-compatible MPM + # has been selected. Homebrew has chosen not to support being able to + # compile a thread safe version of PHP and therefore it is not + # possible to recompile as suggested in the original message + inreplace "sapi/apache2handler/sapi_apache2.c", + "You need to recompile PHP.", + "Homebrew PHP does not support a thread-safe php binary. " \ + "To use the PHP apache sapi please change " \ + "your httpd config to use the prefork MPM" + + inreplace "sapi/fpm/php-fpm.conf.in", ";daemonize = yes", "daemonize = no" + + config_path = etc/"php/#{version.major_minor}" + # Prevent system pear config from inhibiting pear install + (config_path/"pear.conf").delete if (config_path/"pear.conf").exist? + + # Prevent homebrew from hardcoding path to sed shim in phpize script + ENV["lt_cv_path_SED"] = "sed" + + # system pkg-config missing + ENV["KERBEROS_CFLAGS"] = " " + if OS.mac? + ENV["SASL_CFLAGS"] = "-I#{MacOS.sdk_path_if_needed}/usr/include/sasl" + ENV["SASL_LIBS"] = "-lsasl2" + else + ENV["SQLITE_CFLAGS"] = "-I#{Formula["sqlite"].opt_include}" + ENV["SQLITE_LIBS"] = "-lsqlite3" + ENV["BZIP_DIR"] = Formula["bzip2"].opt_prefix + end + + # Each extension that is built on Mojave needs a direct reference to the + # sdk path or it won't find the headers + headers_path = "=#{MacOS.sdk_path_if_needed}/usr" if OS.mac? + + # `_www` only exists on macOS. + fpm_user = OS.mac? ? "_www" : "www-data" + fpm_group = OS.mac? ? "_www" : "www-data" + + args = %W[ + --prefix=#{prefix} + --localstatedir=#{var} + --sysconfdir=#{config_path} + --with-config-file-path=#{config_path} + --with-config-file-scan-dir=#{config_path}/conf.d + --with-pear=#{pkgshare}/pear + --enable-bcmath + --enable-calendar + --enable-dba + --enable-exif + --enable-ftp + --enable-fpm + --enable-gd + --enable-intl + --enable-mbregex + --enable-mbstring + --enable-mysqlnd + --enable-pcntl + --enable-phpdbg + --enable-phpdbg-readline + --enable-shmop + --enable-soap + --enable-sockets + --enable-sysvmsg + --enable-sysvsem + --enable-sysvshm + --with-apxs2=#{Formula["httpd"].opt_bin}/apxs + --with-bz2#{headers_path} + --with-curl + --with-external-gd + --with-external-pcre + --with-ffi + --with-fpm-user=#{fpm_user} + --with-fpm-group=#{fpm_group} + --with-gettext=#{Formula["gettext"].opt_prefix} + --with-gmp=#{Formula["gmp"].opt_prefix} + --with-iconv#{headers_path} + --with-kerberos + --with-layout=GNU + --with-ldap=#{Formula["openldap"].opt_prefix} + --with-libxml + --with-libedit + --with-mhash#{headers_path} + --with-mysql-sock=/tmp/mysql.sock + --with-mysqli=mysqlnd + --with-ndbm#{headers_path} + --with-openssl + --with-password-argon2=#{Formula["argon2"].opt_prefix} + --with-pdo-dblib=#{Formula["freetds"].opt_prefix} + --with-pdo-mysql=mysqlnd + --with-pdo-odbc=unixODBC,#{Formula["unixodbc"].opt_prefix} + --with-pdo-pgsql=#{Formula["libpq"].opt_prefix} + --with-pdo-sqlite + --with-pgsql=#{Formula["libpq"].opt_prefix} + --with-pic + --with-pspell=#{Formula["aspell"].opt_prefix} + --with-sodium + --with-sqlite3 + --with-tidy=#{Formula["tidy-html5"].opt_prefix} + --with-unixODBC + --with-xsl + --with-zip + --with-zlib + ] + + if OS.mac? + args << "--enable-dtrace" + args << "--with-ldap-sasl" + args << "--with-os-sdkpath=#{MacOS.sdk_path_if_needed}" + else + args << "--disable-dtrace" + args << "--without-ldap-sasl" + args << "--without-ndbm" + args << "--without-gdbm" + end + + system "./configure", *args + system "make" + system "make", "install" + + # Allow pecl to install outside of Cellar + extension_dir = Utils.safe_popen_read(bin/"php-config", "--extension-dir").chomp + orig_ext_dir = File.basename(extension_dir) + inreplace bin/"php-config", lib/"php", prefix/"pecl" + %w[development production].each do |mode| + inreplace "php.ini-#{mode}", %r{; ?extension_dir = "\./"}, + "extension_dir = \"#{HOMEBREW_PREFIX}/lib/php/pecl/#{orig_ext_dir}\"" + end + + # Use OpenSSL cert bundle + openssl = Formula["openssl@3"] + %w[development production].each do |mode| + inreplace "php.ini-#{mode}", /; ?openssl\.cafile=/, + "openssl.cafile = \"#{openssl.pkgetc}/cert.pem\"" + inreplace "php.ini-#{mode}", /; ?openssl\.capath=/, + "openssl.capath = \"#{openssl.pkgetc}/certs\"" + end + + config_files = { + "php.ini-development" => "php.ini", + "php.ini-production" => "php.ini-production", + "sapi/fpm/php-fpm.conf" => "php-fpm.conf", + "sapi/fpm/www.conf" => "php-fpm.d/www.conf", + } + config_files.each_value do |dst| + dst_default = config_path/"#{dst}.default" + rm dst_default if dst_default.exist? + end + config_path.install config_files + + unless (var/"log/php-fpm.log").exist? + (var/"log").mkpath + touch var/"log/php-fpm.log" + end + end + + def post_install + pear_prefix = pkgshare/"pear" + pear_files = %W[ + #{pear_prefix}/.depdblock + #{pear_prefix}/.filemap + #{pear_prefix}/.depdb + #{pear_prefix}/.lock + ] + + %W[ + #{pear_prefix}/.channels + #{pear_prefix}/.channels/.alias + ].each do |f| + chmod 0755, f + pear_files.concat(Dir["#{f}/*"]) + end + + chmod 0644, pear_files + + # Custom location for extensions installed via pecl + pecl_path = HOMEBREW_PREFIX/"lib/php/pecl" + pecl_path.mkpath + ln_s pecl_path, prefix/"pecl" unless (prefix/"pecl").exist? + extension_dir = Utils.safe_popen_read(bin/"php-config", "--extension-dir").chomp + php_basename = File.basename(extension_dir) + php_ext_dir = opt_prefix/"lib/php"/php_basename + + # fix pear config to install outside cellar + pear_path = HOMEBREW_PREFIX/"share/pear" + cp_r pkgshare/"pear/.", pear_path + { + "php_ini" => etc/"php/#{version.major_minor}/php.ini", + "php_dir" => pear_path, + "doc_dir" => pear_path/"doc", + "ext_dir" => pecl_path/php_basename, + "bin_dir" => opt_bin, + "data_dir" => pear_path/"data", + "cfg_dir" => pear_path/"cfg", + "www_dir" => pear_path/"htdocs", + "man_dir" => HOMEBREW_PREFIX/"share/man", + "test_dir" => pear_path/"test", + "php_bin" => opt_bin/"php", + }.each do |key, value| + value.mkpath if /(? + SetHandler application/x-httpd-php + + + Finally, check DirectoryIndex includes index.php + DirectoryIndex index.php index.html + + The php.ini and php-fpm.ini file can be found in: + #{etc}/php/#{version.major_minor}/ + EOS + end + + service do + run [opt_sbin/"php-fpm", "--nodaemonize"] + run_type :immediate + keep_alive true + error_log_path var/"log/php-fpm.log" + working_dir var + end + + test do + assert_match(/^Zend OPcache$/, shell_output("#{bin}/php -i"), + "Zend OPCache extension not loaded") + # Test related to libxml2 and + # https://github.com/Homebrew/homebrew-core/issues/28398 + assert_includes (bin/"php").dynamically_linked_libraries, + (Formula["libpq"].opt_lib/shared_library("libpq", 5)).to_s + + system "#{sbin}/php-fpm", "-t" + system bin/"phpdbg", "-V" + system bin/"php-cgi", "-m" + # Prevent SNMP extension to be added + refute_match(/^snmp$/, shell_output("#{bin}/php -m"), + "SNMP extension doesn't work reliably with Homebrew on High Sierra") + begin + port = free_port + port_fpm = free_port + + expected_output = /^Hello world!$/ + (testpath/"index.php").write <<~PHP + + SetHandler application/x-httpd-php + + EOS + + (testpath/"fpm.conf").write <<~EOS + [global] + daemonize=no + [www] + listen = 127.0.0.1:#{port_fpm} + pm = dynamic + pm.max_children = 5 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + EOS + + (testpath/"httpd-fpm.conf").write <<~EOS + #{main_config} + LoadModule mpm_event_module lib/httpd/modules/mod_mpm_event.so + LoadModule proxy_module lib/httpd/modules/mod_proxy.so + LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so + + SetHandler "proxy:fcgi://127.0.0.1:#{port_fpm}" + + EOS + + pid = fork do + exec Formula["httpd"].opt_bin/"httpd", "-X", "-f", "#{testpath}/httpd.conf" + end + sleep 10 + + assert_match expected_output, shell_output("curl -s 127.0.0.1:#{port}") + + Process.kill("TERM", pid) + Process.wait(pid) + + fpm_pid = fork do + exec sbin/"php-fpm", "-y", "fpm.conf" + end + pid = fork do + exec Formula["httpd"].opt_bin/"httpd", "-X", "-f", "#{testpath}/httpd-fpm.conf" + end + sleep 10 + + assert_match expected_output, shell_output("curl -s 127.0.0.1:#{port}") + ensure + if pid + Process.kill("TERM", pid) + Process.wait(pid) + end + if fpm_pid + Process.kill("TERM", fpm_pid) + Process.wait(fpm_pid) + end + end + end +end + +__END__ +diff --git a/build/php.m4 b/build/php.m4 +index 3624a33a8e..d17a635c2c 100644 +--- a/build/php.m4 ++++ b/build/php.m4 +@@ -425,7 +425,7 @@ dnl + dnl Adds a path to linkpath/runpath (LDFLAGS). + dnl + AC_DEFUN([PHP_ADD_LIBPATH],[ +- if test "$1" != "/usr/$PHP_LIBDIR" && test "$1" != "/usr/lib"; then ++ if test "$1" != "$PHP_OS_SDKPATH/usr/$PHP_LIBDIR" && test "$1" != "/usr/lib"; then + PHP_EXPAND_PATH($1, ai_p) + ifelse([$2],,[ + _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) +@@ -470,7 +470,7 @@ dnl + dnl Add an include path. If before is 1, add in the beginning of INCLUDES. + dnl + AC_DEFUN([PHP_ADD_INCLUDE],[ +- if test "$1" != "/usr/include"; then ++ if test "$1" != "$PHP_OS_SDKPATH/usr/include"; then + PHP_EXPAND_PATH($1, ai_p) + PHP_RUN_ONCE(INCLUDEPATH, $ai_p, [ + if test "$2"; then +diff --git a/configure.ac b/configure.ac +index 36c6e5e3e2..71b1a16607 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -190,6 +190,14 @@ PHP_ARG_WITH([libdir], + [lib], + [no]) + ++dnl Support systems with system libraries/includes in e.g. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk. ++PHP_ARG_WITH([os-sdkpath], ++ [for system SDK directory], ++ [AS_HELP_STRING([--with-os-sdkpath=NAME], ++ [Ignore system libraries and includes in NAME rather than /])], ++ [], ++ [no]) ++ + PHP_ARG_ENABLE([rpath], + [whether to enable runpaths], + [AS_HELP_STRING([--disable-rpath],