aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/postgis.rb
blob: 59e5eadd2b2439d4a6acb570ff5632d0921da8e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
require 'formula'

def build_gui?
  ARGV.include? '--with-gui'
end

class Postgis < Formula
  url 'http://postgis.refractions.net/download/postgis-1.5.3.tar.gz'
  homepage 'http://postgis.refractions.net/'
  md5 '05a61df5e1b78bf51c9ce98bea5526fc'

  head 'http://svn.osgeo.org/postgis/trunk/', :using => :svn

  devel do
    url 'http://postgis.org/download/postgis-2.0.0rc1.tar.gz'
    md5 '13f67b8caa25676c2d0ff617b3a63031'
    version '2.0.0rc1'
  end

  depends_on 'postgresql'
  depends_on 'proj'
  depends_on 'geos'

  depends_on 'gtk+' if build_gui?

  # For GeoJSON and raster handling
  if ARGV.build_head? or ARGV.build_devel?
    depends_on 'gdal'
    depends_on 'json-c'
  end

  if ARGV.build_head? and MacOS.xcode_version >= "4.3"
    depends_on "automake" => :build
    depends_on "libtool" => :build
  end

  def options
    [
      ['--devel', 'Build unstable snapshots of PostGIS 2.0'],
      ['--with-gui', 'Build shp2pgsql-gui in addition to command line tools']
    ]
  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",
      # Can't use --prefix, PostGIS disrespects it and flat-out refuses to
      # accept it with the 2.0 beta.
      "--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"
    ]
    args << '--with-gui' if build_gui?

    if ARGV.build_head? or ARGV.build_devel?
      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 './autogen.sh' if ARGV.build_head?
    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.

    # 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 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? or ARGV.build_devel?
      # Install the liblwgeom library
      lib.install Dir['liblwgeom/.libs/*.dylib', 'liblwgeom/.libs/*.a']
      include.install 'liblwgeom/liblwgeom.h'

      # 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'

      bin.install %w[
        loader/.libs/pgsql2shp
        loader/.libs/shp2pgsql
        raster/loader/.libs/raster2pgsql
      ]
      bin.install 'loader/.libs/shp2pgsql-gui' if build_gui?

      # Install PostGIS 2.0 SQL scripts
      postgis_sql.install %w[
        postgis/legacy.sql
        postgis/legacy_minimal.sql
        postgis/uninstall_legacy.sql
        postgis/postgis_upgrade_20_minor.sql
      ]

      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
      ]
      bin.install 'loader/shp2pgsql-gui' if build_gui?

      # Install PostGIS 1.x upgrade scripts
      postgis_sql.install %w[
        postgis/postgis_upgrade_13_to_15.sql
        postgis/postgis_upgrade_14_to_15.sql
        postgis/postgis_upgrade_15_minor.sql
      ]
    end

    # Common tools
    bin.install %w[
      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;
    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? or ARGV.build_devel?
      s += <<-EOS.undent
        PostGIS extension modules installed to:
          #{postgresql.share}/postgres/extension
      EOS
    end

    return s
  end
end