about summary refs log tree commit diff
path: root/pkgs/servers/sql
diff options
context:
space:
mode:
authorLuke Worth <luke@worth.id.au>2019-07-27 17:06:18 +1000
committerLuke Worth <luke@worth.id.au>2019-07-27 19:00:46 +1000
commit330fff02a675f389f429d872a590ed65fc93aedb (patch)
treeee0f604ad109bc632503af9b617df134843dd67a /pkgs/servers/sql
parent0dfb5c5108778501b9a40294d5fbf2ed71b3d394 (diff)
downloadnixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar.gz
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar.bz2
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar.lz
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar.xz
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.tar.zst
nixlib-330fff02a675f389f429d872a590ed65fc93aedb.zip
postgis: allow on Darwin
To get PostGIS going on Darwin:
1. Add libiconv, as is often required.
2. Expand platforms to `platforms.all`.
3. Deal with PostGIS' quirky build system.

PostGIS' configure.ac has the following gem:

  AC_MSG_RESULT([------------------------------------------------------------------------])
  AC_MSG_RESULT([  WARNING: You have set the --prefix to '$prefix'. But we mostly    ])
  AC_MSG_RESULT([  ignore the --prefix. For your info, using the values determined from ])
  AC_MSG_RESULT([  $PG_CONFIG we will be installing:   ])
  AC_MSG_RESULT([    * postgis shared library in $PGSQL_LIBDIR ])
  AC_MSG_RESULT([    * postgis SQL files in $PGSQL_SHAREDIR/contrib/postgis-$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION ])
  AC_MSG_RESULT([    * postgis executables in $PGSQL_BINDIR ])
  AC_MSG_RESULT([------------------------------------------------------------------------])

This is suggestive of some assumptions in the build system, which are
revealed when building in Nix on Darwin: the build fails because the
postgres binary cannot be found in the install prefix specified for
postgis; vis.

  cc x -bundle_loader $POSTGIS_PREFIX/bin/postgres

This bundle_loader parameter is only available on Darwin, and this
problem doesn't appear to affect Linux systems.

The solution presented here is to symlink the postgres binary where
PostGIS expects it to be, and then remove it after the build completes.
Diffstat (limited to 'pkgs/servers/sql')
-rw-r--r--pkgs/servers/sql/postgresql/ext/postgis.nix10
1 files changed, 5 insertions, 5 deletions
diff --git a/pkgs/servers/sql/postgresql/ext/postgis.nix b/pkgs/servers/sql/postgresql/ext/postgis.nix
index de9d7eb1305b..81fbd41b46ab 100644
--- a/pkgs/servers/sql/postgresql/ext/postgis.nix
+++ b/pkgs/servers/sql/postgresql/ext/postgis.nix
@@ -10,6 +10,7 @@
 , pkgconfig
 , file
 , protobufc
+, libiconv
 }:
 stdenv.mkDerivation rec {
   name = "postgis-${version}";
@@ -22,7 +23,7 @@ stdenv.mkDerivation rec {
     sha256 = "0pnva72f2w4jcgnl1y7nw5rdly4ipx3hji4c9yc9s0hna1n2ijxn";
   };
 
-  buildInputs = [ libxml2 postgresql geos proj gdal json_c protobufc ];
+  buildInputs = [ libxml2 postgresql geos proj gdal json_c protobufc libiconv ];
   nativeBuildInputs = [ perl pkgconfig ];
   dontDisableStatic = true;
 
@@ -43,14 +44,13 @@ stdenv.mkDerivation rec {
     sed -i "s|\$(DESTDIR)\$(PGSQL_BINDIR)|$prefix/bin|g
             " \
         "raster/scripts/python/Makefile";
-  '';
-
-  preInstall = ''
     mkdir -p $out/bin
+    ln -s ${postgresql}/bin/postgres $out/bin/postgres
   '';
 
   # create aliases for all commands adding version information
   postInstall = ''
+    rm $out/bin/postgres
     for prog in $out/bin/*; do # */
       ln -s $prog $prog-${version}
     done
@@ -64,6 +64,6 @@ stdenv.mkDerivation rec {
     homepage = https://postgis.net/;
     license = licenses.gpl2;
     maintainers = [ maintainers.marcweber ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }