7564568cf1
It does not appear to be possible to make mysql or percona link against GNU readline anymore, since mysql stopped bundling it.
164 lines
5.2 KiB
Ruby
164 lines
5.2 KiB
Ruby
require 'formula'
|
|
|
|
class PerconaServer < Formula
|
|
homepage 'http://www.percona.com'
|
|
url 'http://www.percona.com/redir/downloads/Percona-Server-5.6/LATEST/source/Percona-Server-5.6.14-rel62.0.tar.gz'
|
|
version '5.6.14-rel62.0'
|
|
sha1 '6d9ddd92338c70ec13bdeb9a23568a990a5766f9'
|
|
|
|
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 'enable-local-infile', 'Build with local infile loading support'
|
|
|
|
|
|
conflicts_with 'mariadb', 'mysql', 'mysql-cluster',
|
|
:because => "percona, mariadb, and mysql install the same binaries."
|
|
|
|
env :std if build.universal?
|
|
|
|
fails_with :llvm do
|
|
build 2334
|
|
cause "https://github.com/mxcl/homebrew/issues/issue/144"
|
|
end
|
|
|
|
# Where the database files should be located. Existing installs have them
|
|
# under var/percona, but going forward they will be under var/msyql to be
|
|
# shared with the mysql and mariadb formulae.
|
|
def datadir
|
|
@datadir ||= (var/'percona').directory? ? var/'percona' : var/'mysql'
|
|
end
|
|
|
|
def patches
|
|
# Fixes percona server 5.6 compilation on OS X 10.9, based on
|
|
# https://github.com/mxcl/homebrew/commit/aad5d93f4fabbf69766deb83780d3a6eeab7061a
|
|
# for mysql 5.6
|
|
"https://gist.github.com/israelshirk/7cc640498cf264ebfce3/raw/846839c84647c4190ad683e4cbf0fabcd8931f97/gistfile1.txt"
|
|
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 = %W[
|
|
-DCMAKE_INSTALL_PREFIX=#{prefix}
|
|
-DCMAKE_FIND_FRAMEWORK=LAST
|
|
-DCMAKE_VERBOSE_MAKEFILE=ON
|
|
-DMYSQL_DATADIR=#{datadir}
|
|
-DINSTALL_INCLUDEDIR=include/mysql
|
|
-DINSTALL_MANDIR=share/man
|
|
-DINSTALL_DOCDIR=share/doc/#{name}
|
|
-DINSTALL_INFODIR=share/info
|
|
-DINSTALL_MYSQLSHAREDIR=share/mysql
|
|
-DWITH_SSL=yes
|
|
-DDEFAULT_CHARSET=utf8
|
|
-DDEFAULT_COLLATION=utf8_general_ci
|
|
-DSYSCONFDIR=#{etc}
|
|
-DCOMPILATION_COMMENT=Homebrew
|
|
-DWITH_EDITLINE=system
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
|
]
|
|
|
|
# PAM plugin is Linux-only at the moment
|
|
args.concat %W[
|
|
-DWITHOUT_AUTH_PAM=1
|
|
-DWITHOUT_AUTH_PAM_COMPAT=1
|
|
-DWITHOUT_DIALOG=1
|
|
]
|
|
|
|
# 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'
|
|
|
|
# Make universal for binding to universal applications
|
|
args << "-DCMAKE_OSX_ARCHITECTURES='#{Hardware::CPU.universal_archs.as_cmake_arch_flags}'" if build.universal?
|
|
|
|
# Build with local infile loading support
|
|
args << "-DENABLED_LOCAL_INFILE=1" if build.include? 'enable-local-infile'
|
|
|
|
system "cmake", *args
|
|
system "make"
|
|
# Reported upstream:
|
|
# http://bugs.mysql.com/bug.php?id=69645
|
|
inreplace "scripts/mysql_config", / +-Wno[\w-]+/, ""
|
|
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
|
|
|
|
# Make sure that data directory exists
|
|
datadir.mkpath
|
|
end
|
|
|
|
def post_install
|
|
unless File.exist? "#{datadir}/mysql/user.frm"
|
|
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.
|
|
|
|
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>Program</key>
|
|
<string>#{opt_prefix}/bin/mysqld_safe</string>
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
<key>WorkingDirectory</key>
|
|
<string>#{var}</string>
|
|
</dict>
|
|
</plist>
|
|
EOS
|
|
end
|
|
end
|