Last active
January 2, 2016 10:19
-
-
Save iamjwc/8289637 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
require 'formula' | |
class Mysql < Formula | |
homepage 'http://dev.mysql.com/doc/refman/5.6/en/' | |
url 'http://downloads.mysql.com/archives/mysql-5.6/mysql-5.6.10.tar.gz' | |
version '5.6.10' | |
sha1 'f37979eafc241a0ebeac9548cb3f4113074271b7' | |
bottle do | |
sha1 'e07b9a207364b6e020fc96f49116b58d33d0eb78' => :mountain_lion | |
sha1 'b9b38e2ed705a3fcd79bb549f32e49b455f31917' => :lion | |
sha1 '30978684ee72c4dfb0b20263331b0c93972b3092' => :snow_leopard | |
end | |
depends_on 'cmake' => :build | |
depends_on 'pidof' unless MacOS.version >= :mountain_lion | |
option :universal | |
option 'with-tests', 'Build with unit tests' | |
option 'with-embedded', 'Build the embedded server' | |
option 'with-libedit', 'Compile with editline wrapper instead of readline' | |
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 'enable-local-infile', 'Build with local infile loading support' | |
option 'enable-memcached', 'Enable innodb-memcached support' | |
option 'enable-debug', 'Build with debug support' | |
conflicts_with 'mariadb', | |
:because => "mysql and mariadb install the same binaries." | |
conflicts_with 'percona-server', | |
:because => "mysql and percona-server install the same binaries." | |
conflicts_with 'mysql-cluster', | |
:because => "mysql and mysql-cluster install the same binaries." | |
env :std if build.universal? | |
fails_with :llvm do | |
build 2326 | |
cause "https://github.com/mxcl/homebrew/issues/issue/144" | |
end | |
def install | |
# Don't hard-code the libtool path. See: | |
# https://github.com/mxcl/homebrew/issues/20185 | |
inreplace "cmake/libutils.cmake", | |
"COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION}", | |
"COMMAND libtool -static -o ${TARGET_LOCATION}" | |
# Build without compiler or CPU specific optimization flags to facilitate | |
# compilation of gems and other software that queries `mysql-config`. | |
ENV.minimal_optimization | |
args = [".", | |
"-DCMAKE_INSTALL_PREFIX=#{prefix}", | |
"-DMYSQL_DATADIR=#{var}/mysql", | |
"-DINSTALL_MANDIR=#{man}", | |
"-DINSTALL_DOCDIR=#{doc}", | |
"-DINSTALL_INFODIR=#{info}", | |
# CMake prepends prefix, so use share.basename | |
"-DINSTALL_MYSQLSHAREDIR=#{share.basename}/#{name}", | |
"-DWITH_SSL=yes", | |
"-DDEFAULT_CHARSET=utf8", | |
"-DDEFAULT_COLLATION=utf8_general_ci", | |
"-DSYSCONFDIR=#{etc}"] | |
# To enable unit testing at build, we need to download the unit testing suite | |
if build.include? 'with-tests' | |
args << "-DENABLE_DOWNLOADS=ON" | |
else | |
args << "-DWITH_UNIT_TESTS=OFF" | |
end | |
# Build the embedded server | |
args << "-DWITH_EMBEDDED_SERVER=ON" if build.include? 'with-embedded' | |
# Compile with readline unless libedit is explicitly chosen | |
args << "-DWITH_READLINE=yes" unless build.include? 'with-libedit' | |
# Compile with ARCHIVE engine enabled if chosen | |
args << "-DWITH_ARCHIVE_STORAGE_ENGINE=1" if build.include? 'with-archive-storage-engine' | |
# Compile with BLACKHOLE engine enabled if chosen | |
args << "-DWITH_BLACKHOLE_STORAGE_ENGINE=1" if build.include? 'with-blackhole-storage-engine' | |
# Make universal for binding to universal applications | |
args << "-DCMAKE_OSX_ARCHITECTURES='i386;x86_64'" if build.universal? | |
# Build with local infile loading support | |
args << "-DENABLED_LOCAL_INFILE=1" if build.include? 'enable-local-infile' | |
# Build with memcached support | |
args << "-DWITH_INNODB_MEMCACHED=1" if build.include? 'enable-memcached' | |
# Build with debug support | |
args << "-DWITH_DEBUG=1" if build.include? 'enable-debug' | |
system "cmake", *args | |
system "make" | |
system "make install" | |
# Don't create databases inside of the prefix! | |
# See: https://github.com/mxcl/homebrew/issues/4975 | |
rm_rf prefix+'data' | |
# Link the setup script into bin | |
ln_s prefix+'scripts/mysql_install_db', bin+'mysql_install_db' | |
# Fix up the control script and link into bin | |
inreplace "#{prefix}/support-files/mysql.server" do |s| | |
s.gsub!(/^(PATH=".*)(")/, "\\1:#{HOMEBREW_PREFIX}/bin\\2") | |
# pidof can be replaced with pgrep from proctools on Mountain Lion | |
s.gsub!(/pidof/, 'pgrep') if MacOS.version >= :mountain_lion | |
end | |
ln_s "#{prefix}/support-files/mysql.server", bin | |
# Move mysqlaccess to libexec | |
mv "#{bin}/mysqlaccess", libexec | |
mv "#{bin}/mysqlaccess.conf", libexec | |
end | |
def post_install | |
# Make sure the var/mysql directory exists | |
(var+"mysql").mkpath | |
unless File.exist? "#{var}/mysql/mysql/user.frm" | |
ENV['TMPDIR'] = nil | |
system "#{bin}/mysql_install_db", '--verbose', "--user=#{ENV['USER']}", | |
"--basedir=#{prefix}", "--datadir=#{var}/mysql", "--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. | |
To connect: | |
mysql -uroot | |
EOS | |
end | |
plist_options :manual => "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_prefix}/bin/mysqld_safe</string> | |
<string>--bind-address=127.0.0.1</string> | |
</array> | |
<key>RunAtLoad</key> | |
<true/> | |
<key>WorkingDirectory</key> | |
<string>#{var}</string> | |
</dict> | |
</plist> | |
EOS | |
end | |
test do | |
(prefix+'mysql-test').cd do | |
system './mysql-test-run.pl', 'status' | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment