Package: guix-patches;
Reported by: Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de>
Date: Tue, 13 Mar 2018 16:59:01 UTC
Severity: normal
Tags: patch
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Message #17 received at 30801 <at> debbugs.gnu.org (full text, mbox):
From: ludo <at> gnu.org (Ludovic Courtès) To: Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de> Cc: 30801 <at> debbugs.gnu.org Subject: Re: [bug#30801] [PATCH 0/1] Add opencv Date: Sun, 01 Apr 2018 14:21:38 +0200
Hello Björn, Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de> skribis: > On Thu, 15 Mar 2018 22:04:54 +0100 > ludo <at> gnu.org (Ludovic Courtès) wrote: > >> Hi Björn, >> >> Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de> skribis: >> >> > The test suite consists of an extra package, weighting 465MB >> > compressed. It runs very well. I think the size is worth it. It >> > consists of proprietary things (i.e. lena.jpg). As far as I >> > understand, that is OK, if it doesn't get in the final src/bin >> > store output. Right? >> >> As a rule of thumb, there should not be non-free stuff in the >> derivation graph. >> >> If there’s non-free software, that’s not OK, even if it doesn’t show >> up in the output. >> >> If it’s “just” data (pictures) that are non-free, that’s OK per the >> FSDG: >> <https://www.gnu.org/distros/free-system-distribution-guidelines.html#non-functional-data>. >> If we could replace it with a free variant, I think we should clearly >> encourage it, but lena.jpg is hardly replaceable in this context (I’d >> hope it weren’t around for what it tells about CS, but that’s another >> story…). > > What is being downloaded is in the store of cause, but it is only > images and videos, no code. And it is not linked against. > > The suite is 400 MB in size and replacing Lena with Linus or even > better pictures and videos of trees would need a fundamental idea of > the algorithms behind OpenCV, with I don't have. So for now I just leave > it as is, though I agree with your fundamental ideas :-) OK, sounds good. > Most are 50MB, one is 265MB, I suppose that was the latest with all > dependencies and all (free) OpenCV modules. So the 1.1GB was > definitively the convex hull including all dependencies. > > The whole thing is more or less only "lib". > > I forgot to mention that I ignored the "doc" package: It built one when > I added doxygen as a dependency, but it did not install it. Now that I > know how to manually copy/install files, I could give that another try. > But that would add (to a :doc output, of cause), not substract. > > The "bin" part is only 7 MB, so not worth mentioning. There are some > examples which I did not include, because they are not very interesting > in the compiled version, but more for understanding the programming > part from the source code. OK. > OK, I looked into some other packages and tried to split it into pieces > (one piece for now). What I do is just add a phase after install and > copy things manually (copied from the git package definition): > > + (add-after 'install 'split > + (lambda* (#:key outputs #:allow-other-keys) > + (let* ((outputs-out (assoc-ref outputs "out")) > + (outputs-feature2d (assoc-ref outputs "feature2d")) > + (outputs-face (assoc-ref outputs "face")) > + (outputs-core (assoc-ref outputs "core")) > + (libface (string-append outputs-out "/lib/libopencv_face.so")) > + (libface* (string-append outputs-face "/lib/libopencv_face.so")) > + (libface3.4 (string-append outputs-out "/lib/libopencv_face.so.3.4")) > + (libface3.4* (string-append outputs-face "/lib/libopencv_face.so.3.4")) > + (libface3.4.1 (string-append outputs-out "/lib/libopencv_face.so.3.4.1")) > + (libface3.4.1* (string-append outputs-face "/lib/libopencv_face.so.3.4.1"))) > + > + > + (mkdir-p (string-append outputs-face "/lib")) > + > + (for-each (lambda (old new) > + (copy-file old new) > + (delete-file old) > + (chmod new #o555)) > + (list libface libface3.4 libface3.4.1) > + (list libface* libface3.4* libface3.4.1*)) > + ) > + #t ; TODO: Implement it. > + )) > + ))) > > The problem here is that this doesn't correct the RPATHS and I will get > problems with dependent library parts (The python modules in that case): > > phase `strip' succeeded after 0.5 seconds > starting phase `validate-runpath' > validating RUNPATH of 46 binaries in "/gnu/store/f7aqk1my2bdprhgp3gxmnl9227gxf43m-opencv-3.4.1/lib"... > /gnu/store/f7aqk1my2bdprhgp3gxmnl9227gxf43m-opencv-3.4.1/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so: error: depends on 'libopencv_face.so.3.4', which cannot be found in RUNPATH ("/gnu/store/f7aqk1my2bdprhgp3gxmnl9227gxf43m-opencv-3.4.1/lib" "/gnu/store/124ymrzp0dwx6qfh4r4r4763sa5k48sv-libsm-1.2.2/lib" "/gnu/store/dbdjmralkrzqn6b093hp69bjljvfr7zm-libice-1.0.9/lib" "/gnu/store/g7sak8qzk7lk06ggn38xpfv5mb8da6kk-libxt-1.1.5/lib" "/gnu/store/n6acaivs0jwiwpidjr551dhdni5kgpcr-glibc-2.26.105-g0890d5379c/lib" "/gnu/store/xfjba1kww8ngdc6nxldd8ly93nh13ayy-gcc-5.5.0-lib/lib" "/gnu/store/xfjba1kww8ngdc6nxldd8ly93nh13ayy-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..") Right, you cannot just move .so files after the fact because cv2.cpython-36m-x86_64-linux-gnu.so, for instance, has …/lib in its RUNPATH, not …-lib/lib. If you wanted to do that, the right way to do it would be by modifying the makefiles/cmakelists so that they explicitly install libopencv_face to …-lib/lib. That said, it may be safer/easier to keep all libraries in the same output. BTW, are .a files installed? It would probably help save space to not install them. Thanks for the update & have a nice week-end! Ludo’.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.