Simon Tournier <zimon.touto...@gmail.com> writes:
> Hi, > > On ven., 31 mars 2023 at 23:21, Kyle Andrews <k...@posteo.net> wrote: > >> (let ((out (assoc-ref outputs "out"))) >> ;;; TODO: this doesn't work! >> ;; copy site-library/littler/bin/r to bin/r >> (copy-file >> (string-append out "site-library/littler/src/r") >> (string-append out "/bin/r")))))))) > > I guess what you want is: > > --8<---------------cut here---------------start------------->8--- > (let* ((out (assoc-ref outputs "out")) > (out/bin (string-append out "/bin"))) > (mkdir out/bin) > (copy-file "inst/bin/r" > (string-append out/bin "/r")))))))) > --8<---------------cut here---------------end--------------->8--- Gotcha. That must mean my mental model should be that "out" refers to the directory in the store, while the working directory is inside of the decompressed source directory. I probably should have inferred that would almost always be the case since most build-systems will (re-)use 'unpack. I also made the mistake of now always starting my path strings with a forward slash. > > And I would write, > > (lambda _ > (mkdir (string-append #$output "/bin")) > (copy-file "inst/bin/r" > (string-append #$output "/bin/r"))) This perfect makes sense now and is much more concise. > > > Well, using one or the other, I get: > > --8<---------------cut here---------------start------------->8--- > $ guix shell -L /tmp/foo r-littler -C -- r --help > > Usage: r [options] [-|file] > > Launch GNU R to execute the R commands supplied in the specified file, or > from stdin if '-' is used. Suitable for so-called shebang '#!/'-line scripts. > > Options: > -h, --help Give this help list > --usage Give a short usage message > -V, --version Show the version number > -v, --vanilla Pass the '--vanilla' option to R > -t, --rtemp Use per-session temporary directory as R does > -i, --interactive Let interactive() return 'true' rather than 'false' > -q, --quick Skip autoload / delayed assign of default libraries > -p, --verbose Print the value of expressions to the console > -l, --packages list Load the R packages from the comma-separated 'list' > -d, --datastdin Prepend command to load 'X' as csv from stdin > -L, --libpath dir Add directory to library path via '.libPaths(dir)' > -e, --eval expr Let R evaluate 'expr' > > --8<---------------cut here---------------end--------------->8--- > Thanks! I had been "toggling" back and forth between (packages->manifest (list r-littler)) and r-littler. In other words, the former gets uncommented when running guix shell -m littler.scm while the latter gets uncommented when used with guix build -f r-littler with the former getting commented. I can see from your example how writing a module would obviate the need to edit the source file over and over with the promise that alternatives can be illustrated at the same level. Sadly, when I tried to take that idea and run with it I got an unexpected error. ``` $ guix build -L dev r-littler ... ld: cannot find -lz collect2: error: ld returned 1 exit status ... ``` I know I have seen that error before, but I thought it was fixed by importing compression, prefixing (guix licenses) to prevent a namespace collision, and including zlib in the package inputs. ``` $ diff littler.scm dev/littler.scm 1,11c1,11 < (use-modules < (guix packages) < (guix download) < (gnu packages statistics) < (gnu packages compression) < (gnu packages icu4c) < (guix gexp) < (guix build-system r) < (gnu packages cran) < (gnu packages autotools) < ((guix licenses) #:prefix license:)) --- > (define-module (littler) > #:use-module (guix packages) > #:use-module (guix download) > #:use-module (gnu packages statistics) > #:use-module (gnu packages compression) > #:use-module (gnu packages icu4c) > #:use-module (guix gexp) > #:use-module (guix build-system r) > #:use-module (gnu packages cran) > #:use-module (gnu packages autotools) > #:use-module ((guix licenses) #:prefix license:)) 47,50d46 < < ;; (packages->manifest (list r r-littler)) < < r-littler ``` Meanwhile, your command ran the same for me as it did for you. ``` guix shell -L dev r-littler -C -- r --help ``` What am I missing?