Last active
December 11, 2019 02:07
-
-
Save bennyfactor/46c434e9050f9f1be0739be093391cfd to your computer and use it in GitHub Desktop.
Homebrew Mysql 5.5.56 formula
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Mysql55 < Formula | |
desc "Open source relational database management system" | |
homepage "https://dev.mysql.com/doc/refman/5.5/en/" | |
url "https://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.56.tar.gz" | |
sha256 "3fd30a24267cef84ee8aeb327a5b08a669d3ab8c4d76d1b1b3b66d26cf777a0a" | |
bottle do | |
sha256 "57a68b94580d89ac07c633904da7218bb73092dcbc7d31071d96090a9b65c517" => :sierra | |
sha256 "867a059b4ea2769b2c54b6124f3c6d0558bdea87d5880043b084850d226d91f3" => :el_capitan | |
sha256 "477c1abafe1181b27fde3588725e475a0204159621214953deeaf3d4c4c21efa" => :yosemite | |
end | |
keg_only :versioned_formula | |
option "with-test", "Build with unit tests" | |
option "with-embedded", "Build the embedded server" | |
option "with-archive-storage-engine", "Compile with the ARCHIVE storage engine enabled" | |
option "with-blackhole-storage-engine", "Compile with the BLACKHOLE storage engine enabled" | |
option "with-local-infile", "Build with local infile loading support" | |
option "with-memcached", "Enable innodb-memcached support" | |
option "with-debug", "Build with debug support" | |
deprecated_option "enable-local-infile" => "with-local-infile" | |
deprecated_option "enable-memcached" => "with-memcached" | |
deprecated_option "enable-debug" => "with-debug" | |
deprecated_option "with-tests" => "with-test" | |
depends_on "cmake" => :build | |
depends_on "pidof" unless MacOS.version >= :mountain_lion | |
depends_on "openssl" | |
def datadir | |
var/"mysql" | |
end | |
def install | |
# Don't hard-code the libtool path. See: | |
# https://github.com/Homebrew/legacy-homebrew/issues/20185 | |
inreplace "cmake/libutils.cmake", | |
"COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION}", | |
"COMMAND libtool -static -o ${TARGET_LOCATION}" | |
# -DINSTALL_* are relative to prefix | |
args = %W[ | |
-DMYSQL_DATADIR=#{datadir} | |
-DINSTALL_INCLUDEDIR=include/mysql | |
-DINSTALL_MANDIR=share/man | |
-DINSTALL_DOCDIR=share/doc/#{name} | |
-DINSTALL_INFODIR=share/info | |
-DINSTALL_dbSHAREDIR=share/mysql | |
-DWITH_SSL=system | |
-DDEFAULT_CHARSET=utf8 | |
-DDEFAULT_COLLATION=utf8_general_ci | |
-DSYSCONFDIR=#{etc} | |
-DCOMPILATION_COMMENT=Homebrew | |
-DWITH_EDITLINE=system | |
] | |
# To enable unit testing at build, we need to download the unit testing suite | |
if build.with? "tests" | |
args << "-DENABLE_DOWNLOADS=ON" | |
else | |
args << "-DWITH_UNIT_TESTS=OFF" | |
end | |
# Build the embedded server | |
args << "-DWITH_EMBEDDED_SERVER=ON" if build.with? "embedded" | |
# Compile with ARCHIVE engine enabled if chosen | |
args << "-DWITH_ARCHIVE_STORAGE_ENGINE=1" if build.with? "archive-storage-engine" | |
# Compile with BLACKHOLE engine enabled if chosen | |
args << "-DWITH_BLACKHOLE_STORAGE_ENGINE=1" if build.with? "blackhole-storage-engine" | |
# Build with local infile loading support | |
args << "-DENABLED_LOCAL_INFILE=1" if build.with? "local-infile" | |
# Build with memcached support | |
args << "-DWITH_INNODB_MEMCACHED=1" if build.with? "memcached" | |
# Build with debug support | |
args << "-DWITH_DEBUG=1" if build.with? "debug" | |
system "CC=gcc-6 cmake", ".", *std_cmake_args, *args | |
system "make" | |
system "make", "install" | |
# We don't want to keep a 240MB+ folder around most users won't need. | |
(prefix/"mysql-test").cd do | |
system "./mysql-test-run.pl", "status", "--vardir=#{Dir.mktmpdir}" | |
end | |
rm_rf prefix/"mysql-test" | |
# Don't create databases inside of the prefix! | |
# See: https://github.com/Homebrew/homebrew/issues/4975 | |
rm_rf prefix/"data" | |
# Link the setup script into bin | |
bin.install_symlink prefix/"scripts/mysql_install_db" | |
# Fix up the control script and link into bin | |
inreplace "#{prefix}/support-files/mysql.server", | |
/^(PATH=".*)(")/, | |
"\\1:#{HOMEBREW_PREFIX}/bin\\2" | |
bin.install_symlink prefix/"support-files/mysql.server" | |
libexec.install bin/"mysqlaccess" | |
libexec.install bin/"mysqlaccess.conf" | |
# Install my.cnf that binds to 127.0.0.1 by default | |
(buildpath/"my.cnf").write <<-EOS.undent | |
# Default Homebrew MySQL server config | |
[mysqld] | |
# Only allow connections from localhost | |
bind-address = 127.0.0.1 | |
EOS | |
etc.install "my.cnf" | |
end | |
def post_install | |
# Make sure the datadir exists | |
datadir.mkpath | |
unless (datadir/"mysql/user.frm").exist? | |
ENV["TMPDIR"] = nil | |
system bin/"mysql_install_db", "--verbose", "--user=#{ENV["USER"]}", | |
"--basedir=#{prefix}", "--datadir=#{datadir}", "--tmpdir=/tmp" | |
end | |
end | |
def caveats; <<-EOS.undent | |
A "/etc/my.cnf" from another install may interfere with a Homebrew-built | |
server starting up correctly. | |
MySQL is configured to only allow connections from localhost by default | |
To connect: | |
#{opt_bin}/mysql -uroot | |
EOS | |
end | |
plist_options :manual => "#{HOMEBREW_PREFIX}/opt/mysql55/bin/mysql.server start" | |
def plist; <<-EOS.undent | |
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<dict> | |
<key>KeepAlive</key> | |
<true/> | |
<key>Label</key> | |
<string>#{plist_name}</string> | |
<key>ProgramArguments</key> | |
<array> | |
<string>#{opt_bin}/mysqld_safe</string> | |
<string>--datadir=#{datadir}</string> | |
</array> | |
<key>RunAtLoad</key> | |
<true/> | |
<key>WorkingDirectory</key> | |
<string>#{datadir}</string> | |
</dict> | |
</plist> | |
EOS | |
end | |
test do | |
begin | |
# Expects datadir to be a completely clean dir, which testpath isn't. | |
dir = Dir.mktmpdir | |
system bin/"mysql_install_db", "--user=#{ENV["USER"]}", | |
"--basedir=#{prefix}", "--datadir=#{dir}", "--tmpdir=#{dir}" | |
pid = fork do | |
exec bin/"mysqld", "--datadir=#{dir}" | |
end | |
sleep 2 | |
output = shell_output("curl 127.0.0.1:3306") | |
output.force_encoding("ASCII-8BIT") if output.respond_to?(:force_encoding) | |
assert_match version.to_s, output | |
ensure | |
Process.kill(9, pid) | |
Process.wait(pid) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment