Hi, Thank you for the explanations.
On Mon, 20 Jan 2020 at 19:57, Pierre Neidhardt <m...@ambrevar.xyz> 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