diff mbox series

[bug#36623] gnu: gdal: add python support

Message ID 87pnmdr60f.fsf@web.de
State Accepted
Headers show
Series [bug#36623] gnu: gdal: add python support | expand

Commit Message

Dr. Arne Babenhauserheide July 13, 2019, 9:14 p.m. UTC
Julien Lepiller <julien@lepiller.eu> writes:

> Le 12 juillet 2019 23:32:47 GMT+02:00, Arne Babenhauserheide <arne_bab@web.de> a écrit :
>>* gnu/packages/geo.scm (gdal): add python support
>>---
>> gnu/packages/geo.scm | 29 +++++++++++++++++++++++++++--
>> 1 file changed, 27 insertions(+), 2 deletions(-)
>>
>>diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
>>index 4cccd97643..3e2ec04b53 100644
>>--- a/gnu/packages/geo.scm
>>+++ b/gnu/packages/geo.scm
>>@@ -537,6 +537,8 @@ development.")
>>     (build-system gnu-build-system)
>>     (arguments
>>      `(#:tests? #f
>>+       ;; validating runpath does not work yet for Python, so skip
>>this phase.
>>+       #:validate-runpath? #f
>>        #:configure-flags
>>        (let-syntax ((with (syntax-rules ()
>>                             ((_ option input)
>>@@ -544,6 +546,10 @@ development.")
>>                                   (assoc-ref %build-inputs input))))))
>>          (list
>>            ;; TODO: --with-pcidsk, --with-pcraster
>>+           ;; Add $libdir to the RUNPATH of all the executables.
>>+           (string-append "LDFLAGS=-Wl,-rpath=" %output "/apps/.libs")
>>+           (string-append "LD_RUN_PATH=" %output "/apps/.libs")
>>+           (string-append "LD_LIBRARY_PATH=" %output "/apps/.libs")
>>            (with "--with-freexl" "freexl")
>>            (with "--with-libjson-c" "json-c")
>>            (with "--with-png" "libpng")
>>@@ -553,13 +559,27 @@ development.")
>>            (with "--with-libtiff" "libtiff")
>>            (with "--with-geotiff" "libgeotiff")
>>            (with "--with-libz" "zlib")
>>-           "--with-pcre"))
>>+           "--with-pcre"
>>+           "--with-python"))
>>        #:phases
>>        (modify-phases %standard-phases
>>          (add-before 'build 'fix-path
>>            (lambda _
>>              (substitute* "frmts/mrf/mrf_band.cpp"
>>-               (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
>>+               (("\"../zlib/zlib.h\"") "<zlib.h>"))))
>>+         (add-after
>>+             'unpack 'patch-test-shebangs
>>+           (lambda _
>>+             (substitute* '("apps/GNUmakefile")
>>+               (("/bin/sh") (which "sh")))
>>+             #t))
>>+         (add-after
>>+             'unpack 'patch-test-shebangs
>>+           (lambda _
>>+             (substitute* '("GDALmake.opt.in")
>>+               (("LDFLAGS     = @LDFLAGS@") (string-append "LDFLAGS   
>>= @LDFLAGS@ -Wl,-rpath=" %output "/apps -Wl,-rpath=" %output
>>"/apps/.libs")))
>>+             #t)
>>+           ))))
>
> Could you rename that phase to something like 'patch-rpath? Is it needed since you already pass it to the configure?

Renamed, see the new patch :-)

I did not get this to work without it.

>>     (inputs
>>      `(("freexl" ,freexl)
>>        ("geos" ,geos)
>>@@ -572,6 +592,11 @@ development.")
>>        ("libwebp" ,libwebp)
>>        ("pcre" ,pcre)
>>        ("zlib" ,zlib)))
>>+    (native-inputs
>>+     `(("pkg-config" ,pkg-config)))
>>+    (propagated-inputs
>>+     `(("python" ,python)
>>+       ("python-setuptools" ,python-setuptools)))
>
> Is setuptools really necessary at runtime? Can we patch gdal so to embed python's store path? I'd prefer not to propagate it.

I’m not really sure why it is, but I did not get it working
without. Activating Python-support was harder than I thought (but I need
it working for a project on a deadline).

>>     (home-page "http://www.gdal.org/")
>>     (synopsis "Raster and vector geospatial data format library")
>>(description "GDAL is a translator library for raster and vector
>>geospatial
>>--
>>2.22.0
>
> Thank you!

Thank you for reviewing!
Best wishes,
Arne

Comments

Ludovic Courtès July 17, 2019, 12:57 p.m. UTC | #1
Hello!

Complementing Julien’s feedback…

Arne Babenhauserheide <arne_bab@web.de> skribis:

> From 5f8b1dc1bb5ce7b061bcca10174f9330cf89696c Mon Sep 17 00:00:00 2001
> From: Arne Babenhauserheide <arne_bab@web.de>
> Date: Sat, 11 May 2019 15:16:22 +0200
> Subject: [PATCH] gnu: gdal: add python support
>
> * gnu/packages/geo.scm (gdal): add python support
> ---
>  gnu/packages/geo.scm | 29 +++++++++++++++++++++++++++--
>  1 file changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
> index 4cccd97643..a6942d2a45 100644
> --- a/gnu/packages/geo.scm
> +++ b/gnu/packages/geo.scm
> @@ -537,6 +537,8 @@ development.")
>      (build-system gnu-build-system)
>      (arguments
>       `(#:tests? #f
> +       ;; validating runpath does not work yet for Python, so skip this phase.
> +       #:validate-runpath? #f

What happens when you let the ‘validate-runpath’ phase run?

Thanks,
Ludo’.
Dr. Arne Babenhauserheide July 17, 2019, 4:22 p.m. UTC | #2
Ludovic Courtès <ludo@gnu.org> writes:

> Hello!
>
> Complementing Julien’s feedback…
>
> Arne Babenhauserheide <arne_bab@web.de> skribis:
>
>> From 5f8b1dc1bb5ce7b061bcca10174f9330cf89696c Mon Sep 17 00:00:00 2001
>> From: Arne Babenhauserheide <arne_bab@web.de>
>> Date: Sat, 11 May 2019 15:16:22 +0200
>> Subject: [PATCH] gnu: gdal: add python support
>>
>> * gnu/packages/geo.scm (gdal): add python support
>> ---
>>  gnu/packages/geo.scm | 29 +++++++++++++++++++++++++++--
>>  1 file changed, 27 insertions(+), 2 deletions(-)
>>
>> diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
>> index 4cccd97643..a6942d2a45 100644
>> --- a/gnu/packages/geo.scm
>> +++ b/gnu/packages/geo.scm
>> @@ -537,6 +537,8 @@ development.")
>>      (build-system gnu-build-system)
>>      (arguments
>>       `(#:tests? #f
>> +       ;; validating runpath does not work yet for Python, so skip this phase.
>> +       #:validate-runpath? #f
>
> What happens when you let the ‘validate-runpath’ phase run?

\ 'validate-runpath' phasebuilder for `/gnu/store/ykfnx8m38ndnggdqsv1fbgf3ycry5f88-gdal-2.2.4.drv' failed with exit code 1
build of /gnu/store/ykfnx8m38ndnggdqsv1fbgf3ycry5f88-gdal-2.2.4.drv failed
View build log at '/var/log/guix/drvs/yk/fnx8m38ndnggdqsv1fbgf3ycry5f88-gdal-2.2.4.drv.bz2'.

…
starting phase `validate-runpath'
validating RUNPATH of 6 binaries in "/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib"...
/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_gdal.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_gdalconst.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_gnm.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_ogr.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_osr.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
validating RUNPATH of 24 binaries in "/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/bin"...
Backtrace:
           5 (primitive-load "/gnu/store/kzsb94cspp48r9l26y8gv9zy6la…")
In ice-9/eval.scm:
   191:35  4 (_ _)
In srfi/srfi-1.scm:
   863:16  3 (every1 #<procedure 817960 at /gnu/store/gfprsx2m62cvq…> …)
In /gnu/store/gfprsx2m62cvqbh7ysc9ay9slhijvmal-module-import/guix/build/gnu-build-system.scm:
   799:28  2 (_ _)
   558:10  1 (validate-runpath #:validate-runpath? _ # _ #:outputs _)
In unknown file:
           0 (scm-error misc-error #f "~A" ("RUNPATH validation fa…") …)

ERROR: In procedure scm-error:
RUNPATH validation failed

Best wishes,
Arne
Ludovic Courtès July 19, 2019, 12:07 p.m. UTC | #3
Hello,

Arne Babenhauserheide <arne_bab@web.de> skribis:

> validating RUNPATH of 6 binaries in "/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib"...
> /gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_gdal.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")

I’m not familiar with Cython so I don’t know how this was handled
before.  However, to me, it indicates that the resulting binaries are
unlikely to work.

Namely, Python would dlopen “_gdal.cython*.so”, and that would fail to
find ‘libgdal.so’.

Thoughts?

Ludo’.
Dr. Arne Babenhauserheide July 19, 2019, 3:06 p.m. UTC | #4
Hello Ludo`,

Ludovic Courtès <ludo@gnu.org> writes:

>> validating RUNPATH of 6 binaries in "/gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib"...
>> /gnu/store/q9sb0wv41ig429f1m1xspg22xm8pwpwh-gdal-2.2.4/lib/python3.7/site-packages/osgeo/_gdal.cpython-37m-x86_64-linux-gnu.so: error: depends on 'libgdal.so.20', which cannot be found in RUNPATH ("/gnu/store/b7fqhszxl02g6pfm3vw6b3cjz472qrly-python-3.7.0/lib" "/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib" "/gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..")
>
> I’m not familiar with Cython so I don’t know how this was handled
> before.  However, to me, it indicates that the resulting binaries are
> unlikely to work.
>
> Namely, Python would dlopen “_gdal.cython*.so”, and that would fail to
> find ‘libgdal.so’.
>
> Thoughts?

Yes: It does work. But I don’t know why.

Cython runs at compile-time to generate c-code that acts as interface
for Python. Given the paths in here, this needs gdal already installed
in the runpath where it seems to be missing during validation.

How can we fix that?

Best wishes,
Arne
diff mbox series

Patch

From 5f8b1dc1bb5ce7b061bcca10174f9330cf89696c Mon Sep 17 00:00:00 2001
From: Arne Babenhauserheide <arne_bab@web.de>
Date: Sat, 11 May 2019 15:16:22 +0200
Subject: [PATCH] gnu: gdal: add python support

* gnu/packages/geo.scm (gdal): add python support
---
 gnu/packages/geo.scm | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 4cccd97643..a6942d2a45 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -537,6 +537,8 @@  development.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
+       ;; validating runpath does not work yet for Python, so skip this phase.
+       #:validate-runpath? #f
        #:configure-flags
        (let-syntax ((with (syntax-rules ()
                             ((_ option input)
@@ -544,6 +546,10 @@  development.")
                                             (assoc-ref %build-inputs input))))))
          (list
            ;; TODO: --with-pcidsk, --with-pcraster
+           ;; Add $libdir to the RUNPATH of all the executables.
+           (string-append "LDFLAGS=-Wl,-rpath=" %output "/apps/.libs")
+           (string-append "LD_RUN_PATH=" %output "/apps/.libs")
+           (string-append "LD_LIBRARY_PATH=" %output "/apps/.libs")
            (with "--with-freexl" "freexl")
            (with "--with-libjson-c" "json-c")
            (with "--with-png" "libpng")
@@ -553,13 +559,27 @@  development.")
            (with "--with-libtiff" "libtiff")
            (with "--with-geotiff" "libgeotiff")
            (with "--with-libz" "zlib")
-           "--with-pcre"))
+           "--with-pcre"
+           "--with-python"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-path
            (lambda _
              (substitute* "frmts/mrf/mrf_band.cpp"
-               (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
+               (("\"../zlib/zlib.h\"") "<zlib.h>"))))
+         (add-after
+             'unpack 'patch-test-shebangs
+           (lambda _
+             (substitute* '("apps/GNUmakefile")
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-after
+             'unpack 'patch-rpath
+           (lambda _
+             (substitute* '("GDALmake.opt.in")
+               (("LDFLAGS     = @LDFLAGS@") (string-append "LDFLAGS     = @LDFLAGS@ -Wl,-rpath=" %output "/apps -Wl,-rpath=" %output "/apps/.libs")))
+             #t)
+           ))))
     (inputs
      `(("freexl" ,freexl)
        ("geos" ,geos)
@@ -572,6 +592,11 @@  development.")
        ("libwebp" ,libwebp)
        ("pcre" ,pcre)
        ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("python" ,python)
+       ("python-setuptools" ,python-setuptools)))
     (home-page "http://www.gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
     (description "GDAL is a translator library for raster and vector geospatial
-- 
2.22.0