Subject: bug#36623: closed (Re: [bug#36623] [PATCH] gnu: gdal: add python support)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 21 Jul 2019 13:08:02 +0000

Your bug report

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

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
36623: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=36623
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#36623] [PATCH] gnu: gdal: add python support
From: [email-masked] (宋文武)
To: Arne Babenhauserheide <[email-masked]>
Cc: [email-masked]
Date: Sun, 21 Jul 2019 21:07:14 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Arne Babenhauserheide <[email-masked]> writes:

> 宋文武 <[email-masked]> writes:
>
>> Arne Babenhauserheide <[email-masked]> writes:
>>
>>> Hello Ludo`,
>>>
>>> Ludovic Courtès <[email-masked]> 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.
>>
>> This is because the _gdal.cython*.so don't have rpath to the "lib"
>> directory, where libgdal.so will going.
>>
>>>
>>> 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?
>>
>> I think cython (which compile .py files to .c files) is not here..  It
>> has python C libraries generated by swig.
>>>
>>> Best wishes,
>>> Arne
>>
>> In the end the python bindings for gdal can be build seperated (which
>> handle the missing rpath to libgdal nicely), and I prefer this way:
>>
>> From 09254f646b948a5603b2b3dcb99a7f2f6ad0c8de Mon Sep 17 00:00:00 2001
>> From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <[email-masked]>
>> Date: Sat, 20 Jul 2019 22:39:33 +0800
>> Subject: [PATCH] gnu: Add python-gdal.
>>
>> For <https://issues.guix.gnu.org/issue/36623>, thank to Arne Babenhauserheide
>> for the original patch.
>>
>> * gnu/packages/geo.scm (python-gdal): New package.
>> ---
>>  gnu/packages/geo.scm | 19 +++++++++++++++++++
>>  1 file changed, 19 insertions(+)
>>
>> diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
>> index e4b6a262c7..8005c46129 100644
>> --- a/gnu/packages/geo.scm
>> +++ b/gnu/packages/geo.scm
>> @@ -604,6 +604,25 @@ utilities for data translation and processing.")
>>                 ;; frmts/mrf/libLERC
>>                 license:asl2.0))))
>>  
>> +(define-public python-gdal
>> +  (package (inherit gdal)
>> +    (name "python-gdal")
>> +    (build-system python-build-system)
>> +    (arguments
>> +     '(#:tests? #f                      ; no tests
>> +       #:phases
>> +       (modify-phases %standard-phases
>> +         (add-before 'build 'chdir
>> +           (lambda _
>> +             (chdir "swig/python")
>> +             #t)))))
>> +    (native-inputs '())
>> +    (propagated-inputs
>> +     `(("python-numpy" ,python-numpy)))
>> +    (inputs
>> +     `(("gdal" ,gdal)))
>> +    (synopsis "GDAL (Geospatial Data Abstraction Library) python bindings")))
>> +
>>  (define-public postgis
>>    (package
>>      (name "postgis")
>
> Wow, that looks pretty good!
>
> Thank you for fixing up my patch!
>

Sure, pushed!

Subject: [PATCH] gnu: gdal: add python support
From: Arne Babenhauserheide <[email-masked]>
To: [email-masked]
Cc: Arne Babenhauserheide <[email-masked]>
Date: Fri, 12 Jul 2019 23:32:47 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

* 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)
+           ))))
     (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