class PostgresqlAT10 < Formula desc "Object-relational database system" homepage "https://www.postgresql.org/" url "https://ftp.postgresql.org/pub/source/v10.16/postgresql-10.16.tar.bz2" sha256 "a35c718b1b6690e01c69626d467edb933784f8d1d6741e21fe6cce0738467bb3" license "PostgreSQL" revision 1 livecheck do url "https://ftp.postgresql.org/pub/source/" regex(%r{href=["']?v?(10(?:\.\d+)+)/?["' >]}i) end bottle do sha256 arm64_big_sur: "2394c47aefba56aa92284f393dde0f15d1b7ff526dd3e95a6b66d02d1b7fd0a3" sha256 big_sur: "569467a10dc757df4379d04c9cd04faa7c8e410a8b8235a2fc4e35e5dfe5df36" sha256 catalina: "4514036606239ca6ee8f80f732883507450b0b39412c3d4c0fc0f00826650263" sha256 mojave: "79b03ea9605950cbc9fd2495669d4745557f532dd3f98b8f3956f2b8786d1a15" end keg_only :versioned_formula # https://www.postgresql.org/support/versioning/ deprecate! date: "2022-11-10", because: :unsupported depends_on "pkg-config" => :build depends_on "icu4c" depends_on "openssl@1.1" depends_on "readline" uses_from_macos "krb5" uses_from_macos "libxslt" uses_from_macos "openldap" uses_from_macos "perl" on_linux do depends_on "linux-pam" depends_on "util-linux" end # Patch for `error: conflicting types for 'DefineCollation'` # when built against icu4c 68.2. Adapted from # https://svnweb.freebsd.org/ports/head/databases/postgresql10-server/files/patch-icu68?revision=553940&view=co patch do url "https://raw.githubusercontent.com/Homebrew/formula-patches/a28787a7f9b4a33cf5036379236e5a57a36282bc/postgresql%4010/icu4c68-2.patch" sha256 "8d625f31f176c256a9b8b5763e751091472d9f8a57e12bb7324c990777cf674c" end def install ENV.prepend "LDFLAGS", "-L#{Formula["openssl@1.1"].opt_lib} -L#{Formula["readline"].opt_lib}" ENV.prepend "CPPFLAGS", "-I#{Formula["openssl@1.1"].opt_include} -I#{Formula["readline"].opt_include}" args = %W[ --disable-debug --prefix=#{prefix} --datadir=#{pkgshare} --libdir=#{lib} --sysconfdir=#{etc} --docdir=#{doc} --enable-thread-safety --with-bonjour --with-gssapi --with-icu --with-ldap --with-libxml --with-libxslt --with-openssl --with-pam --with-perl --with-tcl --with-uuid=e2fs ] # PostgreSQL by default uses xcodebuild internally to determine this, # which does not work on CLT-only installs. args << "PG_SYSROOT=#{MacOS.sdk_path}" if MacOS.sdk_root_needed? system "./configure", *args system "make" # pkglibdir=#{lib}/postgresql dirs = %W[datadir=#{pkgshare} libdir=#{lib} pkglibdir=#{lib}] # Temporarily disable building/installing the documentation. # Postgresql seems to "know" the build system has been altered and # tries to regenerate the documentation when using `install-world`. # This results in the build failing: # `ERROR: `osx' is missing on your system.` # Attempting to fix that by adding a dependency on `open-sp` doesn't # work and the build errors out on generating the documentation, so # for now let's simply omit it so we can package Postgresql for Mojave. if DevelopmentTools.clang_build_version >= 1000 system "make", "all" system "make", "-C", "contrib", "install", "all", *dirs system "make", "install", "all", *dirs else system "make", "install-world", *dirs end end def post_install (var/"log").mkpath postgresql_datadir.mkpath # Don't initialize database, it clashes when testing other PostgreSQL versions. return if ENV["HOMEBREW_GITHUB_ACTIONS"] system "#{bin}/initdb", "--locale=C", "-E", "UTF-8", postgresql_datadir unless pg_version_exists? end def postgresql_datadir var/name end def postgresql_log_path var/"log/#{name}.log" end def pg_version_exists? (postgresql_datadir/"PG_VERSION").exist? end def caveats <<~EOS This formula has created a default database cluster with: initdb --locale=C -E UTF-8 #{postgresql_datadir} For more details, read: https://www.postgresql.org/docs/#{version.major}/app-initdb.html EOS end plist_options manual: "pg_ctl -D #{HOMEBREW_PREFIX}/var/postgresql@10 start" def plist <<~EOS KeepAlive Label #{plist_name} ProgramArguments #{opt_bin}/postgres -D #{postgresql_datadir} RunAtLoad WorkingDirectory #{HOMEBREW_PREFIX} StandardOutPath #{postgresql_log_path} StandardErrorPath #{postgresql_log_path} EOS end test do system "#{bin}/initdb", testpath/"test" unless ENV["HOMEBREW_GITHUB_ACTIONS"] assert_equal pkgshare.to_s, shell_output("#{bin}/pg_config --sharedir").chomp assert_equal lib.to_s, shell_output("#{bin}/pg_config --libdir").chomp assert_equal lib.to_s, shell_output("#{bin}/pg_config --pkglibdir").chomp end end