* How to copy a file to the package /bin folder using the r-build-system? @ 2023-03-31 23:21 Kyle Andrews 2023-04-07 16:07 ` Simon Tournier 0 siblings, 1 reply; 5+ messages in thread From: Kyle Andrews @ 2023-03-31 23:21 UTC (permalink / raw) To: help-guix Dear Guix, I want to package the littler R package. Unlike most R packages, this one provides an executable (a little r to complement the big R) that should go on the PATH rather than be tucked away into site-library where it cannot be used. Surprisingly, to me, when the command below fails ... ``` guix build -K -f littler.scm ``` ... the resulting temporary directory skips directly to the littler folder wheras the /gnu/store builds show the output inside of site-library. The /tmp output also looks different, lacking a bin/ folder like in the /gnu/store/*littlr* builds. How do I go about getting r out of site-library/littler/bin/r in there using the r-build-system? Here is what I have right now: ``` (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-public r-littler (package (name "r-littler") (version "0.3.18") (source (origin (method url-fetch) (uri (cran-uri "littler" version)) (sha256 (base32 "1lp6a62g3yhzr4pv9kynibv7k9pd546w6hifs1aficyxbyg4dgqq")))) (properties `((upstream-name . "littler"))) (build-system r-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'install 'add-to-path (lambda* (#:key inputs outputs #:allow-other-keys) (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")))))))) (inputs (list icu4c)) (native-inputs (list r-simplermarkdown automake autoconf zlib)) (home-page "https://github.com/eddelbuettel/littler") (synopsis "R at the Command-Line via 'r'") (description "This package provides a scripting and command-line front-end is provided by r (aka littler') as a lightweight binary wrapper around the GNU R language and environment for statistical computing and graphics. While R can be used in batch mode, the r binary adds full support for both shebang'-style scripting (i.e. using a hash-mark-exclamation-path expression as the first line in scripts) as well as command-line use in standard Unix pipelines. In other words, r provides the R language without the environment.") (license license:gpl2+))) ;; (packages->manifest (list r r-littler)) r-littler ``` I'm grateful for any assistance! Best Regards, Kyle ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to copy a file to the package /bin folder using the r-build-system? 2023-03-31 23:21 How to copy a file to the package /bin folder using the r-build-system? Kyle Andrews @ 2023-04-07 16:07 ` Simon Tournier 2023-04-09 3:15 ` Kyle Andrews 0 siblings, 1 reply; 5+ messages in thread From: Simon Tournier @ 2023-04-07 16:07 UTC (permalink / raw) To: Kyle Andrews, help-guix Hi, On ven., 31 mars 2023 at 23:21, Kyle Andrews <kyle@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--- And I would write, (lambda _ (mkdir (string-append #$output "/bin")) (copy-file "inst/bin/r" (string-append #$output "/bin/r"))) 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--- Hope that helps, simon ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to copy a file to the package /bin folder using the r-build-system? 2023-04-07 16:07 ` Simon Tournier @ 2023-04-09 3:15 ` Kyle Andrews 2023-04-09 9:36 ` ( 0 siblings, 1 reply; 5+ messages in thread From: Kyle Andrews @ 2023-04-09 3:15 UTC (permalink / raw) To: Simon Tournier; +Cc: help-guix Simon Tournier <zimon.toutoune@gmail.com> writes: > Hi, > > On ven., 31 mars 2023 at 23:21, Kyle Andrews <kyle@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? ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to copy a file to the package /bin folder using the r-build-system? 2023-04-09 3:15 ` Kyle Andrews @ 2023-04-09 9:36 ` ( 2023-04-09 12:54 ` Kyle Andrews 0 siblings, 1 reply; 5+ messages in thread From: ( @ 2023-04-09 9:36 UTC (permalink / raw) To: Kyle Andrews, Simon Tournier; +Cc: help-guix [-- Attachment #1: Type: text/plain, Size: 901 bytes --] Heya, On Sun Apr 9, 2023 at 4:15 AM BST, Kyle Andrews wrote: > > (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. Actually, you can even do: ``` (lambda _ (install-file "inst/bin/r" (string-append #$output "/bin"))) ``` > ``` > $ 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. I think (!) you also need to import (gnu packages pkg-config) and add PKG-CONFIG to NATIVE-INPUTS. -- ( [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 659 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to copy a file to the package /bin folder using the r-build-system? 2023-04-09 9:36 ` ( @ 2023-04-09 12:54 ` Kyle Andrews 0 siblings, 0 replies; 5+ messages in thread From: Kyle Andrews @ 2023-04-09 12:54 UTC (permalink / raw) To: (; +Cc: Simon Tournier, help-guix "(" <paren@disroot.org> writes: > [[PGP Signed Part:Undecided]] > Heya, > > On Sun Apr 9, 2023 at 4:15 AM BST, Kyle Andrews wrote: >> > (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. > > Actually, you can even do: > > ``` > (lambda _ > (install-file "inst/bin/r" > (string-append #$output "/bin"))) > ``` That is nice and intentional! >> ``` >> $ 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. > > I think (!) you also need to import (gnu packages pkg-config) and add > PKG-CONFIG to NATIVE-INPUTS. That fixed it! Thanks! > -- ( ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-09 13:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-31 23:21 How to copy a file to the package /bin folder using the r-build-system? Kyle Andrews 2023-04-07 16:07 ` Simon Tournier 2023-04-09 3:15 ` Kyle Andrews 2023-04-09 9:36 ` ( 2023-04-09 12:54 ` Kyle Andrews
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.