diff --git a/Formula/couchdb.rb b/Formula/couchdb.rb
index a740510067b8c..73d8556559c30 100644
--- a/Formula/couchdb.rb
+++ b/Formula/couchdb.rb
@@ -14,9 +14,8 @@ class Couchdb < Formula
bottle do
cellar :any
- sha256 "b08d92fea3d5ff8fb8da3fb19778615c224a3841d48bc3a37c519c5b84e7b7a6" => :el_capitan
- sha256 "922be8a18ea5b71553171bb859b563349917aaf39346f87f076f6f201ac03ed5" => :yosemite
- sha256 "fb4f49968be99783e1e0777c4dc44c387467976bb8c81771d7a151c278996b8b" => :mavericks
+ revision 1
+ sha256 "cc3f64e80e56d1c3d12907e85b9c4070da8d409aeb949aaef406a0f09a57298e" => :mavericks
end
head do
@@ -30,11 +29,18 @@ class Couchdb < Formula
depends_on "help2man" => :build
end
+ option "with-geocouch", "Build with GeoCouch spatial index extension"
+
depends_on "spidermonkey"
depends_on "icu4c"
depends_on "erlang"
depends_on "curl" if MacOS.version <= :leopard
+ resource "geocouch" do
+ url "https://github.com/couchbase/geocouch/archive/couchdb1.3.x.tar.gz"
+ sha256 "1bad2275756e2f03151d7b2706c089b3059736130612de279d879db91d4b21e7"
+ end
+
def install
# CouchDB >=1.3.0 supports vendor names and versioning
# in the welcome message
@@ -60,15 +66,63 @@ def install
system "make"
system "make", "install"
+ install_geocouch if build.with? "geocouch"
+
# Use our plist instead to avoid faffing with a new system user.
(prefix/"Library/LaunchDaemons/org.apache.couchdb.plist").delete
(lib/"couchdb/bin/couchjs").chmod 0755
- (var/"lib/couchdb").mkpath
- (var/"log/couchdb").mkpath
- (var/"run/couchdb").mkpath
+ end
+
+ def geocouch_share
+ share/"couchdb-geocouch"
+ end
+
+ def install_geocouch
+ resource("geocouch").stage(buildpath/"geocouch")
+ ENV["COUCH_SRC"]="#{buildpath}/src/couchdb"
+ cd "geocouch" do
+ system "make"
+
+ linked_geocouch_share = (HOMEBREW_PREFIX/"share/couchdb-geocouch")
+ geocouch_share.mkpath
+ geocouch_share.install "ebin"
+ # Install geocouch.plist for launchctl support.
+ geocouch_plist = geocouch_share/"geocouch.plist"
+ cp buildpath/"etc/launchd/org.apache.couchdb.plist.tpl.in", geocouch_plist
+ geocouch_plist.chmod 0644
+ inreplace geocouch_plist, "org.apache.couchdb", \
+ "geocouch"
+ inreplace geocouch_plist, "HOME", <<-EOS.lstrip.chop
+ ERL_FLAGS
+ -pa #{linked_geocouch_share}/ebin
+ HOME
+ EOS
+ inreplace geocouch_plist, "%bindir%/%couchdb_command_name%", \
+ HOMEBREW_PREFIX/"bin/couchdb"
+ # Turn off RunAtLoad and KeepAlive (to simplify experience for first-timers)
+ inreplace geocouch_plist, "RunAtLoad\n ",
+ "RunAtLoad\n "
+ inreplace geocouch_plist, "KeepAlive\n ",
+ "KeepAlive\n "
+ # Install geocouch.ini into couchdb.
+ (etc/"couchdb/default.d").install "etc/couchdb/default.d/geocouch.ini"
+
+ # Install tests into couchdb.
+ test_files = Dir["share/www/script/test/*.js"]
+ (pkgshare/"www/script/test").install test_files
+ # Complete the install by referencing the geocouch tests in couch_tests.js
+ # (which runs the tests).
+ test_lines = ["// GeoCouch Tests..."]
+ test_lines.concat(test_files.map { |file| file.gsub(%r{^.*\/(.*)$}, 'loadTest("\1");') })
+ test_lines << "// ...GeoCouch Tests"
+ (pkgshare/"www/script/couch_tests.js").append_lines test_lines
+ end
end
def post_install
+ (var/"lib/couchdb").mkpath
+ (var/"log/couchdb").mkpath
+ (var/"run/couchdb").mkpath
# default.ini is owned by CouchDB and marked not user-editable
# and must be overwritten to ensure correct operation.
if (etc/"couchdb/default.ini.default").exist?
@@ -78,13 +132,68 @@ def post_install
end
end
- def caveats; <<-EOS.undent
+ def caveats
+ str = <<-EOS.undent
To test CouchDB run:
curl http://127.0.0.1:5984/
The reply should look like:
{"couchdb":"Welcome","uuid":"....","version":"#{version}","vendor":{"version":"#{version}-1","name":"Homebrew"}}
EOS
+ str += "\n#{geocouch_caveats}" if build.with? "geocouch"
+ str
+ end
+
+ def geocouch_caveats; <<-EOS.undent
+ GeoCouch Caveats:
+
+ FYI: geocouch installs as an extension of couchdb, so couchdb effectively
+ becomes geocouch. However, you can use couchdb normally (using geocouch
+ extensions optionally). NB: one exception: the couchdb test suite now
+ includes several geocouch tests.
+
+ To start geocouch manually and verify any geocouch version information (-V),
+
+ ERL_FLAGS="-pa #{geocouch_share}/ebin" couchdb -V
+
+ For general convenience, export your ERL_FLAGS (erlang flags, above) in
+ your login shell, and then start geocouch:
+
+ export ERL_FLAGS="-pa #{geocouch_share}/ebin"
+ couchdb
+
+ Alternately, prepare launchctl to start/stop geocouch as follows:
+
+ cp #{geocouch_share}/geocouch.plist ~/Library/LaunchAgents
+ chmod 0644 ~/Library/LaunchAgents/geocouch.plist
+
+ launchctl load ~/Library/LaunchAgents/geocouch.plist
+
+ Then start, check status of, and stop geocouch with the following three
+ commands.
+
+ launchctl start geocouch
+ launchctl list geocouch
+ launchctl stop geocouch
+
+ Finally, access, test, and configure your new geocouch with:
+
+ http://127.0.0.1:5984
+ http://127.0.0.1:5984/_utils/couch_tests.html?script/couch_tests.js
+ http://127.0.0.1:5984/_utils
+
+ And... relax.
+
+ -=-
+
+ To uninstall geocouch from your couchdb installation, uninstall couchdb
+ and re-install it without the '--with-geocouch' option.
+
+ brew uninstall couchdb
+ brew install couchdb
+
+ To see these instructions again, just run 'brew info couchdb'.
+ EOS
end
plist_options :manual => "couchdb"
@@ -120,12 +229,13 @@ def plist; <<-EOS.undent
inreplace "#{testpath}/couchdb/default.ini", "/usr/local/var", testpath/"var"
pid = fork do
+ ENV["ERL_LIBS"] = geocouch_share if build.with? "geocouch"
exec "#{bin}/couchdb -A #{testpath}/couchdb"
end
sleep 2
begin
- assert_match /Homebrew/, shell_output("curl localhost:5984")
+ assert_match /Homebrew/, shell_output("curl -# localhost:5984")
ensure
Process.kill("SIGINT", pid)
Process.wait(pid)
diff --git a/Formula/geocouch.rb b/Formula/geocouch.rb
deleted file mode 100644
index 0849e8c49c7f7..0000000000000
--- a/Formula/geocouch.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-class Geocouch < Formula
- desc "Spatial index for CouchDB"
- homepage "https://github.com/couchbase/geocouch"
- url "https://github.com/couchbase/geocouch/archive/couchdb1.3.x.tar.gz"
- version "1.3.0"
- sha256 "0f678b5b79f5385c5c11349b662bb897047c72e8056dfb19f0f1e484d9348953"
-
- head "https://github.com/couchbase/geocouch.git"
-
- bottle do
- cellar :any
- sha256 "ca0c35c820bd58fb23f703a61494b732d7cd3d5887741483f5b6cbbe3eb5f383" => :mavericks
- sha256 "f0e0fcd810819820dad6f1eb005b2ed58aa3d953d25507292b68b6c16d6394f4" => :mountain_lion
- sha256 "3405263e277d08749e771506555bdd5353d4b4c09e1aab155bcb94f0f1ee0c04" => :lion
- end
-
- depends_on "couchdb"
- depends_on "erlang" => :build
-
- def couchdb_share
- HOMEBREW_PREFIX/"share/couchdb"
- end
-
- def geocouch_share
- HOMEBREW_PREFIX/"share/geocouch"
- end
-
- # GeoCouch currently supports couch_version(s) 1.1.x and 1.2.x (other
- # versions at your own risk). This formula supports GeoCouch 1.3.0 on top
- # of Apache couchdb 1.3.0.
- def install
- couchdb_dir = buildpath/"couchdb-src"
- Formula["couchdb"].brew { couchdb_dir.install Dir["*"] }
- ENV["COUCH_SRC"] = couchdb_dir/"src/couchdb"
-
- # Build geocouch.
- system "make"
-
- # Install geocouch build files.
- pkgshare.mkpath
- rm_rf pkgshare/"ebin/"
- pkgshare.install "ebin"
-
- # Install geocouch.plist for launchctl support.
- pkgshare.install couchdb_dir/"etc/launchd/org.apache.couchdb.plist.tpl.in"
- mv pkgshare/"org.apache.couchdb.plist.tpl.in", pkgshare/"geocouch.plist"
- inreplace (pkgshare/"geocouch.plist"), "org.apache.couchdb", \
- "geocouch"
- inreplace (pkgshare/"geocouch.plist"), "HOME", <<-EOS.lstrip.chop
- ERL_FLAGS
- -pa #{geocouch_share}/ebin
- HOME
- EOS
- inreplace (pkgshare/"geocouch.plist"), "%bindir%/%couchdb_command_name%", \
- HOMEBREW_PREFIX/"bin/couchdb"
- # Turn off RunAtLoad and KeepAlive (to simplify experience for first-timers).
- inreplace (pkgshare/"geocouch.plist"), "", \
- ""
- (pkgshare/"geocouch.plist").chmod 0644
-
- # Install geocouch.ini into couchdb.
- (etc/"couchdb/default.d").install "etc/couchdb/default.d/geocouch.ini"
-
- # Install tests into couchdb.
- test_files = Dir["share/www/script/test/*.js"]
- # Normal recipe "should" read:
- # (share/'couchdb/www/script/test/').install test_files
- # which would symlink geocouch tests into the couchdb share. But couchdb
- # seems to sandbox its web-readable files to the share/couchdb/www branch,
- # and symlinks outside of that folder seem to violate couchdb's
- # requirements. Consequently, we have to install geocouch tests directly
- # inside the share/couchdb/www branch and not symlink them from the
- # geocouch share branch (i.e., outside the couchdb sandbox). So for
- # clarity sake, install/partition all the geocouch tests together into a
- # tidy subfolder, and symlink them into place in the normal couchdb tests
- # folder.
- rm_rf (couchdb_share/"www/script/test/geocouch")
- (couchdb_share/"www/script/test/geocouch").mkpath
- (couchdb_share/"www/script/test/geocouch").install test_files
- Dir[(couchdb_share/"www/script/test/geocouch/*.js")].each \
- { |geotest| system "cd #{couchdb_share/"www/script/test"}; ln -s geocouch/#{File.basename(geotest)} ." }
- # Complete the install by referencing the geocouch tests in couch_tests.js
- # (which runs the tests).
- test_lines = test_files.map { |testline| testline.gsub(%r{^.*\/(.*)$}, 'loadTest("\1");' + "\n") }
- system "(echo; echo '//REPLACE_ME') >> '#{couchdb_share}/www/script/couch_tests.js'"
- inreplace (couchdb_share/"www/script/couch_tests.js"), %r{^\/\/REPLACE_ME$}, \
- "// GeoCouch Tests...\n#{test_lines}// ...GeoCouch Tests\n"
- end
-
- def caveats; <<-EOS.undent
- FYI: geocouch installs as an extension of couchdb, so couchdb effectively
- becomes geocouch. However, you can use couchdb normally (using geocouch
- extensions optionally). NB: one exception: the couchdb test suite now
- includes several geocouch tests.
-
- To start geocouch manually and verify any geocouch version information (-V),
-
- ERL_FLAGS="-pa #{geocouch_share}/ebin" couchdb -V
-
- For general convenience, export your ERL_FLAGS (erlang flags, above) in
- your login shell, and then start geocouch:
-
- export ERL_FLAGS="-pa #{geocouch_share}/ebin"
- couchdb
-
- Alternately, prepare launchctl to start/stop geocouch as follows:
-
- cp #{geocouch_share}/geocouch.plist ~/Library/LaunchAgents
- chmod 0644 ~/Library/LaunchAgents/geocouch.plist
-
- launchctl load ~/Library/LaunchAgents/geocouch.plist
-
- Then start, check status of, and stop geocouch with the following three
- commands.
-
- launchctl start geocouch
- launchctl list geocouch
- launchctl stop geocouch
-
- Finally, access, test, and configure your new geocouch with:
-
- http://127.0.0.1:5984
- http://127.0.0.1:5984/_utils/couch_tests.html?script/couch_tests.js
- http://127.0.0.1:5984/_utils
-
- And... relax.
-
- -=-
-
- One last thing: to uninstall geocouch from your couchdb installation:
-
- rm #{HOMEBREW_PREFIX}/etc/couchdb/default.d/geocouch.ini
- unset ERL_FLAGS
- brew uninstall geocouch couchdb; brew install couchdb
-
- and restart your couchdb. (To see the uninstall instructions again, just
- run 'brew info geocouch'.)
- EOS
- end
-end