aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula
diff options
context:
space:
mode:
authorCharlie Sharpsteen2012-02-16 23:55:56 -0800
committerCharlie Sharpsteen2012-02-17 16:15:39 -0800
commitd523dfbc77fbd650140b97ed61575ad77f0fa89e (patch)
tree81d45ac34b9ee9a719fe0c12addc637991b1aee4 /Library/Formula
parent2ea1255f512760cb7bd5366b1c03aaa9973b862e (diff)
downloadhomebrew-d523dfbc77fbd650140b97ed61575ad77f0fa89e.tar.bz2
PostGIS: Fix installation
Several issues with PostGIS are addressed with this refactoring: - PostGIS takes all of its orders from the PGXS makefiles distributed with Postgresql. This means that it installs its self into the Postgres keg and there is nothing that can be done. The solution is to avoid `make install` and manually install everything. - Gettext is no longer used as there is no way to properly specify paths to a keg-only formula when all of the flags are being dictated by PGXS. - The list of components in the 2.0 HEAD builds has been updated. - The default behavior for HEAD is to build the raster and topology extensions. Because of this, the `--with-raster` and `--with-topology` options have been dropped. Closes #9448.
Diffstat (limited to 'Library/Formula')
-rw-r--r--Library/Formula/postgis.rb167
1 files changed, 120 insertions, 47 deletions
diff --git a/Library/Formula/postgis.rb b/Library/Formula/postgis.rb
index 3ba4b5699..d649b58a0 100644
--- a/Library/Formula/postgis.rb
+++ b/Library/Formula/postgis.rb
@@ -1,13 +1,5 @@
require 'formula'
-def raster?
- ARGV.include? '--with-raster'
-end
-
-def topology?
- ARGV.include? '--with-topology'
-end
-
class Postgis < Formula
url 'http://postgis.refractions.net/download/postgis-1.5.3.tar.gz'
homepage 'http://postgis.refractions.net/'
@@ -18,58 +10,111 @@ class Postgis < Formula
depends_on 'postgresql'
depends_on 'proj'
depends_on 'geos'
- depends_on 'gdal' if raster?
- # For libintl
- depends_on 'gettext' if ARGV.build_head?
-
- def options
- [
- ['--with-raster', 'Enable PostGIS Raster extension (HEAD builds only).'],
- ['--with-topology', 'Enable PostGIS Topology extension (HEAD builds only).']
- ]
+ # For GeoJSON and raster handling
+ if ARGV.build_head?
+ depends_on 'gdal'
+ depends_on 'json-c'
end
+ # PostGIS command line tools intentionally have unused symbols in
+ # them---these are callbacks for liblwgeom.
+ skip_clean :all
+
def install
ENV.deparallelize
+ postgresql = Formula.factory 'postgresql'
args = [
"--disable-dependency-tracking",
"--prefix=#{prefix}",
- "--with-projdir=#{HOMEBREW_PREFIX}"
+ "--with-projdir=#{HOMEBREW_PREFIX}",
+ # This is against Homebrew guidelines, but we have to do it as the
+ # PostGIS plugin libraries can only be properly inserted into Homebrew's
+ # Postgresql keg.
+ "--with-pgconfig=#{postgresql.bin}/pg_config"
]
- # Apple ships a postgres client in Lion, conflicts with installed PostgreSQL server.
- if MacOS.lion?
- postgresql = Formula.factory 'postgresql'
- args << "--with-pgconfig=#{postgresql.bin}/pg_config"
- end
-
if ARGV.build_head?
- system "./autogen.sh"
- gettext = Formula.factory 'gettext'
- args << "--with-gettext=#{gettext.prefix}"
- args << "--with-raster" if raster?
- args << "--with-topology" if topology?
+ system './autogen.sh'
+ jsonc = Formula.factory 'json-c'
+ args << "--with-jsondir=#{jsonc.prefix}"
+ # Unfortunately, NLS support causes all kinds of headaches because
+ # PostGIS gets all of it's compiler flags from the PGXS makefiles. This
+ # makes it nigh impossible to tell the buildsystem where our keg-only
+ # gettext installations are.
+ args << '--disable-nls'
end
- system "./configure", *args
- system "make install"
+ system './configure', *args
+ system 'make'
+
+ # __DON'T RUN MAKE INSTALL!__
+ #
+ # PostGIS includes the PGXS makefiles and so will install __everything__
+ # into the Postgres keg instead of the PostGIS keg. Unfortunately, some
+ # things have to be inside the Postgres keg in order to be function. So, we
+ # install the bare minimum of stuff and then manually move everything else
+ # to the prefix.
- # Copy generated SQL files to the share folder
+ # Install PostGIS plugin libraries into the Postgres keg so that they can
+ # be loaded and so PostGIS databases will continue to function even if
+ # PostGIS is removed.
+ postgresql.lib.install Dir['postgis/postgis*.so']
+
+ # Stand-alone SQL files will be installed the share folder
postgis_sql = share + 'postgis'
- # Install common SQL scripts
- postgis_sql.install %w[spatial_ref_sys.sql postgis/postgis.sql postgis/uninstall_postgis.sql]
+ # Install version-specific SQL scripts and tools first. Some of the
+ # installation routines require command line tools to still be present
+ # inside the build prefix.
if ARGV.build_head?
+ # Install the liblwgeom library
+ system 'make install -C liblwgeom'
+
+ # Install raster plugin to Postgres keg
+ postgresql.lib.install Dir['raster/rt_pg/rtpostgis*.so']
+
+ # Install extension scripts to the Postgres keg.
+ # `CREATE EXTENSION postgis;` won't work if these are located elsewhere.
+ system 'make install -C extensions'
+
+ # Damn you libtool. Damn you to hell.
+ bin.install %w[
+ loader/.libs/pgsql2shp
+ loader/.libs/shp2pgsql
+ raster/loader/.libs/raster2pgsql
+ ]
+
# Install PostGIS 2.0 SQL scripts
postgis_sql.install %w[
- postgis/legacy.sql postgis/legacy_compatibility_layer.sql postgis/uninstall_legacy.sql
+ postgis/legacy.sql
+ postgis/legacy_compatibility_layer.sql
+ postgis/uninstall_legacy.sql
postgis/postgis_upgrade_20_minor.sql
]
- postgis_sql.install 'raster/rt_pg/rtpostgis.sql' if raster?
- postgis_sql.install 'topology/topology.sql' if topology?
+
+ postgis_sql.install %w[
+ raster/rt_pg/rtpostgis.sql
+ raster/rt_pg/rtpostgis_drop.sql
+ raster/rt_pg/rtpostgis_upgrade_20_minor.sql
+ raster/rt_pg/rtpostgis_upgrade.sql
+ raster/rt_pg/rtpostgis_upgrade_cleanup.sql
+ raster/rt_pg/uninstall_rtpostgis.sql
+ ]
+
+ postgis_sql.install %w[
+ topology/topology.sql
+ topology/topology_upgrade_20_minor.sql
+ topology/uninstall_topology.sql
+ ]
else
+ bin.install %w[
+ loader/pgsql2shp
+ loader/shp2pgsql
+ utils/new_postgis_restore.pl
+ ]
+
# Install PostGIS 1.x upgrade scripts
postgis_sql.install %w[
postgis/postgis_upgrade_13_to_15.sql
@@ -78,20 +123,48 @@ class Postgis < Formula
]
end
- # Copy loader and utils binaries to bin folder
+ # Common tools
bin.install %w[
- loader/pgsql2shp loader/shp2pgsql utils/create_undef.pl
- utils/new_postgis_restore.pl utils/postgis_proc_upgrade.pl
- utils/postgis_restore.pl utils/profile_intersects.pl
- utils/test_estimation.pl utils/test_joinestimation.pl
+ utils/create_undef.pl
+ utils/postgis_proc_upgrade.pl
+ utils/postgis_restore.pl
+ utils/profile_intersects.pl
+ utils/test_estimation.pl
+ utils/test_geography_estimation.pl
+ utils/test_geography_joinestimation.pl
+ utils/test_joinestimation.pl
+ ]
+
+ # Common SQL scripts
+ postgis_sql.install %w[
+ spatial_ref_sys.sql
+ postgis/postgis.sql
+ postgis/uninstall_postgis.sql
]
end
- def caveats; <<-EOS.undent
- To create a spatially-enabled database, see the documentation:
- http://postgis.refractions.net/documentation/manual-1.5/ch02.html#id2630392
- and to upgrade your existing spatial databases, see here:
- http://postgis.refractions.net/documentation/manual-1.5/ch02.html#upgrading
+ def caveats;
+ postgresql = Formula.factory 'postgresql'
+
+ s = <<-EOS.undent
+ To create a spatially-enabled database, see the documentation:
+ http://postgis.refractions.net/documentation/manual-1.5/ch02.html#id2630392
+ and to upgrade your existing spatial databases, see here:
+ http://postgis.refractions.net/documentation/manual-1.5/ch02.html#upgrading
+
+ PostGIS SQL scripts installed to:
+ #{HOMEBREW_PREFIX}/share/postgis
+ PostGIS plugin libraries installed to:
+ #{postgresql.lib}
EOS
+
+ if ARGV.build_head?
+ s += <<-EOS.undent
+ PostGIS extension modules installed to:
+ #{postgresql.share}/postgres/extension
+ EOS
+ end
+
+ s
end
end