diff --git a/Aliases/postgresql@12 b/Aliases/postgresql@12 deleted file mode 120000 index 0e4f62d3434..00000000000 --- a/Aliases/postgresql@12 +++ /dev/null @@ -1 +0,0 @@ -../Formula/postgresql.rb \ No newline at end of file diff --git a/Formula/postgresql@12.rb b/Formula/postgresql@12.rb new file mode 100644 index 00000000000..3018f3176cc --- /dev/null +++ b/Formula/postgresql@12.rb @@ -0,0 +1,128 @@ +class PostgresqlAT12 < Formula + desc "Object-relational database system" + homepage "https://www.postgresql.org/" + url "https://ftp.postgresql.org/pub/source/v12.4/postgresql-12.4.tar.bz2" + sha256 "bee93fbe2c32f59419cb162bcc0145c58da9a8644ee154a30b9a5ce47de606cc" + license "PostgreSQL" + + keg_only :versioned_formula + + depends_on "pkg-config" => :build + depends_on "icu4c" + + # GSSAPI provided by Kerberos.framework crashes when forked. + # See https://github.com/Homebrew/homebrew-core/issues/47494. + depends_on "krb5" + + depends_on "openssl@1.1" + depends_on "readline" + + uses_from_macos "libxml2" + uses_from_macos "libxslt" + uses_from_macos "perl" + + on_linux do + depends_on "util-linux" + 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=#{opt_pkgshare} + --libdir=#{opt_lib} + --includedir=#{opt_include} + --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" + system "make", "install-world", "datadir=#{pkgshare}", + "libdir=#{lib}", + "pkglibdir=#{lib}/postgresql", + "includedir=#{include}", + "pkgincludedir=#{include}/postgresql", + "includedir_server=#{include}/postgresql/server", + "includedir_internal=#{include}/postgresql/internal" + end + + def post_install + return if ENV["CI"] + + (var/"log").mkpath + (var/"postgres").mkpath + unless File.exist? "#{var}/postgres/PG_VERSION" + system "#{bin}/initdb", "--locale=C", "-E", "UTF-8", "#{var}/postgres" + end + end + + def caveats + <<~EOS + To migrate existing data from a previous major version of PostgreSQL run: + brew postgresql-upgrade-database + + This formula has created a default database cluster with: + initdb --locale=C -E UTF-8 #{var}/postgres + 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/postgres@12 start" + + def plist + <<~EOS + + + + + KeepAlive + + Label + #{plist_name} + ProgramArguments + + #{opt_bin}/postgres + -D + #{var}/postgres + + RunAtLoad + + WorkingDirectory + #{HOMEBREW_PREFIX} + StandardOutPath + #{var}/log/postgres.log + StandardErrorPath + #{var}/log/postgres.log + + + EOS + end + + test do + system "#{bin}/initdb", testpath/"test" unless ENV["CI"] + assert_equal opt_pkgshare.to_s, shell_output("#{bin}/pg_config --sharedir").chomp + assert_equal opt_lib.to_s, shell_output("#{bin}/pg_config --libdir").chomp + assert_equal opt_lib.to_s, shell_output("#{bin}/pg_config --pkglibdir").chomp + end +end