guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Parameterized packages


From: zimoun
Subject: Re: Parameterized packages
Date: Tue, 21 Jan 2020 13:15:03 +0100

Hi,

Thank you for the explanations.

On Mon, 20 Jan 2020 at 19:57, Pierre Neidhardt <address@hidden> wrote:

> > The solution of 2. and 3. seems to write, as Ludo mentioned:
> >
> > --8<---------------cut here---------------start------------->8---
> > (define (make-me-a-package option1 option2)
> >     (package
> >       …))
> > --8<---------------cut here---------------end--------------->8---
>
> The ellipsis is a bit vague here.  What is this trying to do?

What you wrote below. :-)


> --8<---------------cut here---------------start------------->8---
> (define-public you-get
>   (package
>     (name "you-get")
>     (version "0.4.1355")
>     (PARAMETERS VIDEO-PLAYER PYTHON-VERSION WITH-FFMPEG)
>     (source (origin
>               (method git-fetch)
>               (uri (git-reference
>                     (url "https://github.com/soimort/you-get.git";)
>                     (commit (string-append "v" version))))
>               (file-name (git-file-name name version))
>               (sha256
>                (base32
>                 "0xq7z04hvw3b3npiahlpzhbxsjvam9n9dynplyrkn84dx6k9ajbj"))))
>     (build-system python-build-system)
>     (inputs
>      `(("PLAYER" ,(DEREF-PARAM VIDEO-PLAYER))
>        ,@(IF (DEREF-PARAM WITH-FFMPEG)
>              ;; FOR MULTI-PART AND >=1080P VIDEOS
>              `("FFMPEG" ,FFMPEG)
>              '())))
>     (arguments
>      `(#:PYTHON ,(DEREF-PARAM PYTHON-VERSION)
>        #:phases
>        (modify-phases %standard-phases
>          ,(WHEN (DEREF-PARAM WITH-FFMPEG)
>             (add-after 'unpack 'qualify-input-references
>               ;; Explicitly invoke the input ffmpeg, instead of whichever one
>               ;; happens to be in the user's $PATH at run time.
>               (lambda* (#:key inputs #:allow-other-keys)
>                 (let ((ffmpeg (string-append (assoc-ref inputs "ffmpeg")
>                                              "/bin/ffmpeg")))
>                   (substitute* "src/you_get/processor/ffmpeg.py"
>                     ;; Don't blindly replace all occurrences of ‘'ffmpeg'’: 
> the
>                     ;; same string is also used when sniffing ffmpeg's output.
>                     (("(FFMPEG == |\\()'ffmpeg'" _ prefix)
>                      (string-append prefix "'" ffmpeg "'")))
>                   #t))))
>          (ADD-AFTER 'UNPACK 'TWEAK-PLAYER-SETTINGS
>            (LAMBDA* (#:KEY INPUTS #:ALLOW-OTHER-KEYS)
>              (MATCH ,(DEREF-PARAM VIDEO-PLAYER)
>                (VLC
>                 ;; DO SOMETHING WITH VLC.
>                 )
>                (MPV
>                 ;; DO SOMETHING WITH MPV.
>                 )
>                (_
>                 ;; ERROR OUT?
>                 )))))
>        #:tests? #f))                    ; XXX some tests need Internet access
>     (synopsis "Download videos, audio, or images from Web sites")
>     (description
>      "You-Get is a command-line utility to download media contents (videos,
> audio, images) from the Web.  It can use either mpv or vlc for playback.")
>     (home-page "https://you-get.org/";)
>     (license license:expat)))
> --8<---------------cut here---------------end--------------->8---
>
> In the above I've highlighted the changes in uppercase.

Welcome in a big and unmaintainable mess! :-)


And my opinion is that you described is already possible (more or
less) using 'inherit'. Except the modification of the compiling
options (build-system).


> On line (PARAMETERS ...) I've declared which parameters I'm going to use
> in my package declaration.  Those parameters must be defined globally
> somewhere in Guix.

This will end up with a big and unmaintainable mess, IMHO.


> The point of declaring the parameters in advance is that it allows the
> user to list all parameters used by a given package.

I bet that the number of broken packages will increase.



> - To let the user choose which video player to use.  This is a popular
>   USE flag on Gentoo (maybe with a different name).

What I do not understand is: people who used Gentoo and especially USE
flag are saying that it ends with a big mess with broken packages.
Therefore, why does Guix want to reproduce the mess?


All the best,
simon



reply via email to

[Prev in Thread] Current Thread [Next in Thread]