littler/0000755000176200001440000000000014577647212011750 5ustar liggesuserslittler/NAMESPACE0000644000176200001440000000024413351700132013143 0ustar liggesusers## (almost) emtpty file as we ## do not need a dynamic library ## do not import from other packages ## only export one small helper (by request) export("r") littler/ChangeLog0000644000176200001440000015024314577617312013525 0ustar liggesusers2024-03-23 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.20 * configure.ac: Idem * configure: Idem 2024-03-17 Dirk Eddelbuettel * inst/examples/ciw.r: Correct one documentation label 2024-03-14 Dirk Eddelbuettel * inst/examples/doi2bib.r: Allow multiple DOIs, check packages 2024-03-13 Dirk Eddelbuettel * inst/examples/doi2bib.r: New wrapper for DOI request for bibtex entry 2024-03-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date 2024-03-10 Dirk Eddelbuettel * R/init.R: Tweaks to generalized message * src/littler.c: In non-vanilla mode, rerun temp. dir initialization after local configuration files to allow for non-standard temp. file 2024-03-10 Berwin A Turlach * R/init.R: Generalize message to reflect ${R_ARCH} (if set) 2024-03-06 Dirk Eddelbuettel * inst/examples/ciw.r: Add connectivity check, tweak lines display 2024-03-05 Dirk Eddelbuettel * inst/examples/tttf.r: Support devtools::load_all() option 2024-03-02 Dirk Eddelbuettel * inst/examples/ciw.r: Several small tweaks 2024-02-29 Dirk Eddelbuettel * inst/examples/ciw.r: New wrapper around ciw::incoming() 2024-02-28 Dirk Eddelbuettel * inst/examples/tttf.r: Use env -S r -t for per-session temp dir, support command-line argument -c | --ci to set env.var CI 2024-02-25 Dirk Eddelbuettel * DESCRIPTION (Suggests): Removed package used in only one example 2024-02-22 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date * inst/examples/tt.r: Fill in "inst/tinytest" if `-d | --dir` but the target directory was omitted, and exists 2024-02-20 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date * inst/examples/tt.r: Use env -S r -t for per-session temp dir, support command-line argument -c | --ci to set env.var CI 2024-02-16 Dirk Eddelbuettel * .github/workflows/ci.yaml (jobs): Update to actions/checkout@v4, add r-ci-setup actions 2024-01-18 Dirk Eddelbuettel * inst/examples/tttl.r: Use env -S r -t for per-session temp dir 2024-01-16 Dirk Eddelbuettel * inst/examples/rcc.r (rccwrapper): Use env -S r -t to switch to using a per-session temporary directory as R does 2024-01-03 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date * inst/examples/installDeps2.r: Add simpler, dependency-free second variant of 'install dependencies found in DESCRIPTION' 2023-12-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.19 * configure.ac: Idem * configure: Idem 2023-12-12 Dirk Eddelbuettel * inst/examples/installRSPM.r: Update to p3m, install as installP3M.r 2023-12-01 Dirk Eddelbuettel * inst/examples/r2u.r: Add new --compile flag, small edits * inst/examples/installDeps.r: Small edit for --help text 2023-11-03 Dirk Eddelbuettel * inst/examples/installGithub.r: Add usage example for installation from repository sub-directory 2023-10-09 Dirk Eddelbuettel * inst/examples/r2u.r: Add --dryrun argument for (single) package build 2023-10-03 Dirk Eddelbuettel * inst/examples/tt.r: Switch the default value for 'effects' from FALSE to TRUE which, while a breaking change, is the better default. 2023-09-25 Dirk Eddelbuettel * inst/examples/installRub.r: Also allow 'package@universe' format 2023-09-20 Dirk Eddelbuettel * inst/examples/r2u.r: Another posit.co URL update 2023-09-19 Dirk Eddelbuettel * inst/examples/tttf.r: Extend --library to several arguments 2023-09-16 Dirk Eddelbuettel * inst/examples/installRSPM.r: Edits to help text, also show default distribution 2023-09-02 Dirk Eddelbuettel * inst/examples/r2u.r: Support BioConductor updates 2023-09-01 Dirk Eddelbuettel * inst/examples/tttf.r: Add --source argument 2023-08-21 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date * README.md: Add r-universe badge 2023-08-20 Dirk Eddelbuettel * inst/examples/installRSPM.r: Minor edits for coexistence, update base url to new corporate name and URL * inst/examples/installPPM.r: Install as hard link to installRSPM.r 2023-08-09 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll micro version and date * inst/examples/r2u.r: Add two more options for modifying the Debian version of a package being built * inst/examples/tttf.r: Very initial version of a single file testthat runner (aka 'testthat::test_file()' 2023-07-15 Dirk Eddelbuettel * inst/examples/installDeps.r: Support dependencies argument * inst/examples/check.r: Correct one line in help text 2023-06-01 Dirk Eddelbuettel * README.md: Note more prominently that this does not build on Windows 2023-05-15 Dirk Eddelbuettel * inst/examples/tttl.r: Expanded usage text 2023-05-11 Dirk Eddelbuettel * inst/examples/r2u.r: Micro-edit to displayed text 2023-03-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.18 * configure.ac: Idem * configure: Idem 2023-03-23 SHIMA Tatsuya * inst/examples/install2.r (capture): Update error message pattern used to detect failure to change in R 4.3.* 2023-03-23 Dirk Eddelbuettel * inst/examples/install2.r (capture): Small generalisation for somewhat fragile error capture 2023-03-22 Dirk Eddelbuettel * inst/examples/tttl.r: Small usability enhancement 2023-03-21 Dirk Eddelbuettel * inst/examples/installRub.r: Small extensions * inst/examples/r2u.r: Correction on suffix use 2023-03-20 Dirk Eddelbuettel * inst/examples/installRub.r: Initial version of r-universe binary installer 2023-03-10 Dirk Eddelbuettel * inst/examples/tttl.r: Very simple wrapper to testthat::test_local() * inst/examples/tt.r: Remove extra library(), change to https url 2023-02-22 Dirk Eddelbuettel * inst/examples/r2u.r: Extend with --suffix option 2023-02-14 Dirk Eddelbuettel * inst/examples/installGithub.r: Offer a type option and set it * inst/examples/install2.r: Ditto 2023-02-13 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: Updated default file * inst/examples/getRStudioServer.r: Idem 2022-12-31 Dirk Eddelbuettel * inst/examples/roxy.r: Added --libpath LIB option 2022-10-29 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.17 * configure.ac: Idem * configure: Idem 2022-10-28 Dirk Eddelbuettel * src/littler.c: Turn several functions into proper prototypes to make clang-15 happier * .github/workflows/ci.yaml (jobs): Update to actions/checkout@v3 2022-09-03 Dirk Eddelbuettel * inst/examples/installBioc.r (capture): Update error message pattern used to detect failure to change in R 4.3.* 2022-09-03 SHIMA Tatsuya * inst/examples/install2.r (capture): Update error message pattern used to detect failure to change in R 4.3.* 2022-08-28 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.16 * configure.ac: Idem * configure: Idem * inst/examples/installBioc.r: Small polish 2022-08-24 Pieter Moris * inst/examples/installBioc.r: Generalization, extension and extra features similar to how install2.r generalizes install2.r 2022-07-16 Dirk Eddelbuettel * inst/examples/r2u.r: Add simple r2u.r frontend 2022-04-03 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date * src/littler.c (init_rand): Update to current seeding version in R, add stdint.h header for uint_least64_t 2022-04-02 Dirk Eddelbuettel * configure.ac: Add two more header function checks * configure: Regenerated * src/config.h.in: Regenerated from expanded configure.ac 2022-02-25 Dirk Eddelbuettel * inst/examples/install2.r: Default installation directory is now the first element in .libPaths() which can reflect R_LIBS_USER etc 2022-02-22 Dirk Eddelbuettel * inst/examples/rcc.r: Add -v | --valgrind option 2022-01-21 Dirk Eddelbuettel * inst/examples/install2.r: Correct typo (thanks, @jds485) 2022-01-16 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date 2022-01-16 SHIMA Tatsuya * inst/examples/install2.r: Generalize -r option use 2021-12-21 Dirk Eddelbuettel * inst/examples/getPandoc.r: Add Pandoc .deb downloader 2021-12-15 Dirk Eddelbuettel * inst/examples/cowu.r: Add Windows UCRT checker 2021-12-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.15 * configure.ac: Idem * configure: Idem 2021-12-02 Dirk Eddelbuettel * inst/examples/mdweave2html.r: Add caller for simplermarkdown 2021-11-17 Dirk Eddelbuettel * README.md: Remove Travis badge * .travis.yml: Remove Travis YAML config 2021-10-27 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date, (Suggests): Use simplermarkdown not knitr, rmarkdown, minidown * vignettes/littler-faq.md: Converted to simplermarkdown vignette * vignettes/littler-examples.md: Idem * vignettes/water.css: Added 2021-10-26 Dirk Eddelbuettel * inst/examples/build.r: Set --compact-vignettes to both * inst/examples/getRStudioDesktop.r: Updated to changed urls * inst/examples/getRStudioServer.r: Idem 2021-10-23 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date 2021-10-22 Gergely Daroczi * inst/examples/install2.r: Check failure from parallel installs 2021-10-20 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date 2021-10-20 Gergely Daroczi * inst/examples/install2.r: Support download methods argument 2021-10-18 John Kerl * README.md: Fix three typos 2021-10-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.14 * configure.ac: Idem * configure: Idem * configure.ac: Updated via 'autoupdate' and 'autoreconf --warnings=obsolete' followed by light edit * src/config.h.in: Idem 2021-10-03 Dirk Eddelbuettel * DESCRIPTION (URL): Add documentation site to URL entry 2021-09-18 Dirk Eddelbuettel * inst/examples/getQuartoCli.r: Add simple convenience downloader for Quarto command-line .deb package parsing GitHub release result 2021-09-14 Dirk Eddelbuettel * inst/examples/roxy.r: Add -m | --minimal variant for namespace and rd roclets using the cached older version 2021-08-31 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date 2021-08-30 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: Updated to changed names * inst/examples/getRStudioServer.r: Idem 2021-07-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.13 * configure.ac: Idem * configure: Idem * tests/simpleTests.R: Slightly extended * R/test.R (test): Minor tweak * vignettes/littler-faq.Rmd (vignette): Update one URL * vignettes/littler-faq.html: Re-rendered * vignettes/littler-examples.html: Idem * .editorconfig: Added * .Rbuildignore: Added .editorconfig 2021-07-21 Dirk Eddelbuettel * inst/NEWS.Rd: Added entries for several changes since last release 2021-07-19 Dirk Eddelbuettel * inst/examples/kitten.r: Note bunny and puppy only work with plain 2021-07-09 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version and date * inst/examples/kitten.r: Correct calls for arma and eigen 2021-06-28 Dirk Eddelbuettel * inst/examples/cranIncoming.r: Corrected message 2021-06-28 Aaron Wolen * inst/examples/tt.r: Correct two typos 2021-04-04 Dirk Eddelbuettel * DESCRIPTION (URL): Add repo URL 2021-03-28 Dirk Eddelbuettel * docs/mkdmt-src/: Moved mkdocs-material input 2021-03-24 Dirk Eddelbuettel * vignettes/littler-faq.Rmd (vignette): Add %\Vignette{Encoding,Package} * vignettes/littler-examples.Rmd (vignette): Idem 2021-03-12 Dirk Eddelbuettel * inst/examples/kitten.r: Allow calling Rcpp{,Arma,Eigen}.package.skeleton * inst/examples/roxy.r: Expand roclets example and argument test 2021-03-10 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: Updated to cope with rvest change * inst/examples/getRStudioServer.r: Idem 2021-03-01 Dirk Eddelbuettel * docs-src/: Updated reflecting current files * docs/: Ditto 2021-02-22 Dirk Eddelbuettel * inst/examples/kitten.r: Add bunny option for kitten() 2021-02-20 Dirk Eddelbuettel * inst/examples/kitten.r: Pass puppy option on to kitten() call 2021-01-31 Dirk Eddelbuettel * inst/examples/silenceTwitterAccount.r: Check for updated version of rtweet with post_silence function 2021-01-30 Dirk Eddelbuettel * inst/examples/installRSPM.r: Correct -c | --code argument use 2021-01-29 Dirk Eddelbuettel * inst/examples/silenceTwitterAccount.r: Wrapper for rtweet 2021-01-17 Dirk Eddelbuettel * inst/examples/compiledDeps.r: Add -n | --nonrecursive option 2021-01-16 Dirk Eddelbuettel * inst/examples/compiledDeps.r: New script to show which dependencies of a package are in fact native i.e. compiled 2020-12-27 Dirk Eddelbuettel * .github/workflows/ci.yaml: Add CI runner using r-ci * README.md: Add new CI badge * tests/simpleTests.R: Update for GitHub Actions 2020-10-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.12 * configure: Idem 2020-10-03 Dirk Eddelbuettel * vignettes/littler-faq.Rmd: Switch to minidown::mini_document and 'framework: water' to dramatically reduce vignettes size * vignettes/littler-examples.Rmd: Idem * inst/examples/urlUpdate.r: Add -c | --check-only option 2020-10-02 Dirk Eddelbuettel * inst/examples/urlUpdate.r: New script to update URLs 2020-09-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/cranIncoming.r: New script 2020-09-21 Dirk Eddelbuettel * inst/examples/installBSPM.r: Initial version of BSPM installer 2020-09-20 Iñaki Úcar * inst/examples/installRSPM.r: Add RH/CentOS/Fedora support 2020-09-20 Dirk Eddelbuettel * .travis.yml (install): Switch to BSPM use for Travis * docs/: Added package website * docs-src/: Added package website inputs 2020-09-19 Dirk Eddelbuettel * inst/examples/installRSPM.r: First rough version of an RSPM installer which 'works for me' on Ubuntu but needs other tests 2020-09-13 Dirk Eddelbuettel * inst/examples/check.r: New option '-n | --no-manvig' replacing earlier attempt and implementing '--no-manual --no-vignettes' 2020-09-07 Dirk Eddelbuettel * README.md: Added 'last commit' badge 2020-09-01 Dirk Eddelbuettel * inst/examples/installDeps.r: Added initial version 2020-08-15 Dirk Eddelbuettel * inst/examples/tt.r: For n=1 enforce serial mode 2020-07-26 Dirk Eddelbuettel * inst/examples/cos.r: Support pre-built tar.gz as well 2020-07-24 Dirk Eddelbuettel * inst/examples/cow.r: Support pre-built tar.gz as well 2020-07-23 Dirk Eddelbuettel * inst/examples/c4c.r: Support pre-built tar.gz as well 2020-07-07 Dirk Eddelbuettel * inst/examples/com.r: Add 'check_on_macos' wrapper 2020-06-28 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/check.r: Add options --no-manual and --no-vignettes 2020-06-26 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 0.3.11 * configure: Idem 2020-06-25 Dirk Eddelbuettel * inst/examples/check.r: Accomodate recent docopt change for quoted arguments simplifying the use script use * inst/examples/rcc.r: Idem * inst/examples/roxy.r: Idem, add new option -f --full to select --nocache and all roclets * inst/examples/installGithub.r: Minor help text edit 2020-06-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2020-06-16 Dirk Eddelbuettel * vignettes/littler-faq.Rmd (vignette): Mention zsh builtin again * vignettes/littler-examples.Rmd (vignette): Add short note too 2020-06-03 Dirk Eddelbuettel * src/littler.c: Update copyright year to 2020 in two places 2020-06-02 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 0.3.10 * configure.ac: Idem * configure: Idem 2020-06-01 Dirk Eddelbuettel * inst/examples/roxy.r: Added docopt, support nocache and roclets * .travis.yml: Switch to bionic and R 4.0.0 2020-04-11 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2020-04-09 Sergio Oller * inst/examples/install2.r: Generalize --error behaviour by ignoring two more possible sources of error 2020-03-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/installBioc.r: Ensure .libPaths() is set 2020-02-23 Dirk Eddelbuettel * inst/examples/installBioc.r: New helper script for BioConductor 2019-12-27 Dirk Eddelbuettel * inst/examples/update.r: Set _R_SHLIB_STRIP_ to 'true' 2019-12-23 Dirk Eddelbuettel * inst/examples/install.r: Set _R_SHLIB_STRIP_ to 'true' * inst/examples/install2.r: Idem * inst/examples/installGitHub: Idem * inst/examples/installRepo: Idem 2019-12-01 Dirk Eddelbuettel * inst/examples/tt.r: Correct ncpu fallback setting 2019-11-16 Dirk Eddelbuettel * inst/examples/rcc.r: Set _R_CHECK_TESTS_NLINES_=0 for full logs 2019-10-28 Dirk Eddelbuettel * inst/examples/update.r: Now only considers writeable directories 2019-10-27 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 0.3.9 * configure.ac: Idem * configure: Idem 2019-10-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/kitten.r: Now with puppy love for tinytest * inst/examples/pkg2bibtex.r: New helper for bibtex package records * inst/examples/sweave.r: New helper script to sweave (and compact) * inst/examples/render.r: Add pdf compacting option * inst/examples/compactpdf.r: Slightly improved file logic * inst/examples/kitten.r: Add tinytest::puppy support via '-p' option 2019-10-25 Dirk Eddelbuettel * inst/examples/sweave.r: New helper to 'Sweave' Rnw files, with automatic call to compactPDF (and option to suppress this) * inst/examples/render.r: Add support for compactPDF, and option not to 2019-09-26 Dirk Eddelbuettel * inst/examples/update.r: Correct libloc help text and default value * inst/examples/rcc.r: Use max(all rc values) as status return 2019-09-25 Dirk Eddelbuettel * inst/examples/rcc.r: Support exit status return, accept new option '--erroron' to pass to error_on option of rcmdcheck 2019-08-29 Dirk Eddelbuettel * inst/examples/tt.r: Support tinytest side effects and npus 2019-08-25 Dirk Eddelbuettel * inst/examples/compactpdf.r: New simple helper script * inst/examples/build.r: Add '--compact-vignettes --resave-data' 2019-07-24 Dirk Eddelbuettel * inst/examples/cos.r: New 'rhub: check on Solaris' helper 2019-06-23 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-06-21 Stefan Widgren * inst/examples/dratInsert.r: Correct use of call. in stop() * inst/examples/render.r: Idem * vignettes/littler-examples.Rmd: Idem 2019-06-09 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.8 * configure.ac: Idem * configure: Idem * inst/examples/c4c.r: Set check_args="--no-manual --no-vignettes" as we cannot assume rhub to have functioning latex infrastructure * inst/examples/cow.r: Ditto * inst/examples/rchk.r: Ditto 2019-06-08 Dirk Eddelbuettel * inst/examples/tt.r: Initial steps towards a tinytest wrapper 2019-06-03 Dirk Eddelbuettel * inst/examples/install2.r: Extend to optional parallel installation 2019-05-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/install.r: Extend to optional parallel installation as tested in installedParallel.r * inst/examples/installParallel.r: Removed now redundant file 2019-05-13 Dirk Eddelbuettel * inst/examples/installParallel.r: Potential replacement for install.r which can install external repos in parallel 2019-04-30 Dirk Eddelbuettel * inst/examples/install.r: Usage help display update 2019-03-23 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/littler-faq.Rmd (vignette): New section on adding r to PATH * src/Makevars.in: Reference new littler-faq entry in help display * R/init.R (.onAttach): If 'r' ('lr') is not in path, displayed message also references new entry in littler-faq vignette 2019-03-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.7 * configure.ac: Idem * configure: Idem 2019-03-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * configure.ac: Correct use of AC_DEFINE * configure: Idem 2019-01-31 Gergely Daroczi * inst/examples/install2.r: Fix warning on multiple repos * inst/examples/installGithub.r: Add -r | --repos option like in install2.r 2019-01-27 Dirk Eddelbuettel * src/littler.c: Update copyright year to 2019 * vignettes/littler-examples.Rmd (date): Correct typo in date 2019-01-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.6 * configure.ac: Idem * configure: Idem * inst/examples/install.r (installArg): Use explicit argument repos 2019-01-14 Dirk Eddelbuettel * README.md: Add dependency badge 2019-01-06 Dirk Eddelbuettel * vignettes/littler-faq.Rmd: Adding a short FAQ vignette * R/init.R (.onAttach): Mention new FAQ vignette in message 2018-12-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/update.r: Add -n | --ncpus support 2018-12-30 Colin Gillespie * inst/examples/install2.r: Add -n (Ncpus) argument 2018-10-30 Dirk Eddelbuettel * inst/examples/install.r: Add "." if no argument given but DESCRIPTION and NAMESPACE in current directory * inst/examples/install2.r: Idem 2018-10-27 Dirk Eddelbuettel * inst/examples/install.r: Use "." to install from current directory * inst/examples/install2.r: Idem 2018-10-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.5 * configure.ac: Idem * configgure: Idem 2018-09-23 Dirk Eddelbuettel * inst/examples/rchk.r: Minimal wrapper for rchk 2018-09-21 Dirk Eddelbuettel * inst/examples/rcc.r (rccwrapper): Insert a wrapper to set arguments explicitly now that the command order was changed in rcmdcheck 1.3.0 2018-09-12 Dirk Eddelbuettel * inst/examples/roxy.r: Overcome roxygen2 6.1.0 breakage by loading a build of, eg, roxygen2 6.0.1 if found at ~/.R/cache/roxygen2 2018-09-02 Dirk Eddelbuettel * .travis.yml: Switch Travis CI to R 3.5 repo 2018-08-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.4 * configure.ac: Idem * configgure: Idem * README.md: Updated 2018-08-23 Dirk Eddelbuettel * inst/examples/check.r: Use is.null(), other docopt simplifications 2018-08-09 Dirk Eddelbuettel * inst/examples/rcc.r: Use is.null() to test for empty arguments 2018-08-03 Dirk Eddelbuettel * update.r: No longer need suppressMessages() around library() * shiny.r: Idem * rcc.r: Idem * install2.r: Idem * check.r: Idem * build.r: Idem * render.r: Idem * testInstalled.r: Idem * rd2md.r: Idem 2018-07-31 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: More defensive use of URL while curl (OS-level) library packages have is more fragile * inst/examples/getRStudioServer.r: Idem 2018-07-29 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: URLs updated * inst/examples/getRStudioServer.r: Idem 2018-05-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/update.r: Added docopt support 2018-05-24 Dirk Eddelbuettel * vignettes/littler-examples.Rmd: Updated and extended * inst/examples/render.r: Minor tweak 2018-05-23 Dirk Eddelbuettel * inst/examples/rcc.r: Correct args for '--fast' call 2018-05-12 Dirk Eddelbuettel * inst/examples/install2.r: New option -s to skip installed packages * inst/examples/installIfNew.R: Removed as now redundant * inst/examples/getRStudioServer.r: Update URL to trusty 2018-05-06 Brandon Bertelsen * inst/examples/installIfNew.R: New example to only install new packages not already installed 2018-02-26 Dirk Eddelbuettel * inst/examples/getRStudioDesktop.r: Source URL update 2018-01-02 Dirk Eddelbuettel * inst/examples/kitten.r: New script to call pkgKitten::kitten() * inst/examples/compAttr.r: Use '#!/usr/bin/env r' as shebang line * inst/examples/fsizes.r: Idem * inst/examples/getRStudioDesktop.r: Idem * getRStudioServer.r: Idem * highlightsweave.r: Idem * inst/examples/knit.r: Idem * inst/examples/pnrrs.r: Idem * inst/examples/roxy.r: Idem 2017-12-18 Dirk Eddelbuettel * inst/examples/check.r: Remove second docopt() parse * inst/examples/dratInsert.r: Idem * inst/examples/install2.r: Idem * inst/examples/installGithub.r: Idem * inst/examples/installRepo.r: Idem * inst/examples/rd2md.r: Idem 2017-12-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.3 * README.md: Updated 2017-12-10 Dirk Eddelbuettel * vignettes/littler-examples.Rmd: Expanded and updated 2017-11-30 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/getRStudioServer.r: Rewritten using rvest * inst/examples/getRStudioDesktop.r: Idem 2017-11-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/build.r: Use current directory if none given 2017-09-05 Dirk Eddelbuettel * vignettes/littler-examples.Rmd (vignette): Expanded 2017-09-04 Dirk Eddelbuettel * inst/examples/dratInsert.r: Combine suppressMessages() calls * inst/examples/installGithub.r: Idem * inst/examples/installRepo.r: Idem * inst/examples/rd2md.r: Idem * inst/examples/testInstalled.r: Idem 2017-08-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/examples/build.r: New option --fast skipping vignettes and manual * inst/examples/rcc.r: Ditto 2017-08-10 Dirk Eddelbuettel * inst/examples/runit.r: Updated docopt usage 2017-07-12 Dirk Eddelbuettel * inst/examples/c4c.r: Use #!/usr/bin/env r instead * inst/examples/cow.r: Idem 2017-06-22 Dirk Eddelbuettel * inst/examples/cow.r: Added simple rhub::check_on_windows() wrapper * .travis.yml (group): Added as required by Travis CI 2017-05-01 Carl Boettiger * inst/examples/install2.r: More robust error handling 2017-04-23 Dirk Eddelbuettel * inst/examples/pnrrs.r: Added 'pnrrs.r' helper calling tools::package_native_routine_registration_skeleton() available in R 3.4.0 and later 2017-04-04 Carl Boettiger * inst/examples/installGithub.r: Correct argument to upgrade 2017-02-18 Dirk Eddelbuettel * .travis.yml (before_install): Use https 2017-02-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.3.2 * src/scripts/littler.R: Also skip R_USER 2017-02-13 Dirk Eddelbuettel * inst/examples/build.r: New script calling R CMD build 2017-02-05 Dirk Eddelbuettel * inst/examples/c4c.r: New script calling rhub::check4cran() * inst/examples/getRStudioDesktop.r: New script * inst/examples/getRStudioServer.r: New script 2016-12-02 Dirk Eddelbuettel * R/init.R: Additional #nocov tags * R/test.R: Idem 2016-11-17 Dirk Eddelbuettel * R/rd2md.r: New script 2016-11-17 Dirk Eddelbuettel * inst/examples/installGithub.r: Use remotes instead of devtools * inst/examples/installRepo.r: Ditto * vignettes/littler-examples.Rmd: Ditto * inst/examples/check.r: Small correction for .libPaths() management 2016-10-01 Dirk Eddelbuettel * inst/examples/rd2md.r: Convert Rd to markdown (for use in posts) 2016-08-13 Dirk Eddelbuettel * configure (PACKAGE_VERSION): Re-ran autoconf to set version to 0.3.1 2016-08-06 Dirk Eddelbuettel * DESCRIPTION: Release 0.3.1 * DESCRIPTION: Added URL and BugReports: * R/test.R (r): New helper function r() to return path to binary * man/r.rd: Documentation * man/littler.rd: Removed alias to 'r' * NAMESPACE: Export r * inst/examples/rcc.r: New example wrapping rcmdcheck::rcmdcheck() * inst/examples/render.r: New (still very simple) example to call rmarkdown::render() * inst/examples/check.r: Extended help and usage now via '-x' * inst/examples/dratInsert.r: Idem * inst/examples/install2.r: Idem * inst/examples/installGithub.r: Idem * inst/examples/installRepo.r: Idem * .travis.yml: Switch to using run.sh for Travis CI * tests/simpleTests.R: Make tests conditional on Linux 2016-06-05 Dirk Eddelbuettel * inst/examples/roxy.r: Minor correction to documentation 2016-03-28 Dirk Eddelbuettel * inst/examples/check.r: Add support for rcmdcheck * DESCRIPTION: Add Suggests: rcmdcheck 2016-03-21 Brandon Bertelsen * vignettes/littler-examples.Rmd: Correct installGithub.r example 2016-02-26 Dirk Eddelbuettel * src/littler.c (showVersionAndExit): Updated copyright * src/scripts/littler.R: Added copyright header, reindented * src/scripts/autoloads.R: Idem * src/scripts/ldflags.R: Idem 2016-02-21 Mattias Ellert * configure.ac: Add support for AM_LDFLAGS * src/scripts/littler.R: Exclude three more variables reflecting the (optional) installation directory 2015-11-20 Dirk Eddelbuettel * inst/examples/rhome.r: New script to call R.home(...) 2015-11-18 Dirk Eddelbuettel * DESCRIPTION: Add Suggests: docopt * .travis.yml: Add r-cran-docopt (via our PPA) 2015-11-17 Steven Pav * inst/examples/install2.r: Support options past '--' which are passed on to R CMD INSTALL as INSTALL_opts 2015-11-04 Dirk Eddelbuettel * DESCRIPTION: Add 'SystemRequirements: libR' per discussion with CRAN 2015-10-30 Dirk Eddelbuettel * NAMESPACE: Added some comments explaining empty content 2015-10-29 Dirk Eddelbuettel * DESCRIPTION: Release 0.3.0 * inst/NEWS.Rd: Added NEWS.Rd file * inst/script-tests/*: Set (old) scripts to #!/usr/bin/env r shebang 2015-10-28 Dirk Eddelbuettel * vignettes/littler-examples.Rmd: Added vignette * configure.ac: Detect if built in git repo * src/gitversion.h.in: Reflect git version if built from repo * src/littler.c: Small tweaks to --version output * .travis.yml: Install knitr for Travis 2015-10-27 Dirk Eddelbuettel * R/test.R: Generalized binary for other OS types, switched to simpler and more predictable default command * tests/simpleTests.R: Renamed from run-all.R, simpler default test, added new test calling an R 'state' variable * deprecated/tools: Moved from tools as no longer needed under rewritten configure.ac * man/littler.Rd: Added manual page 2015-10-26 Jeroen Oooms * R/tests.R: Added wrapper to call 'r' from tests/ directory * tests/run-all.R: Added simple test 2015-10-26 Dirk Eddelbuettel * configure.ac: Also respect 'R CMD config CFLAGS' in build * src/littler.c: Suppress pedantic warnings on fopen results * src/gitversion.h: Define compiletime and compiledate only if VERBOSE_BUILD is set 2015-10-25 Dirk Eddelbuettel * DESCRIPTION: Added, as part of conversion to package * NAMESPACE: Ditto * R/init.R: Ditto * src/littler.c: Moved from top-level * src/config.h.in: Ditto * src/Makevars.in: Moved, and adapted from Makefile.am * src/config-const.h: Added with some (so far) const values * src/scripts/autoloads.R: Moved from top-level * src/scripts/littler.R: Ditto * cleanup: Adapted to new layout * .gitignore: Ditto * .Rbuildignore: Added * inst/script-tests/: Moved from top-level tests/ * inst/examples/: Moved from top-level examples/ * inst/man-page/r.1: Moved from top-level r.1 * .travis.yml: Adapted to work on R package * deprecated/: Added to hold some no-longer used files * README.md: Updated 2015-10-02 Dirk Eddelbuettel * examples/installRepo.r: New script wrapping GitHub, Bitbucket, Subversion (via http) and generic URL access. * examples/check.r: Expanded --help thanks to docopt * examples/installGithub.r: Ditto * examples/install2.r: Ditto * examples/dratInsert.r: Ditto 2015-09-30 Dirk Eddelbuettel * examples/installGithub.r: Simplify, correct and extend script (with thanks to Alexios for the bug report) 2015-09-20 Dirk Eddelbuettel * examples/check.r: Added new option to support 'kitchen sink' installation of Depends, Imports, LinkingTo and Suggests (cf #30) 2015-08-27 Dirk Eddelbuettel * examples/install2.r: Better testing of opt$repos values 2015-07-09 Dirk Eddelbuettel * littler.c (main): Add verbosity argument to parse_eval() which allows for more silent initial operations to set library paths, load libraries and load data -- addresses wish of GitHub ticket #26 2015-05-07 Dirk Eddelbuettel * littler.c: Invert #ifdef on REPRODUCIBLE_BUILD to VERBOSE_BUILD: by default we no longer encode the timestamp of the builds * bootstrap: Ditto: Unless VERBOSE_BUILD is define do not place timestamps in to gitversion.h * littler.c: Also source $R_HOME/etc/Rprofile.site and ~/.Rprofile if present, and document this via --usage flag output. 2015-03-22 Dirk Eddelbuettel * examples/dratInsert.r: Changed to support a commit message * examples/installGithub.r: Remove support -l which no longer works with the current version of devtools (but .libLoc() is respected) 2015-03-14 Dirk Eddelbuettel * configure.ac: Mark as release 0.2.3 2015-03-09 Dirk Eddelbuettel * littler.c (showVersionAndExit): If REPRODUCIBLE_BUILD is defined, do not display built time and date to ensure binary reproducibility * bootstrap: If REPRODUCIBLE_BUILD is defined, do not insert __TIME__ and __DATE__ compile time macros into generated header gitversion.h 2015-03-06 Dirk Eddelbuettel * littler.c (showUsageAndExit): Add link to examples web page. 2015-03-05 Dirk Eddelbuettel * r.1: Updated with recent command additions. 2015-02-27 Dirk Eddelbuettel * examples/dratInsert.r: New script to insert package into drat 2015-02-26 Dirk Eddelbuettel * examples/check.r: New option '--deb-pkgs PKGS' to install .deb packages prior to running the check (in one-command Docker use) 2015-02-19 Dirk Eddelbuettel * littler.c: New command-line argument -L|--libpath to add a directory to the `.libPaths()` 2015-02-17 Carl Boettiger * examples/install2.r: Permit multiple -r|--repos arguments 2015-02-08 Dirk Eddelbuettel * examples/install.r: Set the default value of repos to getOption("repos") as we can now set values in the littler dotfile * examples/install2.r: Ditto * examples/update.r: Ditto 2015-02-03 Dirk Eddelbuettel * littler.c (showVersionAndExit): Update copyright to 2015 here too 2015-01-29 Dirk Eddelbuettel * configure.ac: Mark as release 0.2.2 2015-01-18 Dirk Eddelbuettel * examples/check.r: Add --setwd dir option to change directories 2015-01-17 Dirk Eddelbuettel * examples/check.r: Add a script which wrap R CMD check; with optional support for prior installation of dependencies * examples/shiny.r: Add simple wrapper for shiny::runApp() 2015-01-12 Dirk Eddelbuettel * littler.c: Test for both /etc/littler.r and ~/.littler.r and source if found (but not if -v|--vanilla was given) 2014-12-31 Dirk Eddelbuettel * examples/install2.r: Smarter use of arguments: files with matching extension are installed directly; also clean up temp files 2014-12-28 Dirk Eddelbuettel * examples/install.r: Smarter use of arguments: files with matching extension are installed directly; also expanded help text 2014-12-22 Dirk Eddelbuettel * littler.R: Do not include R_LIBS_USER in list of variables 2014-12-21 Dirk Eddelbuettel * examples/install.r: Reflect value of REPOS and LIBLOC in addition to the [unchanged] default values for either * examples/install2.r: If 'repos' is set to (string) NULL, set it to the actual NULL symbol (so that installation from file proceeds) 2014-10-19 Dirk Eddelbuettel * configure.ac: Mark as release 0.2.1 * littler.c: Minor whitespace changes for 'r --version' * examples/*.r: Add proper copyright and license header for remaining files 2014-10-13 Dirk Eddelbuettel * examples/install.r: Remove temporary rds files matching libloc or repos containing info about installed and available packages * examples/update.r: Add proper copyright and license header * examples/update.r: Ditto * examples/install2.r: Ditto 2014-10-11 Dirk Eddelbuettel * examples/install2.r: Minor polishing 2014-10-10 Carl Boettiger * examples/install2.r: Expanded coverage of '--depends' argument 2014-10-08 Dirk Eddelbuettel * INSTALL: Updated, made distinction between installing from a tarball and installing from git [via './bootstrap'] more clear * README: Brief update, still needs more thorough rewrite 2014-10-04 Dirk Eddelbuettel * examples/testInstalled.r: Renamed from test.r, minor edits 2014-10-03 Carl Boettiger * examples/test.r: Contributed new test script 2014-09-29 Dirk Eddelbuettel * examples/install2.r: Minor edits * examples/installGitHub.r: Ditto 2014-09-29 Carl Boettiger * examples/install2.r: Fix return code, and add new option --deps * examples/installGitHub.r: New example to install from GitHub 2014-09-01 Dirk Eddelbuettel * configure.ac: Mark as release 0.2.0 2014-08-31 Dirk Eddelbuettel * examples/fsizes.r: Use explicit 'file("stdin")' with 'readLines()' 2014-08-26 Dirk Eddelbuettel * examples/install2.r: Using docopt (>= 0.3) using stripped names 2014-08-25 Dirk Eddelbuettel * examples/fileOps.r: Really simple example on vectorised file operations -- but more as an illustration 2014-08-22 Dirk Eddelbuettel * littler.c (main): Minor correction for help text 2014-08-20 Dirk Eddelbuettel * examples/runit.r: New example file 'runit.r' (using docopt) * examples/install2.r: Simplified by using docopt 2014-07-27 Dirk Eddelbuettel * r.1: Update manual page about new -d option * littler.c: Store read.csv() result in 'X', not 'dat' 2014-07-26 Dirk Eddelbuettel * littler.c: New command-line option '-d|--datastdin' which triggers execution of 'dat <- read.csv(file("stdin", stringsAsFactors=FALSE)' 2014-07-23 Dirk Eddelbuettel * examples/install2.r: Updated throughout * cleanup: Also remove .deps 2014-07-17 Dirk Eddelbuettel * examples/highlightsweave.r: New example for a highlight sweave driver (as eg needed for Rcpp vignettes) helper script 2014-07-14 Dirk Eddelbuettel * examples/roxy.r: Expanded similar to compAttr.r 2014-07-13 Dirk Eddelbuettel * examples/compAttr.r: Added new example script to call compileAttributes() from the Rcpp package 2014-06-07 Dirk Eddelbuettel * examples/roxy.r: Added new example script 2014-05-23 Dirk Eddelbuettel * tools/compile: Added, based on current automake version 2014-05-08 Dirk Eddelbuettel * examples/install.r: Updated to currently used version containing the faster RStudio CDN as the default CRAN mirror * examples/update.r: Ditto 2014-04-23 Dirk Eddelbuettel * tools/missing: Updated to current version from libtool on Ubuntu * tools/install.sh: Idem * tools/config.guess: Updated to current version from autotools-dev * tools/config.sub: Idem * Makefile.am: Explicitly expand ldflags.txt to a Makefile variable * Makefile.am: Removed use of .PHONY again * .travis.yml: Added a very simple .travis.yml * .travis.yml: Ensure we end 'script' section on error code 0 * littler.c: Ensure --help and --version end with exit(0) * Makefile.am (CFLAGS): Add CFLAGS 2014-02-07 Dirk Eddelbuettel * configure.ac: Mark as release 0.1.6 [though never released as 0.1.6] * configure.ac: Renamed from configure.in * bootstrap: Autogenerate header gitversion.h instead of svnversion.h * littler.c: Use gitversion.h, also whitespace / indentation update * Makefile.am: Use gitversiob.h * cleanup: Ditto 2013-10-29 Dirk Eddelbuettel * littler.c: Correction to display of '--version' 2012-10-06 Dirk Eddelbuettel * ldflags.R: Applied patch by Jonas Rauch to correctly compute -rpath linker flags on Linux, squashing a really old bug 2012-09-03 Dirk Eddelbuettel * examples/update.r: Minor tweak 2011-09-17 Dirk Eddelbuettel * configure.in: Mark as release 0.1.5 * littler.c (littler_CleanUp): Remove call to Rf_KillAllDevices() 2011-09-15 Dirk Eddelbuettel * configure.in: Mark as release 0.1.4 * Makefile.am: Applied patch by Mathias Klose to prevent FTBFS with 'ld --as-needed', cf LP bug 770980. * littler.c: A few small tweaks suggested by 'gcc -Wall' * examples/install2.r: Added a second R package installer example * examples/update.r: Switch to '/usr/bin/r -t' as shebang line * examples/fsizes.r: Dito * littler.c: Update copyrights to 2011 * README: Idem 2010-01-05 Dirk Eddelbuettel * configure.in: Mark as release 0.1.3 * littler.c: Update copyrights to 2010 * README: Idem * bootstrap: Added tests to not re-generate svnversion.h when information about revision number and date cannot be had retrieved * ldflags.R: Ensure no 'empty string' entries get expanded as this triggered a Debian lintian error related to rpath usage * tools/config.{guess,sub}: Updated 2010-01-04 Dirk Eddelbuettel * littler.c: Set up littler so that 'interactive()' is false, and add new flag -i|--interactive to activate the previous behaviour * r.1: Document the new flag 2009-12-12 Dirk Eddelbuettel * littler.c: Expand the littler_CleanUp function to be closer to the example clean up function in section 8.1.2 'Setting R callbacks' in the R Extensions manual * tests/dotLast.r: simple test of .Last() which we now reach * examples/install.r: Do not call install.packages with dependencies=TRUE as this leads to too many auxilliary pkgs * examples/update.r: Small fix to clearCache() 2009-03-23 Dirk Eddelbuettel * r.1: Added two missing \ to protect \n inside quotes 2009-01-13 Dirk Eddelbuettel * configure.in: Mark as release 0.1.2 * littler.c,r.1: Added -q|--quick switch to skip autoload with thanks to Simon Urbanek for the suggestion. * littler.c: Updated copyright to 2009 2009-01-10 Dirk Eddelbuettel * Makefile.am: Tweaked flow and logic a little, updated copyright 2008-08-28 Jeffrey Horner * littler.c: added -t|--rtemp to use R's temp dir strategy with thanks to Paul Gilbert for the suggestion. 2008-08-27 Dirk Eddelbuettel * Release 0.1.1 2008-08-18 Dirk Eddelbuettel * tests/exitstatus.sh: Added test script for new exit status feature 2008-08-18 Jeffrey Horner * littler.c: now exits with status provided by call to q(). 2008-06-09 Dirk Eddelbuettel * r.1: Applied patch by Seb which adds more examples. Thanks! 2008-04-30 Dirk Eddelbuettel * README: added entry about getopt 2008-03-12 Dirk Eddelbuettel * examples/update.r: simplified clearCache 2008-01-14 Dirk Eddelbuettel * Release 0.1.0 * littler.c: Added new option -l|--packages to load R packages * littler.c: Small change to optional argument handling * littler.c: Also use --no-restore argument on startup * littler.c: Small additions to --help output * r.1: Documented new option -l | --packages * README: Updated as well * autoloads.R: No longer suppress autoload of package datasets * bootstrap: Two small fixes for non-bash sh use * examples/update.r: rewritten cache clearing part * tests/timing*.sh: added Rscript for comparison 2007-04-13 Dirk Eddelbuettel * Release 0.0.11 * Makefile.am: Removed use of one GNU extension to Make to facilitate builds on non-GNU systems * examples/update.r: Fix by Jeff for file caching issues 2007-02-20 Dirk Eddelbuettel * Release 0.0.10 2007-02-19 Jeffrey Horner * README: Updated FAQ entry regarding Rscript with 'hello world!' example. * littler.c: Added R version checking to support R 2.4 and 2.5 * tests/*: Convened on ../r as path to r. 2007-02-18 Dirk Eddelbuettel * configure.in: Tag it as release 0.0.10 * README: Added FAQ entry regarding Rscript * README, littler.c: Rolled copyright into 2007 2007-02-16 Jeffrey Horner * configure.in: added --with-java-libs and --with-tcltk-libs for conditionally linking littler against respective libraries. 2007-02-15 Jeffrey Horner * littler.R: added more R_* environment variables to output. * configure.in: added R CMD *_LIBS output to ld linker flags * INSTALL: Added minimal recipe to build GNU R with --enable-R-shlib 2007-02-08 Jeffrey Horner * littler.c: added function init_rand to set initial seed values for the R function tempfile. * configure.in: added checks for existence of gettimeofday and time to support init_rand. 2007-01-04 Dirk Eddelbuettel * configure.in: Tag it as release 0.0.9 2007-01-04 Jeffrey Horner * littler.c: added call to R_ReplDLLinit to initialize console buffers 2006-11-22 Jeffrey Horner * examples/updates.r: always regenerate package cache 2006-10-28 Dirk Eddelbuettel * update.r: Switched repos to to cran.r-project.org 2006-10-25 Dirk Eddelbuettel * configure.in: Tag it as release 0.0.8 * examples/install.r, examples/update.r: Two new examples * Makefile.am: Some small cleanups and fixes * INSTALL: Clarified need for R as shared library, reformatted 2006-10-09 Dirk Eddelbuettel * Makefile, bootstrap: Added .PHONY targets, have bootstrap optionally create svnversion.h * FAQ: document clash of 'r' with the zsh builtin 2006-10-06 Jeffrey Horner * configure.in, littler.c, Makefile.am, littler.R: make littler set all R_* environment variables. * configure.in: unconditionally create littler.h, autoloads.h, and ldflags.txt during configure. 2006-10-05 Jeffrey Horner * Release 0.0.7 * Makefile.am: added ldflags.R to dist 2006-10-04 Dirk Eddelbuettel * Release 0.0.6 2006-10-03 Dirk Eddelbuettel * README, INSTALL: Some more polishing 2006-10-03 Jeffrey Horner * README: added FAQ answer to use the configure flags --program-prefix and/or --program-suffix for renaming r binary. 2006-10-02 Dirk Eddelbuettel * configure.in: Added check for R version >= 2.3.1 2006-09-29 Dirk Eddelbuettel * littler.c: support svnrevision/date in --version * bootstrap, svnversion.h: call svn and do some awk'ing borrowed from R's Makefiles to auto-create svnversion.h * configure.in, Makefile.am: updated accordingly 2006-09-29 Jeffrey Horner * README: Added 'Implementation' section. 2006-09-28 Jeffrey Horner * littler.c: parse_eval(), the REP loop for stdin and '-e', now use R_tryEval() instead of eval(). * configure.in, Makefile.am, ldflags.R: For linux, we add all paths set by RHOME/etc/ldpaths to r's RPATH. 2006-09-26 Dirk Eddelbuettel * Release 0.0.5 made and announced by Jeff * rinterp.c, rinterp.1: renamed to littler.c, littler.1 * Makefile.am, configure.in: Many changes to accomodate that * autoloads.R: code generator to aid in autoload()ing functions from default packages. 2006-09-05 Jeffrey Horner * Release 0.0.4: * rinterp.c: Bug fix: forgot to reset membuf_t.buf after a call to resize_membuf() * rinterp.c: After R init, we delete R_SESSION_TMPDIR and point it to one of TMPDIR, TMP, TEMP, or "/tmp". We also turn off R's signal handlers. 2006-08-15 Jeffrey Horner * Release 0.0.3: * configure.in: Added Dirk's patch to configure.in to automatically find R in search path and to use --rpath linker option. * rinterp.c: Read commands from stdin when no file is given on cmdline. (feature request from Dirk Eddelbuettel ) 2006-08-09 Jeffrey Horner * Release 0.0.2: * rinterp.c: Added argv support. (feature request from Juha Vierine ) 2006-07-14 Jeffrey Horner * Release 0.0.1: * Initial release of Rinterp: hashbang support for R littler/README.md0000644000176200001440000001140514471021241013205 0ustar liggesusers## littler: A scripting and command-line front-end for GNU R [![CI](https://github.com/eddelbuettel/littler/workflows/ci/badge.svg)](https://github.com/eddelbuettel/littler/actions?query=workflow%3Aci) [![License](https://img.shields.io/badge/license-GPL%20%28%3E=%202%29-brightgreen.svg?style=flat)](https://www.gnu.org/licenses/gpl-2.0.html) [![CRAN](https://www.r-pkg.org/badges/version/littler)](https://cran.r-project.org/package=littler) [![r-universe](https://eddelbuettel.r-universe.dev/badges/littler)](https://eddelbuettel.r-universe.dev/littler) [![Dependencies](https://tinyverse.netlify.com/badge/littler)](https://cran.r-project.org/package=littler) [![Downloads](https://cranlogs.r-pkg.org/badges/littler?color=brightgreen)](https://www.r-pkg.org/pkg/littler) [![Last Commit](https://img.shields.io/github/last-commit/eddelbuettel/littler)](https://github.com/eddelbuettel/littler) [![Documentation](https://img.shields.io/badge/documentation-is_here-blue)](https://eddelbuettel.github.io/littler/) ### So What Is It For? ```r #!/usr/bin/env r ## for use in scripts other input | r ## for use in pipes r somefile.R ## for running files r -e 'expr' ## for evaluating expressions r --help ## to show a quick synopsis ``` ### Examples? Plenty. See the [examples vignette](https://cran.r-project.org/package=littler/vignettes/littler-examples.html) for a full set of introductory examples. Also see the [examples/ directory](https://github.com/eddelbuettel/littler/tree/master/inst/examples) for a full 28 example scripts, as well as maybe the [older tests directory](https://github.com/eddelbuettel/littler/tree/master/inst/script-tests) both of which are installed with the package. Some scripts I use daily or near daily (in alphabetical order): ``` build.r ## builds from the current directory c4c.r ## submits current directory to winbuilder compAttr.r ## run compileAttributes() for a Rcpp package dratInstert.r 1.2-3.tar.gz -r /srv ## inserts package into drat repo install.r abc def ## installs packages abc and def install.r abc_1.2-3.tar.gz ## installs given tarball install2.r -l /tmp/lib abc def ## installs abc and def into /tmp/lib rcc.r abc_1.2-3.tar.gz ## run's R CMD check via Gabor's rcmdcheck render.r foo.Rmd ## calls rmarkdown::render() roxy.r ## run roxygenize() for a package (only Rd creation) update.r ## updates any currently installed packages ``` ### Installation #### Version 0.3.0 or later The package resides on the CRAN network and can be installed via ``` install.packages("littler") ``` Note that the package states `OS_type: unix`. It works great on all Linux variants, with a naming caveat on macOS (see below and the [FAQ vignettes](https://github.com/eddelbuettel/littler/blob/master/vignettes/littler-faq.md)) and not at all on Windows (but could be ported just like [RInside](https://github.com/eddelbuettel/rinside) has been--the two show architectural similarities). #### Previous Versions up to 0.2.3 In general, simply running the script `bootstrap` will configure and build the executable. Running `make install` (possibly as `sudo make install`) will install the resulting binary. On Linux systems, ensure you have the `autotools-dev` package (or its equivalent on non-Debian/Ubuntu systems). On OS X, you may need to run `brew install automake autoconf` to get all the tools. #### Alternate Naming On some operating systems such as OS X, `r` is not different from `R`. As this risks confusing the main binary `R` for the R system with our smaller scripting frontend `r`, we suggest to consider running `configure --program-prefix="l"` which this leads to installation of a binary `lr` instead of `r`. #### Alternate R Version As littler uses autoconf its `AC_PATH_PROG()` macro to find `R`, one can simply adjust the `PATH` when calling `configure` (or, rather, `bootstrap`) to have another version of R used. For example, on a server with R-devel in this location, the following builds littler using this R-devel version: `PATH="/usr/local/lib/R-devel/bin/:$PATH" ./bootstrap`. ### More Information For more information about littler, please see * [Dirk's littler page](https://dirk.eddelbuettel.com/code/littler.html) * [Dirk's page with littler examples](https://dirk.eddelbuettel.com/code/littler.examples.html) (but note that the latter now overlaps with the [example vignette](https://cran.r-project.org/package=littler/vignettes/littler-examples.html)). ### Authors Jeff Horner (2006 to 2008) and Dirk Eddelbuettel (since 2006) ### License GPL (>= 2) littler/man/0000755000176200001440000000000012751400225012502 5ustar liggesuserslittler/man/littler.Rd0000644000176200001440000000413312751376620014464 0ustar liggesusers\name{littler} \alias{littler} \title{Command-line and scripting front-end for R} \description{ The \code{r} \emph{binary} provides a convenient and powerful front-end. By embedding R, it permits four distinct ways to leverage the power of R at the shell prompt: scripting, filename execution, piping and direct expression evaluation. } \details{ The \code{r} front-end was written with four distinct usage modes in mind. First, it allow to write so-called \sQuote{shebang} scripts starting with \code{#!/usr/bin/env r}. These \sQuote{shebang} scripts are perfectly suited for automation and execution via e.g. via \code{cron}. Second, we can use \code{r somefile.R} to quickly execute the name R source file. This is useful as \code{r} is both easy to type---and quicker to start that either \code{R} itself, or its scripting tool \code{Rscript}, while still loading the \code{methods} package. Third, \code{r} can be used in \sQuote{pipes} which are very common in Unix. A simple and trivial example is \code{echo 'cat(2+2)' | r} illustrating that the standard output of one program can be used as the standard input of another program. Fourth, \code{r} can be used as a calculator by supplying expressions after the \code{-e} or \code{--eval} options. } \value{ Common with other shell tools and programs, \code{r} returns its exit code where a value of zero indicates success. } \note{ On OS X one may have to link the binary to, say, \code{lr} instead. As OS X insists that files named \code{R} and \code{r} are the same, we cannot use the latter. } \author{ Jeff Horner and Dirk Eddelbuettel wrote \code{littler} from 2006 to today, with contributions from several others. Dirk Eddelbuettel \email{edd@debian.org} is the maintainer. } \examples{ \dontrun{ #!/usr/bin/env r ## for use in scripts other input | r ## for use in pipes r somefile.R ## for running files r -e 'expr' ## for evaluating expressions r --help ## to show a quick synopsis } } \keyword{package} littler/man/r.Rd0000644000176200001440000000116112751400225013231 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/test.R \name{r} \alias{r} \title{Return Path to \code{r} Binary} \usage{ r(usecat = FALSE) } \arguments{ \item{usecat}{Optional toggle to request output to stdout (useful in Makefiles)} } \value{ The path is returned as character variable. If the \code{usecat} option is set the character variable is displayed via \code{\link{cat}} instead. } \description{ Return the path of the install \code{r} binary. } \details{ The test for Windows is of course superfluous as we have no binary for Windows. Maybe one day... } \author{ Dirk Eddelbuettel } littler/DESCRIPTION0000644000176200001440000000226314577647212013461 0ustar liggesusersPackage: littler Type: Package Title: R at the Command-Line via 'r' Version: 0.3.20 Date: 2024-03-23 Author: Dirk Eddelbuettel and Jeff Horner (2006-2008) Maintainer: Dirk Eddelbuettel Description: 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. URL: https://github.com/eddelbuettel/littler, https://dirk.eddelbuettel.com/code/littler.html, https://eddelbuettel.github.io/littler/ BugReports: https://github.com/eddelbuettel/littler/issues License: GPL (>= 2) OS_type: unix SystemRequirements: libR Suggests: simplermarkdown, docopt, rcmdcheck VignetteBuilder: simplermarkdown RoxygenNote: 5.0.1 NeedsCompilation: yes Packaged: 2024-03-23 18:27:34 UTC; edd Repository: CRAN Date/Publication: 2024-03-23 21:50:02 UTC littler/build/0000755000176200001440000000000014577617425013052 5ustar liggesuserslittler/build/vignette.rds0000644000176200001440000000033614577617425015413 0ustar liggesusersuA0EErd 5.6R"I MН'h `\3>Y 1F -v2-G&TEB0m偔VJ ɳC}l^%_(#gCpuB7Qz4ƄCV4$Q5݀O/["GS}Ip%-d*lj*V@q 0_Llittler/tests/0000755000176200001440000000000014077011474013100 5ustar liggesuserslittler/tests/simpleTests.R0000644000176200001440000000123414077011474015537 0ustar liggesusers ## These tests were suggested by a user on OS X (in 2015), and then ## promptly failed on OS X per CRAN -- so we now make this conditional ## on Linux where it is known to work ## ## Until it doesn't as it appears to (in 2020) fail on Travis CI if (unname(Sys.info()["sysname"]) == "Linux" && Sys.getenv("TRAVIS", "false") != "true" && Sys.getenv("CI", "false") != "true") { stopifnot(file.exists(littler:::r())) stopifnot(length(system2(littler:::r(), "--version", stdout=TRUE)) > 10) # 14 lines stopifnot(identical(littler:::test(), "4")) # default test is cat(2+2) stopifnot(as.numeric(littler:::test('cat(R.version$year)')) >= 2015) } littler/configure.ac0000644000176200001440000001337414577616224014245 0ustar liggesusers# -*- mode: Autoconf; tab-width: 4; -*- # Process this file with autoconf to produce a configure script. # require at least autoconf 2.69 AC_PREREQ([2.69]) # Every other copy of the package version number gets its value from here # The m4_esyscmd_s invocation is due to an excellent StackOverflow answer. # Sadly it breaks under Debian package builds (likely due to a missing component) AC_INIT([littler],[0.3.20],[edd@debian.org]) # Look for ancillary configure tools in tools dnl AC_CONFIG_AUX_DIR(tools) # Ensure R_HOME is set yet respect a previously set value : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then AC_MSG_ERROR([Could not determine R_HOME.]) fi RPROG=${R_HOME}/bin/R CC=`${RPROG} CMD config CC` AM_CFLAGS=`${RPROG} CMD config CFLAGS` AM_LDFLAGS=`${RPROG} CMD config LDFLAGS` dnl # Options for Automake dnl # dnl # no-texinfo.tex - obviously means don't include the big texinfo.tex file dnl # in the dist. dnl # foreign - treats our package as non-gnu, essentially excudluding strict dnl # checks for certain files like ChangeLog, NEWS, README, etc dnl # dnl AM_INIT_AUTOMAKE( no-texinfo.tex foreign ) # create a config.h file AC_CONFIG_HEADERS(src/config.h) AC_SUBST(VERSION) # commenting this out relieves us from requiring tools/ with all the scripts dnl AC_CANONICAL_HOST # Checks for programs. dnl AC_PROG_INSTALL AC_PROG_CC # Checks for libraries. # Checks for header files. dnl AC_CHECK_HEADERS( stdio.h string.h errno.h stdlib.h sys/types.h sys/stat.h unistd.h) AC_CHECK_HEADER([getopt.h], [AC_DEFINE([HAVE_GETOPT_H], 1, [Define to 1 if you have .])], [AC_MSG_ERROR([littler needs getopt support to run. Please find and install it.])]) AC_HEADER_MAJOR # Checks for library functions. AC_CHECK_FUNC(setenv,AC_DEFINE(HAVE_SETENV,1,[Define if you have the setenv function.])) AC_CHECK_FUNC(clock_gettime,AC_DEFINE(HAVE_CLOCK_GETTIME,1,[Define if you have clock_gettime.])) AC_CHECK_FUNC(realtime,AC_DEFINE(HAVE_REALTIME,1,[Define if you have realtime.])) AC_CHECK_FUNC(gettimeofday,AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define if you have the gettimeofday function.])) AC_CHECK_FUNC(time,AC_DEFINE(HAVE_TIME,1,[Define if you have the time function.])) # Checks for typedefs, structures, and compiler characteristics. # Test the R version for shared library AC_DEFUN([R_PROG],[ AC_MSG_CHECKING([if R was built as a shared library]) # Unset any user defined notion of R_HOME export R_HOME # First test if R was found if test "${RPROG}" = ""; then echo echo "R not found. Please update your PATH variable to include the R bin directory" echo AC_MSG_ERROR( aborting! ) fi # Now make sure that a well known include file exists # and the libR.so if ${RPROG} CMD config --ldflags 2>/dev/null | grep -v 'R was not built as a shared library' >/dev/null; then AM_CFLAGS="${AM_CFLAGS} `${RPROG} CMD config --cppflags`" AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config --ldflags`" # Now add the various libraries for linking AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config BLAS_LIBS | grep -v ERROR`" AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config LAPACK_LIBS | grep -v ERROR`" # are we on apple or not if test "$build_vendor" != "apple"; then RUN_NAMETOOL="" fi AC_MSG_RESULT([yes]) else echo echo "R was not built as a shared library" echo echo "Either build it with one, or use another install of R" echo AC_MSG_ERROR( aborting! ) fi ]) R_PROG ## Check for .git directory if test -d ".git/"; then GITREVISION=`git log --format=fuller | head -6 | awk '/^commit / {print substr($2,1,7)}'` GITDATE=`git log --format=fuller | head -6 | awk '/^CommitDate: / {print $2, $3, $4, $5, $6, $7}'` AC_DEFINE([VERBOSE_BUILD],[1],[Verbose build with git revision and date information]) else GITREVISION="" GITDATE="" fi # Now check if certain libraries should be linked in # Java AC_ARG_WITH([java-libs], [AS_HELP_STRING([--with-java-libs],[Link littler to R's java libraries])], [if test x$"$withval" != xno; then AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config JAVA_LIBS | grep -v ERROR`" fi], ) dnl # Tcl/TK dnl AC_ARG_WITH([tcltk-libs], dnl [AS_HELP_STRING([--with-tcltk-libs],[dnl Link littler to R's tcltk libraries])], dnl [ dnl if test x$"$withval" != xno; then dnl AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config TCLTK_LIBS | grep -v ERROR`" dnl fi dnl ], dnl ) dnl # R version check dnl # Note that this may fail really old versions of R as the string wasn't always "R version x.y.z ..." dnl r_version=`${RPROG} --version | head -1 | cut -f3 -d" " ` dnl case ${r_version} in dnl 1.*.*|2.0.*|2.1.*|2.2.*|2.3.0) dnl AC_MSG_ERROR([R version ${r_version} is too old. Please upgrade to a more recent version.]) dnl ;; dnl esac #AC_MSG_RESULT([AM_LDFLAGS is now: ${AM_LDFLAGS}]) # get other linker flags for rpath EXTRA_LDFLAGS=`${RPROG} --silent --vanilla --slave --file=src/scripts/ldflags.R` #AC_MSG_RESULT([EXTRA_LDFLAGS is now: ${EXTRA_LDFLAGS}]) #AM_LDFLAGS="${AM_LDFLAGS} ${EXTRA_LDFLAGS}" #AC_MSG_RESULT([AM_LDFLAGS is now: ${AM_LDFLAGS}]) # Are we building for Mac OS X? this program will exist if so. AC_PATH_PROG(NAMETOOL, install_name_tool) AC_DEFUN([NAMETOOL_FUN],[ if test "${NAMETOOL}" != ""; then RUN_NAMETOOL="${NAMETOOL} -change libR.dylib `${RPROG} RHOME`/lib/libR.dylib r" fi ]) NAMETOOL_FUN AC_SUBST(RPROG) AC_SUBST(CC) AC_SUBST(AM_CFLAGS) AC_SUBST(AM_LDFLAGS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(RUN_NAMETOOL) AC_SUBST(GITREVISION) AC_SUBST(GITDATE) AC_CONFIG_FILES([src/Makevars src/gitversion.h]) AC_OUTPUT littler/src/0000755000176200001440000000000014577617426012543 5ustar liggesuserslittler/src/littler.c0000644000176200001440000006204714573456172014372 0ustar liggesusers/* * littler - Provides hash-bang (#!) capability for R (www.r-project.org) * * Copyright (C) 2006 - 2024 Jeffrey Horner and Dirk Eddelbuettel * * littler is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include "config.h" /*#include "config-const.h"*/ #include "gitversion.h" #include "autoloads.h" #include "littler.h" #include #include #include #include #define R_INTERFACE_PTRS #include #include #include int verbose = 0; /* should we be verbose? default no, use -p */ /* PACKAGE, VERSION, ... are being filled by autoconf and friends via config.h */ const char *programName = PACKAGE_NAME; const char *binaryName = "r"; #ifndef HAVE_SETENV int setenv(char *name, char *value, int clobber){ char *cp; if (clobber == 0 && getenv(name) != 0) return (0); if ((cp = malloc(strlen(name) + strlen(value) + 2)) == 0) return (1); sprintf(cp, "%s=%s", name, value); return (putenv(cp)); } #endif int source(char *file){ SEXP expr, s, f, p; int errorOccurred; /* Find source function */ s = Rf_findFun(Rf_install("source"), R_GlobalEnv); PROTECT(s); /* Make file argument */ PROTECT(f = NEW_CHARACTER(1)); SET_STRING_ELT(f, 0, COPY_TO_USER_STRING(file)); /* Make print.eval argument */ PROTECT(p = NEW_LOGICAL(1)); LOGICAL_DATA(p)[0] = (verbose)? TRUE : FALSE; /* expression source(f,print.eval=p) */ PROTECT(expr = allocVector(LANGSXP,3)); SETCAR(expr,s); SETCAR(CDR(expr),f); SETCAR(CDR(CDR(expr)), p); SET_TAG(CDR(CDR(expr)), Rf_install("print.eval")); errorOccurred=0; R_tryEval(expr,NULL,&errorOccurred); UNPROTECT(4); return errorOccurred; } /* Autoload default packages and names from autoloads.h * * This function behaves in almost every way like * R's autoload: * function (name, package, reset = FALSE, ...) * { * if (!reset && exists(name, envir = .GlobalEnv, inherits = FALSE)) * stop("an object with that name already exists") * m <- match.call() * m[[1]] <- as.name("list") * newcall <- eval(m, parent.frame()) * newcall <- as.call(c(as.name("autoloader"), newcall)) * newcall$reset <- NULL * if (is.na(match(package, .Autoloaded))) * assign(".Autoloaded", c(package, .Autoloaded), env = .AutoloadEnv) * do.call("delayedAssign", list(name, newcall, .GlobalEnv, * .AutoloadEnv)) * invisible() * } * * What's missing is the updating of the string vector .Autoloaded with the list * of packages, which by my code analysis is useless and only for informational * purposes. * */ void autoloads(void){ SEXP da, dacall, al, alcall, AutoloadEnv, name, package; int i,j, idx=0, errorOccurred, ptct; /* delayedAssign call*/ PROTECT(da = Rf_findFun(Rf_install("delayedAssign"), R_GlobalEnv)); PROTECT(AutoloadEnv = Rf_findVar(Rf_install(".AutoloadEnv"), R_GlobalEnv)); if (AutoloadEnv == R_NilValue){ fprintf(stderr,"%s: Cannot find .AutoloadEnv!\n", programName); exit(1); } PROTECT(dacall = allocVector(LANGSXP,5)); SETCAR(dacall,da); /* SETCAR(CDR(dacall),name); */ /* arg1: assigned in loop */ /* SETCAR(CDR(CDR(dacall)),alcall); */ /* arg2: assigned in loop */ SETCAR(CDR(CDR(CDR(dacall))),R_GlobalEnv); /* arg3 */ SETCAR(CDR(CDR(CDR(CDR(dacall)))),AutoloadEnv); /* arg3 */ /* autoloader call */ PROTECT(al = Rf_findFun(Rf_install("autoloader"), R_GlobalEnv)); PROTECT(alcall = allocVector(LANGSXP,3)); SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */ SETCAR(alcall,al); /* SETCAR(CDR(alcall),name); */ /* arg1: assigned in loop */ /* SETCAR(CDR(CDR(alcall)),package); */ /* arg2: assigned in loop */ ptct = 5; for(i = 0; i < packc; i++){ idx += (i != 0)? packobjc[i-1] : 0; for (j = 0; j < packobjc[i]; j++){ /*printf("autload(%s,%s)\n",packobj[idx+j],pack[i]);*/ PROTECT(name = NEW_CHARACTER(1)); PROTECT(package = NEW_CHARACTER(1)); SET_STRING_ELT(name, 0, COPY_TO_USER_STRING(packobj[idx+j])); SET_STRING_ELT(package, 0, COPY_TO_USER_STRING(pack[i])); /* Set up autoloader call */ PROTECT(alcall = allocVector(LANGSXP,3)); SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */ SETCAR(alcall,al); SETCAR(CDR(alcall),name); SETCAR(CDR(CDR(alcall)),package); /* Setup delayedAssign call */ SETCAR(CDR(dacall),name); SETCAR(CDR(CDR(dacall)),alcall); R_tryEval(dacall,R_GlobalEnv,&errorOccurred); if (errorOccurred){ fprintf(stderr,"%s: Error calling delayedAssign!\n", programName); exit(1); } ptct += 3; } } UNPROTECT(ptct); } /* Line reading code */ typedef struct membuf_st { int size; int count; unsigned char *buf; } *membuf_t; membuf_t init_membuf(int sizebytes){ membuf_t lb = malloc(sizebytes+sizeof(struct membuf_st)); if (lb == NULL) { fprintf(stderr,"%s: init_membuf() failed! Exiting!!!\n\n", programName); exit(1); return NULL; /* unreached */ } lb->size = sizebytes; lb->count = 0; lb->buf = (unsigned char *)lb+sizeof(struct membuf_st); return lb; } void destroy_membuf(membuf_t lb){ free(lb); } /* Use power of 2 resizing */ membuf_t resize_membuf(membuf_t *plb){ membuf_t lb = *plb; lb = *plb = realloc(lb,lb->size*2+sizeof(struct membuf_st)); if (lb == NULL) { fprintf(stderr,"%s: init_membuf() failed! Exiting!!!\n\n", programName); exit(1); return NULL; /* unreached */ } lb->size = lb->size * 2; lb->buf = (unsigned char *)lb+sizeof(struct membuf_st); return lb; } membuf_t rewind_membuf(membuf_t *mb){ (*mb)->count = 0; return *mb; } membuf_t add_to_membuf(membuf_t *pmb,char *buf){ membuf_t mb = *pmb; int buflen = strlen(buf); while ((buflen + (mb->count)) >= mb->size){ mb = *pmb = resize_membuf(pmb); } memcpy(mb->buf+mb->count,buf,buflen); mb->buf[mb->count+buflen] = '\0'; mb->count += buflen; return mb; } /* returns 1 on reading another line or until EOF, 0 on EOF */ int readline_stdin(membuf_t *plb){ membuf_t lb = *plb; unsigned int offset=0; char *str; do { lb->buf[lb->size-2] = '\0'; /* mark last char position */ str = fgets((char*)lb->buf+offset,lb->size-offset,stdin); /* EOF or error */ if (str == NULL){ return (offset)? 1 : 0; } /* Did we read a whole line? */ if (lb->buf[lb->size-2] != '\0' && lb->buf[lb->size-2] != '\n'){ /* No. read again. */ offset = lb->size-1; lb = *plb = resize_membuf(plb); } else { /* Yes. return */ return 1; } } while(1); } int parse_eval(membuf_t *pmb, char *line, int lineno, int localverbose){ membuf_t mb = *pmb; ParseStatus status; SEXP cmdSexp, cmdexpr, ans = R_NilValue; int i, errorOccurred; mb = *pmb = add_to_membuf(pmb,line); PROTECT(cmdSexp = allocVector(STRSXP, 1)); SET_STRING_ELT(cmdSexp, 0, mkChar((char*)mb->buf)); /* R_ParseVector gets a new argument in R 2.5.x */ cmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue)); switch (status){ case PARSE_OK: /* Loop is needed here as EXPSEXP might be of length > 1 */ for(i = 0; i < length(cmdexpr); i++){ ans = R_tryEval(VECTOR_ELT(cmdexpr, i),NULL, &errorOccurred); if (errorOccurred) { UNPROTECT(2); return 1; } if (localverbose) { PrintValue(ans); } } mb = *pmb = rewind_membuf(pmb); break; case PARSE_INCOMPLETE: fprintf(stderr, "%s: Incomplete Line! Need more code! (%d)\n", programName, status); UNPROTECT(2); return 1; break; case PARSE_NULL: fprintf(stderr, "%s: ParseStatus is null (%d)\n", programName, status); UNPROTECT(2); return 1; break; case PARSE_ERROR: fprintf(stderr,"Parse Error line %d: \"%s\"\n", lineno, line); UNPROTECT(2); return 1; break; case PARSE_EOF: fprintf(stderr, "%s: EOF reached (%d)\n", programName, status); break; default: fprintf(stderr, "%s: ParseStatus is not documented %d\n", programName, status); UNPROTECT(2); return 1; break; } UNPROTECT(2); return 0; } extern char *R_TempDir; int perSessionTempDir = FALSE; /* by default, r differs from R and defaults to /tmp unless env.vars set, or flag chosen */ void littler_InitTempDir(void) { char *tmp; if (perSessionTempDir) return; /* use a per-session temporary directory by following R */ tmp = getenv("TMPDIR"); /* set tmp to TMPDIR, or TMP, or TEMP, or "/tmp" */ if (tmp == NULL) { tmp = getenv("TMP"); if (tmp == NULL) { tmp = getenv("TEMP"); if (tmp == NULL) tmp = "/tmp"; } } R_TempDir=tmp; if (setenv("R_SESSION_TMPDIR",tmp,1) != 0){ perror("Fatal Error: couldn't set/replace R_SESSION_TMPDIR!"); exit(1); } } /* littler exit */ void littler_CleanUp(SA_TYPE saveact, int status, int runLast){ R_dot_Last(); R_RunExitFinalizers(); if (perSessionTempDir) R_CleanTempDir(); fpu_setup(FALSE); Rf_endEmbeddedR(0); exit(status); } void showHelpAndExit(void) { printf("\n" "Usage: %s [options] [-|file]" "\n\n" "Launch GNU R to execute the R commands supplied in the specified file, or\n" "from stdin if '-' is used. Suitable for so-called shebang '#!/'-line scripts.\n" "\n" "Options:\n" " -h, --help Give this help list\n" " --usage Give a short usage message\n" " -V, --version Show the version number\n" " -v, --vanilla Pass the '--vanilla' option to R\n" " -t, --rtemp Use per-session temporary directory as R does\n" " -i, --interactive Let interactive() return 'true' rather than 'false'\n" " -q, --quick Skip autoload / delayed assign of default libraries\n" " -p, --verbose Print the value of expressions to the console\n" " -l, --packages list Load the R packages from the comma-separated 'list'\n" " -d, --datastdin Prepend command to load 'X' as csv from stdin\n" " -L, --libpath dir Add directory to library path via '.libPaths(dir)'\n" " -e, --eval expr Let R evaluate 'expr'\n" "\n\n", binaryName); exit(-1); } void showVersionAndExit(void) { char txt[64]; printf("%s ('%s') version %s\n", binaryName, programName, PACKAGE_VERSION); #if defined(VERBOSE_BUILD) printf("\ngit revision %s as of %s\n", gitrevision, gitdate); printf("built at %s on %s\n", compiletime, compiledate); #endif printf("\nusing GNU R "); snprintf(txt, 63, "%d", R_SVN_REVISION); if (strcmp(txt, "unknown")==0) { printf("Version %s.%s %s (%s-%s-%s)", R_MAJOR, R_MINOR, R_STATUS, R_YEAR, R_MONTH, R_DAY); } else { if (strlen(R_STATUS)==0) { printf("Version %s.%s (%s-%s-%s)", R_MAJOR, R_MINOR, R_YEAR, R_MONTH, R_DAY); } else{ printf("Version %s.%s %s (%s-%s-%s r%d)", R_MAJOR, R_MINOR, R_STATUS, R_YEAR, R_MONTH, R_DAY, R_SVN_REVISION); } } printf("\n\nCopyright (C) 2006 - 2021 Jeffrey Horner and Dirk Eddelbuettel\n" "\n" "%s is free software and comes with ABSOLUTELY NO WARRANTY.\n" "You are welcome to redistribute it under the terms of the\n" "GNU General Public License. For more information about\n" "these matters, see http://www.gnu.org/copyleft/gpl.html.\n\n", binaryName); exit(0); } void showUsageAndExit(void) { printf("\n" "%s (aka '%s') can be used in four main modes.\n\n" "The first is via the so-called 'shebang' support it provides for GNU R.\n" "Suppose '%s' is installed in /usr/local/bin/%s. Then the first line of a\n" "script can be written as \"#!/usr/local/bin/%s\" and the rest of the file\n" "can contain standard R commands. By setting executable permissions\n" "on the file, one can now create executable R scripts.\n\n" "The second is to supply a filename with commands that are to be\n" "evaluated.\n\n" "The third use is in standard compound command-line expressions common\n" "under Unix (so called 'command pipes') as '%s' can take arguments\n" "from stdin if the special filename '-' is used to select stdin.\n\n" "The fourth use is in on-the-fly evaluation of R expressions supplied\n" "via the -e or --eval options to provide a quick R expression tester\n" "and calculator.\n\n" "You can provide configuration via file ${R_HOME}/etc/Rprofile.site,\n" "~/.Rprofile, /etc/littler.r or ~/.littler.r all of which are sourced\n" "if present.\n\n" "More documentation is provided in the '%s' manual page and via the\n" "tests directory in the sources.\n\n" "A number of examples are also available at\n" "http://dirk.eddelbuettel.com/code/littler.examples.html.\n\n", binaryName, programName, binaryName, binaryName, binaryName, programName, binaryName); exit(0); } /* set seed for tempfile() updated to R 4.1.0 src/main/times.c and its helper function TimeToSeed() */ void init_rand(void) { unsigned int seed, pid = getpid(); #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) { struct timespec tp; clock_gettime(CLOCK_REALTIME, &tp); seed = (unsigned int)(((uint_least64_t) tp.tv_nsec << 16) ^ tp.tv_sec); } #elif defined(HAVE_GETTIMEOFDAY) { struct timeval tv; gettimeofday (&tv, NULL); seed = (unsigned int)(((uint_least64_t) tv.tv_usec << 16) ^ tv.tv_sec); } #else /* C89, so must work */ seed = (Int32) time(NULL); #endif seed ^= (pid <<16); srand(seed); /* also called by R in src/main/main.c */ } int main(int argc, char **argv){ /* R embedded arguments, and optional arguments to be picked via cmdline switches */ char *R_argv[] = {(char*)programName, "--gui=none", "--no-restore", "--no-save", "--no-readline", "--silent", "", ""}; char *R_argv_opt[] = {"--vanilla", "--slave"}; int R_argc = (sizeof(R_argv) - sizeof(R_argv_opt) ) / sizeof(R_argv[0]); int i, nargv, c, optpos=0, vanilla=0, quick=0, interactive=0, datastdin=0; char *evalstr = NULL; char *libstr = NULL; char *libpathstr = NULL; SEXP s_argv; structRstart Rst; char *datastdincmd = "X <- read.csv(file(\"stdin\"), stringsAsFactors=FALSE);"; static struct option optargs[] = { {"help", no_argument, NULL, 'h'}, {"usage", no_argument, 0, 0}, {"version", no_argument, NULL, 'V'}, {"vanilla", no_argument, NULL, 'v'}, {"eval", required_argument, NULL, 'e'}, {"packages", required_argument, NULL, 'l'}, {"verbose", no_argument, NULL, 'p'}, {"rtemp", no_argument, NULL, 't'}, {"quick", no_argument, NULL, 'q'}, {"interactive", no_argument, NULL, 'i'}, {"datastdin", no_argument, NULL, 'd'}, {"libpath", required_argument, NULL, 'L'}, {0, 0, 0, 0} }; while ((c = getopt_long(argc, argv, "+hVve:npl:L:tqid", optargs, &optpos)) != -1) { switch (c) { case 0: /* numeric 0 is code for a long option */ /* printf ("Got option %s %d", optargs[optpos].name, optpos);*/ switch (optpos) { /* so switch on the position in the optargs struct */ /* cases 0, 2, and 3 can't happen as they are covered by the '-h', */ /* '-V', and '-v' equivalences */ case 1: showUsageAndExit(); break; /* never reached */ case 5: verbose = 1; break; default: printf("Uncovered option position '%d'. Try `%s --help' for help\n", optpos, programName); exit(-1); } break; case 'h': /* -h is the sole short option, cf getopt_long() call */ showHelpAndExit(); break; /* never reached */ case 'e': evalstr = optarg; break; case 'l': libstr = optarg; break; case 'v': vanilla=1; break; case 'p': verbose=1; break; case 'V': showVersionAndExit(); break; /* never reached */ case 't': perSessionTempDir=TRUE; break; case 'q': quick=1; break; case 'i': interactive=1; break; case 'd': datastdin=1; break; case 'L': libpathstr = optarg; break; default: printf("Unknown option '%c'. Try `%s --help' for help\n",(char)c, programName); exit(-1); } } if (vanilla) { R_argv[R_argc++] = R_argv_opt[0]; } if (!verbose) { R_argv[R_argc++] = R_argv_opt[1]; } #ifdef DEBUG printf("R_argc %d sizeof(R_argv) \n", R_argc, sizeof(R_argv)); for (i=0; i<7; i++) { printf("R_argv[%d] = %s\n", i, R_argv[i]); } printf("optind %d, argc %d\n", optind, argc); for (i=0; i= 1) { int offset = (evalstr==NULL) + (strcmp(argv[optind],"-") == 0); /* Build string vector */ nargv = argc - optind - offset; PROTECT(s_argv = allocVector(STRSXP,nargv)); for (i = 0; i buf, lineno++, verbose); if (exit_val) break; } destroy_membuf(lb); destroy_membuf(pb); } littler_CleanUp(SA_NOSAVE, exit_val, 0); return(0); /* not reached, but making -Wall happy */ } littler/src/config-const.h0000644000176200001440000000015412613230464015263 0ustar liggesusers /* Name of package */ #define PACKAGE "littler" /* Version number of package */ #define VERSION "0.2.9.1" littler/src/config.h.in0000644000176200001440000000401014222121266014534 0ustar liggesusers/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define if you have clock_gettime. */ #undef HAVE_CLOCK_GETTIME /* Define if you have realtime. */ #undef HAVE_CLOCK_REALTIME /* Define to 1 if you have . */ #undef HAVE_GETOPT_H /* Define if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have the setenv function. */ #undef HAVE_SETENV /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the time function. */ #undef HAVE_TIME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_MKDEV /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_SYSMACROS /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Verbose build with git revision and date information */ #undef VERBOSE_BUILD littler/src/gitversion.h.in0000644000176200001440000000065312614246414015477 0ustar liggesusers /* * gitrevision and gitdate are as reported by git at that point in time, * compiledate and compiletime are being filled gcc at compilation * * verbose_build gets set along with them * */ #if defined(VERBOSE_BUILD) static const char* gitrevision = "@GITREVISION@"; static const char* gitdate = "@GITDATE@"; static const char* compiletime = __TIME__; static const char* compiledate = __DATE__; #endif littler/src/Makevars.in0000644000176200001440000000212414573433440014627 0ustar liggesusers## -*- mode: Makefile; tab-width: 8 -*- ## ## Makevars.in for littler ## Based on older Makefile.am ## ## Copyright (C) 2006 - 2016 Jeffrey Horner and Dirk Eddelbuettel, GNU GPL'ed RPROG=@RPROG@ ROPTS = --silent --vanilla --slave CC=@CC@ PKG_CFLAGS=@AM_CFLAGS@ PKG_LDFLAGS=@AM_LDFLAGS@ @EXTRA_LDFLAGS@ RUN_NAMETOOL=@RUN_NAMETOOL@ SRCS = littler.c TGT = r$(EXEEXT) # By setting OBJECTS to "" we avoid having littler.so built OBJECTS= all: $(SHLIB) $(TGT) prog: littler.c # Main r build rule, with suitable extension where needed (as eg on OS X) $(TGT): $(SRCS) @$(RPROG) $(ROPTS) --file=scripts/autoloads.R > autoloads.h @$(RPROG) $(ROPTS) --file=scripts/littler.R > littler.h $(CC) -o $(TGT) $(PKG_CFLAGS) $(SRCS) $(PKG_LDFLAGS) $(RUN_NAMETOOL) @mkdir -p ../inst/bin$(R_ARCH) @cp -a $(TGT) ../inst/bin$(R_ARCH) @echo "*" @echo "* new binary $(TGT) installed in bin$(R_ARCH)/ subdirectory" @echo "* consider adding a symbolic link from, e.g., /usr/local/bin" @echo "* on OS X, you may have to name this 'lr' instead" @echo "* see the littler-faq vignette for more details" @echo "*" littler/src/scripts/0000755000176200001440000000000013050665612014213 5ustar liggesuserslittler/src/scripts/autoloads.R0000644000176200001440000000313512674112053016330 0ustar liggesusers## ## littler - Provides hash-bang (#!) capability for R (www.r-project.org) ## ## Copyright (C) 2006 - 2016 Jeffrey Horner and Dirk Eddelbuettel ## ## littler is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## dp <- getOption("defaultPackages") #dp <- dp[dp != 'datasets'] ## Rscript loads it too #dp <- dp[dp != 'methods'] ## Rscript (in R 2.6.1) doesn't load methods either # Count of default packages cat("int packc = ",length(dp),";\n",sep='') # List of packages cat("const char *pack[] = {\n",paste('"',dp,'"',sep='',collapse=",\n"),"\n};\n") packobjc <- array(0,dim=length(dp)) packobj <- NULL for (i in 1:length(dp)){ obj = ls(paste("package:",dp[i],sep='')) packobjc[i] = length(obj) packobj = c(packobj,obj) } # List of counts of objects per package cat("int packobjc[] = {\n",paste(packobjc,sep='',collapse=",\n"),"\n};\n") # List of object names cat("const char *packobj[] = {\n",paste('"',packobj,'"',sep='',collapse=",\n"),"\n};\n") littler/src/scripts/littler.R0000644000176200001440000000245513050665612016023 0ustar liggesusers## ## littler - Provides hash-bang (#!) capability for R (www.r-project.org) ## ## Copyright (C) 2006 - 2017 Jeffrey Horner and Dirk Eddelbuettel ## ## littler is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## ExcludeVars <- c("R_SESSION_TMPDIR", "R_HISTFILE", "R_LIBS_USER", "R_LIBRARY_DIR", "R_LIBS", "R_PACKAGE_DIR", "R_USER") IncludeVars <- Sys.getenv() IncludeVars <- IncludeVars[grep("^R_", names(IncludeVars), perl=TRUE)] cat("const char *R_VARS[] = {\n") for (i in 1:length(IncludeVars)){ if (names(IncludeVars)[i] %in% ExcludeVars) next cat('"',names(IncludeVars)[i], '","', IncludeVars[i], '",\n', sep='') } cat("NULL };\n") littler/src/scripts/ldflags.R0000644000176200001440000000207012674112053015746 0ustar liggesusers## ## littler - Provides hash-bang (#!) capability for R (www.r-project.org) ## ## Copyright (C) 2006 - 2016 Jeffrey Horner and Dirk Eddelbuettel ## ## littler is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## s <- Sys.info() if (is.null(s)) q() if (s[1] != "Linux") q() ldp <- strsplit(Sys.getenv('LD_LIBRARY_PATH'),':')[[1]] ldp <- ldp[which(ldp != "")] cat(paste(paste0('-Wl,-rpath,', ldp), collapse=" "), "\n") littler/vignettes/0000755000176200001440000000000014577617425013763 5ustar liggesuserslittler/vignettes/littler-examples.md0000644000176200001440000003054014136370627017571 0ustar liggesusers --- title: "Littler Examples" author: "Dirk Eddelbuettel" date: "Originally written 2015-10-28; Updated 2017-12-10, 2018-05-24, 2019-01-06, 2019-06-09 and 2020-06-16" css: "water.css" --- ## Overview We show and discuss a few of the files included in the `inst/examples/` source directory of [littler](http://dirk.eddelbuettel.com/code/littler.html) (which becomes the `examples/` directory once installed). In a few cases we remove comment lines to keep things more concise on this page. We use `$` to denote a shell (_i.e._ terminal) prompt. Note that some systems (such as macOS) cannot install littler as `r` (as lower-case and upper-case are by default the same; not a great idea). And for example the `zsh` has `r` as a builtin so you would have to use `/usr/bin/r`. See the [littler FAQ](littler-faq.html) for more. ## Simple Direct Command-line Use [littler](http://dirk.eddelbuettel.com/code/littler.html) can be used directly on the command-line just like, say, `bc`, easily consuming standard input from a pipe: ```bash $ echo 'cat(pi^2,"\n")' | r 9.869604 ``` Equivalently, commands that are to be evaluated can be given on the command-line ```bash $ r -e 'cat(pi^2, "\n")' 9.869604 ``` But unlike bc(1), GNU R has a vast number of statistical functions. For example, we can quickly compute a `summary()` and show a stem-and-leaf plot for file sizes in a given directory via ```bash $ ls -l /boot | awk 'BEGIN {print "size"} !/^total/ {print $5}' | \ r -de "print(summary(X[,1])); stem(X[,1])" ``` which produces something like ``` Min. 1st Qu. Median Mean 3rd Qu. Max. 13 512 110100 486900 768400 4735000 The decimal point is 6 digit(s) to the right of the | 0 | 0000001122222279222 2 | 79444 4 | 71888 6 | 8 | 10 | 12 | 14 | 8 16 | 4 18 | 20 | 333 ``` (Note that some systems may not have `/boot` in which case you can try `/sbin` or another directory.) As we saw in the preceding example, the program can also be shortened like using the new `-d` option which reads from stdin and assigns to a `data.frame` named `X`. And, last but not least, this (somewhat unwieldy) expression can be stored in a helper script (where we now switch to using an explicit `readLines()` on `stdin`): ```r #!/usr/bin/env r fsizes <- as.integer(readLines(file("stdin"))) print(summary(fsizes)) stem(fsizes) ``` (where calling `#!/usr/bin/env` is a trick from Python which allows one to forget whether r is installed in `/usr/bin/r`, `/usr/local/bin/r`, `~/bin/r`, ...). ## install.r: Direct CRAN Installation This is one of my favourite [littler](http://dirk.eddelbuettel.com/code/littler.html) scripts which I use frequently to install packages off [CRAN](https://cran.r-project.org). ```r #!/usr/bin/env r if (is.null(argv) | length(argv)<1) { cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n") q() } ## adjust as necessary, see help('download.packages') repos <- "https://cran.rstudio.com" ## this makes sense on Debian where no packages touch /usr/local lib.loc <- "/usr/local/lib/R/site-library" install.packages(argv, lib.loc, repos) ``` I invoke it all the time with one, two or more packages to install (or reinstall). ```bash $ install.r digest RcppCNPy ``` It conveniently installs all dependencies, and uses the chosen target directory, all while keeping my R prompt (or prompts with multiple sessions) free to do other things. Also, if used with `options("Ncpu")` set, then (remote CRAN) packages will be installed in parallel. ## install2.r: With Cmdline Parsing Thanks to the fabulous [docopt](https://github.com/edwindj/docopt.R) package, we also have a variant `install2.r` with optional settings of repo and location. It was first installed with [littler 0.2.1](http://dirk.eddelbuettel.com/blog/2014/10/19/). The current (_i.e._, 0.3.3 as of this writing) version is more featureful and longer and included to keep this brief. Some usage examples are ```sh $ install2.r -l /tmp/lib Rcpp BH # install into given library $ install2.r -- --with-keep.source drat # keep the source $ install2.r -- --data-compress=bzip2 stringdist # prefer bz2 compression ``` Another _very_ useful option is `-n N` or `--ncpus N` which will parallelize the installation across `N` processes. This can be set automagically by setting `options("Ncpus")`. ### Installing From Sources Starting with version 0.2.2, `install.r` and `install2.r` now recognise installable source files. So one can also do this: ```bash $ install.r digest_0.6.8.tar.gz ``` and the local source file will the installed via a call to `R CMD INSTALL`. ## check.r: Simple Checker A related use case is to check packages via `check.r`. This script runs `R CMD check`, but also installs package dependencies first as tests may have dependencies not yet satisfied on the test machine. It offers a number of options: ```bash $ check.r -h Usage: check.r [-h] [-x] [--as-cran] [--repo REPO] [--install-deps] [--install-kitchen] [--deb-pkgs PKGS...] [--use-sudo] [--library LIB] [--setwd DIR] [TARGZ ...] -a --as-cran customization similar to CRAN's incoming [default: FALSE] -r --repo REPO repository to use, or NULL for file [default: https://cran.rstudio.com] -i --install-deps also install packages along with their dependencies [default: FALSE] -k --install-kitchen even install packages 'kitchen sink'-style up to suggests [default: FALSE] -l --library LIB when installing use this library [default: /usr/local/lib/R/site-library] -s --setwd DIR change to this directoru before undertaking the test [default: ] -d --deb-pkgs PKGS also install binary .deb packages with their dependencies [default: FALSE] -u --use-sudo use sudo when installing .deb packages [default: TRUE] -h --help show this help text -x --usage show help and short example usage $ ``` ## rcc.r: R CMD check wrapper The script `rcc.r` will also check a source tarball, and offers another set of options: ```bash $ rcc.r -h Usage: rcc.r [-h] [-x] [-c] [-f] [-q] [--args ARGS] [--libpath LIBP] [--repos REPO] [PATH...] -c --as-cran should '--as-cran' be added to ARGS [default: FALSE] -a --args ARGS additional arguments to be passed to 'R CMD CHECK' [default: ] -l --libpath LIBP additional library path to be used by 'R CMD CHECK' [default: ] -r --repos REPO additional repositories to be used by 'R CMD CHECK' [default: ] -f --fast should vignettes and manuals be skipped [default: FALSE] -q --quiet should 'rcmdcheck' be called qietly [default: FALSE] -h --help show this help text -x --usage show help and short example usage $ ``` ## build.r: Building Packages A related script is `build.r` which I often use inside a source repository to quickly build a source tarball. Like `rcc.r`, it has a switch `-f` or `--fast` to omit building of vignettes. ```bash $ build.r # without argument works on current directory $ build.r digest/ # with directory argument builds tar.gz from repo in directory ``` ## installGithub.r: GitHub install Installation directly from [GitHub](https://github.com) is also popular. Here is an example: ```bash $ installGithub.r RcppCore/RcppEigen ``` Installing from github is supported via the following helper script: ```r #!/usr/bin/env r # # A simple example to install one or more packages from GitHub # # Copyright (C) 2014 - 2015 Carl Boettiger and Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages(library(docopt)) # we need docopt (>= 0.3) as on CRAN suppressMessages(library(remotes)) # can use devtools as a fallback ## configuration for docopt doc <- "Usage: installGithub.r [-h] [-d DEPS] REPOS... -d --deps DEPS Install suggested dependencies as well? [default: NA] -h --help show this help text where REPOS... is one or more GitHub repositories. Examples: installGithub.r RcppCore/RcppEigen installGithub.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information. " ## docopt parsing opt <- docopt(doc) if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } invisible(sapply(opt$REPOS, function(r) install_github(r, dependencies = opt$deps))) ``` ## update.r: CRAN package update One of the scripts I use the most (interactively) is `update.r` which updates installed packages. An earlier version looked like the following example, the current version is a little longer and has more features: ```r #!/usr/bin/env r # # a simple example to update packages in /usr/local/lib/R/site-library # parameters are easily adjustable ## adjust as necessary, see help('download.packages') repos <- "https://cloud.r-project.org" ## this makes sense on Debian where no package touch /usr/local lib.loc <- "/usr/local/lib/R/site-library" ## r use requires non-interactive use update.packages(repos=repos, ask=FALSE, lib.loc=lib.loc) ``` As above, it has my preferred mirror and library location hard-wired. Another _very_ useful option is `-n N` or `--ncpus N` which will parallelize the upgrade across `N` processes. This can be set automagically by setting `options(Ncpus)`. ## knit.r: Calling knitr Here is another convenience script, `knit.r`, which _knits_ a given file after testing the file actually exists. ```r #!/usr/bin/r # # Simple helper script for knitr # # Dirk Eddelbuettel, May 2013 # # GPL-2 or later if (is.null(argv)) { cat("Need an argument FILE.Rnw\n") q(status=-1) } file <- argv[1] if (!file.exists(file)) { cat("File not found: ", file, "\n") q(status=-1) } require(knitr) knit2pdf(file) ``` ## roxy.r: Running roxygen Similar to the previous example, the script `roxy.r` one uses roxygen to extract documentation from R files -- either in the current directory, or in the given directory or directories. ```r #!/usr/bin/r # # Simple helper script for roxygen2::roxygenize() # # Dirk Eddelbuettel, August 2013 # # GPL-2 or later ## load roxygen library(roxygen2) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call compileAttributes() on the given directory sapply(ifelse(length(argv) > 0, argv, "."), FUN=roxygenize, roclets="rd") ``` ## compAttr.r: Compiling Attributes The next script, `compAttr.`, can be used with [Rcpp](http://dirk.eddelbuettel.com/code/rcpp.html), and particularly is powerful _Attributes_ feature, in order to auto-generate helper code. It is similar to the preceding script, but invokes `compileAttributes()` instead. ```r #!/usr/bin/r # # Simple helper script for compileAttributes() # # Dirk Eddelbuettel, July 2014 # # GPL-2 or later ## load Rcpp suppressMessages(library(Rcpp)) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call compileAttributes() on the given directory sapply(ifelse(length(argv) > 0, argv, "."), compileAttributes) ``` ## render.r: Render Markdown The `render.r` script generalizes the earlier `knit.r` to convert Markdown into its designated output. ```r #!/usr/bin/env r # # Another example to run a shiny app # # Copyright (C) 2016 Dirk Eddelbuettel # # Released under GPL (>= 2) suppressMessages(library(docopt)) # we need docopt (>= 0.3) as on CRAN ## configuration for docopt doc <- "Usage: render.r [-h] [-x] [FILES...] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: render.r foo.Rmd bar.Rmd # convert two given files render.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } library(rmarkdown) ## helper function renderArg <- function(p) { if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE) render(p) } ## render files using helper function sapply(opt$FILES, renderArg) ``` littler/vignettes/littler-faq.md0000644000176200001440000000714014136370627016522 0ustar liggesusers --- title: "Littler FAQ" author: "Dirk Eddelbuettel" date: "2019-03-23, updated 2020-06-16" css: "water.css" --- ### Well, why? Glad you asked. When the initial work started, `Rscript` did not exist so there was no scripting tool. We take a small amount of pride into beating `Rscript` narrowly to a first release. Of course, by now, `Rscript` is more widely used as it ships with every R installation but we still have some aspects we like about `r`: it is simpler and shorter, deals (in our biased) view more sanely with command-line arguments via the `argv` vector, always loaded package `methods` (which `Rscript` finally came around to a good decade later) and [still starts faster](http://dirk.eddelbuettel.com/blog/2014/09/02/#littler-faster-at-doing-nothing). And `r` is just to cool a command (in relation to the trusted `R`) so someone had to! ### No Printing In the very beginning of `littler`, we made an executive decision to _not_ echo each command output when we evaluate commands in the read-evaluate-print loop. So `2+2` will be evaluated silently: four will be computed, but not shown. That made sense for scripts we wanted to be silent. The idea is that user will add a `print()` or `cat()` as needed. If you desire each step to printed, add a `-p` or `--verbose` argument. ### No `.Renviron` Another early decision was to make `r` start _faster_ than the alternatives. Our `r` is "just" a small little binary. Whereas `R` and `Rscript` are front-end shell scripts sourcing a number of things and setting them dynamically, we determine values _at compilation time_ and freeze them into the binary. That may seem _risqué_ but worked out just fine. However, while we later added the ability to source `Rprofile` files (which contain R code we can evaluate) there is no way for us to source the `Renviron` files _and to modify the already running process_. So if you want to source `Renviron` you could add an explicit `readEnviron()` to `~/.littler.r` or `/etc/littler/r`. ### Lower-case / upper-case This is mostly an issue on macOS where the brain surgeons behind the OS decided that `r` is the same as `R`. What can we say? On that OS you may need to rename the build to `lr` instead. Please send your complaints to Cupertino, California. ### Adding the binary to your path When the package is installed from source, it displays ``` * * new binary $(TGT) installed in bin/ subdirectory" * consider adding a symbolic link from, e.g., /usr/local/bin" * on OS X, you may have to name this 'lr' instead" * see the littler-faq vignette for more details" * ``` where the variable `$(TGT)` normally expands to `r`. As the text suggests you may want to create a [symbolic link](https://en.wikipedia.org/wiki/Symbolic_link) from a directory in the to make the newly built binary available to users. On Linux you may do ``` cd /usr/local/bin sudo ln -s /usr/local/lib/R/site-library/littler/bin/r . ``` to create a link for `r` in `/usr/local/bin`. On macOS, as suggested, you may want ``` cd /usr/local/bin sudo ln -s /usr/local/lib/R/site-library/littler/bin/r lr ``` to create a command `lr` instead; see the previous question as to why. In either case adjust the source part of the `ln` command to where your binary is -- which R can tell you via `system.file("bin", "r", package="littler")`. Also note that _e.g._ the [zsh](https://zsh.sourceforge.io/) has a builtin command `r` which may conflict, so using the explicit path of, say, `/usr/bin/r` or `/usr/local/bin/r` or ... may provide an alternative. littler/vignettes/water.css0000644000176200001440000000225114136370627015606 0ustar liggesusers/* our addition */ body { max-width: 50rem; margin-left: auto; margin-right: auto; font-family: system-ui; } /* Inline codes */ code { padding: 2px; border-radius: unset; } /* Code blocks */ pre { background-color: unset; border: solid #aaa 1px; padding: 8px; } pre.numberSource { margin: 0; padding-left: 0; } div.sourceCode { overflow: visible; } pre, pre.sourceCode { overflow-x: auto; } pre>code { white-space: pre; overflow: visible; background-color: unset; padding: 0; } pre.sourceCode.numberSource { overflow-x: visible; } pre.sourceCode.numberSource>code { white-space: pre-wrap } pre.sourceCode.numberSource>code>span { left: 8px; text-indent: -4.6em; } /* code folding */ .chunk-summary { text-align: right; } .chunk-summary+pre, .chunk-summary+div.sourceCode { margin-top: 2px; } /* TOC */ nav > ul { border: .0625rem solid #444; border-radius: 4px; margin: 5px; padding: 5px; } nav ul { list-style-type: none; padding-inline-start: 1rem; } nav ul li { padding: 0; } nav ul ul { margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; } nav code { background-color: unset; color: unset; } littler/R/0000755000176200001440000000000014573433440012141 5ustar liggesuserslittler/R/init.R0000644000176200001440000000175414573433440013236 0ustar liggesusers .onAttach <- function(libname, pkgname) { packageStartupMessage("The littler package provides 'r' as a binary.") packageStartupMessage("See 'vignette(\"littler-examples\") for several usage illustrations,") packageStartupMessage("and see 'vignette(\"littler-faq\") for some basic questions.") if (Sys.info()[["sysname"]] %in% c("Linux", "Darwin")) { # nocov start if (unname(Sys.which("r")) == "") { loc <- normalizePath(system.file("bin", .Platform$r_arch, "r", package="littler")) packageStartupMessage("You could link to the 'r' binary installed in\n'", loc, "'\n", "from '/usr/local/bin' in order to use 'r' for scripting.", "See the 'vignette(\"littler-faq\")' for more details.") if (Sys.info()[["sysname"]] == "Darwin") packageStartupMessage("On maxOS, 'r' and 'R' are the same so 'lr' is a possible alternate name for littler.") } # nocov end } } littler/R/test.R0000644000176200001440000000155014077010703013234 0ustar liggesusers## Internal, not exported, function used by unit tests test <- function(src = "cat(2 + 2)") { system2(r(), paste("-e", shQuote(src)), stdout = TRUE) } ##' Return the path of the install \code{r} binary. ##' ##' The test for Windows is of course superfluous as we have no binary for Windows. ##' Maybe one day... ##' @title Return Path to \code{r} Binary ##' @param usecat Optional toggle to request output to stdout (useful in Makefiles) ##' @return The path is returned as character variable. If the \code{usecat} option is ##' set the character variable is displayed via \code{\link{cat}} instead. ##' @author Dirk Eddelbuettel r <- function(usecat=FALSE) { p <- file.path(system.file(package="littler"), "bin", paste0("r", ifelse(.Platform$OS.type=="windows", ".exe", ""))) if (usecat) return(cat(p)) # nocov p } littler/MD50000644000176200001440000001320414577647212012260 0ustar liggesusers7350644d16e8c86c333476d717b528fb *ChangeLog b994e3d08b60028e8916f87f8df2d202 *DESCRIPTION b1a496dc62bb8a1c53e2da826c53a098 *NAMESPACE 1884174ae05aa88143052d3d3f2cb34c *R/init.R 0a90a6d8b74958607deef0c292b68da0 *R/test.R 535ef0d57060c3aa9c5ba3f967f45102 *README.md b9f379bbf15d356769a6098535136c10 *build/vignette.rds 6fb1ed071cd6c11749d9a52d879ef4e8 *cleanup 000c4c2f294806f9293df10a4d5c4b38 *configure 2f8c4daf1b65cb92b370893f9cb2ba10 *configure.ac 17f1bec0432fdc8e579dc999aac1d3f7 *inst/NEWS.Rd 56f71b34284fa9d87ce4fda5f44f8d95 *inst/doc/littler-examples.html 44edae02f3243730584bcf724e8c6872 *inst/doc/littler-examples.md 2baba4b686ece6bfb65b4a06c2be58c3 *inst/doc/littler-faq.html c1f981418f8bbfc136bfd85bbe61fa11 *inst/doc/littler-faq.md 47a352318aea823be0670359815a4175 *inst/examples/build.r 5570f623e03d4a27717e00dc2f94574e *inst/examples/c4c.r c124d4328b4e98fc977c7d5e390972c8 *inst/examples/check.r 0d5d491c59331b3ad452fecb6a4f0efb *inst/examples/ciw.r c011b6d19f5478b32ff852853b0908e3 *inst/examples/com.r 7a0f0075a180aa4f3f926d25f90a0e2d *inst/examples/compAttr.r df1e4d8e26f3dcaa65f17173da49cfc4 *inst/examples/compactpdf.r 7773c394927dbd51e56db81f33784368 *inst/examples/compiledDeps.r dc3d23f089f73b54a76dd57f7f007ee8 *inst/examples/cos.r 61eba2a2cf3e9646db558bc767f5b732 *inst/examples/cow.r aaf2087c9eabeb79f1f3f7a0331ec1e7 *inst/examples/cowu.r 095a5ff1a4b13fc1c3be0cedd56a7e7a *inst/examples/cranIncoming.r e5cd9676d05ec25d2639878318990118 *inst/examples/doi2bib.r 4ba7ed2f88208a246e6a4f3b2c803869 *inst/examples/dratInsert.r 732c02602d8cbe5cd75ce130a9f64e65 *inst/examples/fileOps.r 60f727bfb41318e761372c643e0eb426 *inst/examples/fsizes.r d28296620462977fd6c46c99aea244fb *inst/examples/getPandoc.r 7de02ec85822629eb95786075161cf35 *inst/examples/getQuartoCli.r 5fa6ad2bf209c01419235dbfba235985 *inst/examples/getRStudioDesktop.r dbad228654c12ca60de662c75a56ebb7 *inst/examples/getRStudioServer.r 93bb7d341e61144fcf915e09f3ec2041 *inst/examples/highlightsweave.r fe8cf217d74e27f9df00c3337cdeacd4 *inst/examples/install.r 22ac670dcf77b6f6d05f58d058536530 *inst/examples/install2.r 01bef0cadddc1666d5c7ce6e42475dc3 *inst/examples/installBSPM.r cf1269e4963a81698a4acc874bcad365 *inst/examples/installBioc.r 442abdb3c22b257a1a6cc966e6f44056 *inst/examples/installDeps.r aa06d3319c920f6868d820a82d1f067b *inst/examples/installDeps2.r ee3e7485ff846b370b65bf4ffa0b0024 *inst/examples/installGithub.r f1c21682c736f196cb2df1dca208b5b1 *inst/examples/installP3M.r f1c21682c736f196cb2df1dca208b5b1 *inst/examples/installPPM.r f1c21682c736f196cb2df1dca208b5b1 *inst/examples/installRSPM.r 7fd3705c164f237b534cafd6d1ddbded *inst/examples/installRepo.r ec08d3a5156bda610ed27f0b42d4dda6 *inst/examples/installRub.r 01f9dca47da6b8c59742f21bce1f2557 *inst/examples/kitten.r 95bbb1b4d287d80721c68cf7048ca580 *inst/examples/knit.r 9610f5d1a11ce1437a7ec73a9fa8459d *inst/examples/mdweave2html.r 8938ac19a069842cc29ad05334acf70a *inst/examples/mph.r 308bd3fc719cb94ccfbb613d722ac69a *inst/examples/pace.r 9639aa6b098ca195b08f8f6f694964df *inst/examples/pkg2bibtex.r 9c9c9a9936ec187c5c64f8669bc69baa *inst/examples/pnrrs.r e75e411af418a7e88645d7ec8515833b *inst/examples/r2u.r 644b3bcd64039d8ec36c86c3256e6200 *inst/examples/rcc.r 2c2dd2d0ca617b90b0f35e3820f40d2d *inst/examples/rchk.r 10413d8df1a76ae7fe87e8728bae7f6a *inst/examples/rd2md.r baecaa3e40582e058194186324972ac4 *inst/examples/render.r e3771134892cb56205712080df545809 *inst/examples/rhome.r a375e4a47e97a6899a62738d8686cff7 *inst/examples/roxy.r d128abc4df7c53e88ba3ea1a886fe727 *inst/examples/runit.r 1d8481053565f068f641ac51fdf50db2 *inst/examples/shiny.r cc60f52ea701ac2b704879193a40720d *inst/examples/silenceTwitterAccount.r bf16fe40d540bfd159ea101a073ae4e4 *inst/examples/sweave.r 5630711dcd2426329752bc8a9ab40ff8 *inst/examples/testInstalled.r 3018acb5235ed031a0d174b41435c9b2 *inst/examples/tt.r a108c5ad1bd034661177128be9c09c48 *inst/examples/tttf.r 7eab6aa0e75275fd9fc4382b84891a5a *inst/examples/tttl.r 123dab2056a3af474e914159e16a6012 *inst/examples/update.r 53a5c3bbb8619bddc4a1a3de1aa17c43 *inst/examples/urlUpdate.r 6935f8fc36797e7bb897eb0f4ca95e3c *inst/man-page/r.1 a1ec4a8ce8c50e85c89900b01c571343 *inst/script-tests/argParse.sh 0518180c4d7d5a63e9edb5b8620b1b1a *inst/script-tests/dat.txt 49d6f1da681cc7ad31e67ec97c749a09 *inst/script-tests/dotLast.r dd198237e68c670ac7fd1d3678715bb1 *inst/script-tests/error.R ac9d47a4369a64c447b6d4a5e5defc6c *inst/script-tests/exitstatus.sh 29eef70821f60dd3b17e599d8605e253 *inst/script-tests/longline.R 5c363c3bbff40df66e7496904db959ac *inst/script-tests/shebang 19f862bbffc9fa3eec9d5d6a35b52ca9 *inst/script-tests/summary.R c21e37ff68fabf8e9c2ff935c82a1fbe *inst/script-tests/summary2.R 00267417cd9db2d7f68b9357187d3f2d *inst/script-tests/test1.R 9cdc0c91c6330a86afc50af15e7b648c *inst/script-tests/test_longline.R 50458da15125c56ca4d0c4a27d5197b9 *inst/script-tests/timing.sh 5120531e178e9f02e1865041e77e4e1d *inst/script-tests/timing2.sh 3263fc91100029f74afe69791a4dc9ad *inst/script-tests/ts.R 2286fd9ac48b3fb21f3c166b2985355d *man/littler.Rd 04e43f516fb1f18d428aac2adecd124a *man/r.Rd a23e7a1dd50bf6c84a7bb59f76eab7fc *src/Makevars.in e857b2b7280c6b356248788f20f20112 *src/config-const.h 86dd8a62261f29432e8954867a95df3c *src/config.h.in c261abe2bcaa9283ce8df9362f8ac1f5 *src/gitversion.h.in dc4362b33be713e06bddb35dc0da25a7 *src/littler.c 98ddd8013dda001053955c5b257d3f31 *src/scripts/autoloads.R 9286b16272bc96161ee53f75a405d609 *src/scripts/ldflags.R 063854637188c7683d006d41d2cb4a75 *src/scripts/littler.R 000c4df779dbf117342fc63d61aad089 *tests/simpleTests.R 44edae02f3243730584bcf724e8c6872 *vignettes/littler-examples.md c1f981418f8bbfc136bfd85bbe61fa11 *vignettes/littler-faq.md c337c0e0c1e0c0dd67a87649ff442d9f *vignettes/water.css littler/inst/0000755000176200001440000000000014577617425012730 5ustar liggesuserslittler/inst/examples/0000755000176200001440000000000014577617426014547 5ustar liggesuserslittler/inst/examples/cranIncoming.r0000755000176200001440000000204714066355135017334 0ustar liggesusers#!/usr/bin/env r # # A simple example to check the incoming queue at CRAN # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) if (!requireNamespace("foghorn", quietly=TRUE)) stop("The 'foghorn' is required. Please install it.", call.=FALSE) ## configuration for docopt doc <- paste0("Usage: cranIncoming.r [-a] [-h] [-x] [ARGS...] -a --all show everything in incoming -h --help show this help text -x --usage show help and short example usage ") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat(" Basic usage: cranIncoming.r digest binb cranIncoming.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (length(opt$ARGS) == 0) opt$ARGS <- if (opt$all) NULL else character() print(data.frame(foghorn::cran_incoming(opt$ARGS)), row.names=FALSE) littler/inst/examples/rcc.r0000755000176200001440000000646614572067040015502 0ustar liggesusers#!/usr/bin/env -S r -t ## ## Call 'rcmdcheck' on a package ## ## Copyright (C) 2016 - 2024 Dirk Eddelbuettel ## ## Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: rcc.r [-h] [-x] [-c] [-f] [-q] [-v] [--args ARGS] [--libpath LIBP] [--repos REPO] [--erroron ERRON] [PATH...] -c --as-cran should '--as-cran' be added to ARGS [default: FALSE] -a --args ARGS additional arguments to be passed to 'R CMD CHECK' [default: ] -l --libpath LIBP additional library path to be used by 'R CMD CHECK' [default: ] -r --repos REPO additional repositories to be used by 'R CMD CHECK' [default: ] -f --fast should vignettes and manuals be skipped [default: FALSE] -v --valgrind should tests run with 'valgrind' debug tool [default: FALSE] -e --erroron ERRON whether to throw an error on failure [default: never] -q --quiet should 'rcmdcheck' be called quietly [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: rcc.r # check repo in current (working) director rcc.r -c # run as R CMD check --as-crn rcc.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } erroron <- switch(opt$erroron, never = "never", error = "error", warning = "warning", note = "note", "badarg") if (erroron=="badarg") stop("Inadmissable argument for '--erroron' option.", call.=FALSE) if (is.null(opt$args)) { # special treatment for --args and -c if (opt$as_cran) { opt$args <- "--as-cran" } else { opt$args <- character() } } else { if (opt$as_cran) { opt$args <- c(opt$args, "--as-cran") } } if (opt$fast) { opt$args <- c(opt$args, "--ignore-vignettes", "--no-manual") } if (opt$valgrind) { opt$args <- c(opt$args, "--use-valgrind") } if (length(opt$PATH) == 0) opt$PATH <- "." # default argument current directory if (is.null(opt$libpath)) opt$libpath <- .libPaths() # default library pathr if (is.null(opt$repos)) opt$repos <- getOption("repos") # default repos if (requireNamespace("rcmdcheck", quietly=TRUE) == FALSE) stop("This command requires the 'rcmdcheck' package.", call. = FALSE) suppressMessages(library(rcmdcheck)) Sys.setenv("_R_CHECK_TESTS_NLINES_"="0") # ensure all errors shown rccwrapper <- function(pa, qu, ar, li, re, eo) { rcmdcheck(path=pa, quiet=qu, args=ar, libpath=li, repos=re, error_on=eo) } rc <- sapply(opt$PATH, # iterate over arguments rccwrapper, # calling 'rcmdcheck()' with arguments opt$quiet, # quiet argument, default false opt$args, # args arguments, possibly with --as-cran opt$libpath, # libpath argument opt$repos, # repos argument erroron, # error_on argument simplify=FALSE) status <- max(sapply(rc, "[[", "status")) q(status=status) littler/inst/examples/sweave.r0000755000176200001440000000231613554700765016222 0ustar liggesusers#!/usr/bin/env r # # Another example to convert from Rnw and also compact # # Copyright (C) 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: sweave.r [-c] [-h] [-x] [FILES...] -c --compact compact pdf file [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: sweave.r foo.Rnw bar.Rnw # convert two given files sweave.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } ## helper function sweaveFunction <- function(p) { if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE) utils::Sweave(p) s <- gsub(".Rnw$", ".tex", p) tools::texi2pdf(s, texi2dvi="pdflatex") tools::texi2pdf(s, texi2dvi="pdflatex") if (opt$compact) { r <- gsub(".Rnw$", ".pdf", p) if (file.exists(r)) tools::compactPDF(r, gs_quality="ebook") } } ## render files using helper function sapply(opt$FILES, sweaveFunction) littler/inst/examples/installRSPM.r0000755000176200001440000000533014536123346017072 0ustar liggesusers#!/usr/bin/env r # # A simple example to install from RSPM/PPM/P3M # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) if (Sys.info()[["sysname"]] != "Linux") stop(paste("Currently only supported on Linux.", "Please get in touch if you want to / can help on macOS"), call.=FALSE) code <- "" if (file.exists("/etc/os-release")) { # next block borrowed from my chshli package on GitHub osrel <- read.table("/etc/os-release", sep="=", row.names=1, col.names=c("key","value")) if ("REDHAT_SUPPORT_PRODUCT" %in% rownames(osrel)) { # 'centos7' for CentOS/RHEL 7, 'centos8' for CentOS/RHEL 8 and Fedora ver <- osrel["REDHAT_SUPPORT_PRODUCT_VERSION", "value"] code <- paste0("centos", min(as.numeric(ver), 8)) } else if ("VERSION_CODENAME" %in% rownames(osrel)) { code <- osrel["VERSION_CODENAME", "value"] } } if ((code == "") && (Sys.which("lsb_release") != "")) { code <- system("lsb_release -c | awk '{print $2}'", intern=TRUE) } ## configuration for docopt doc <- paste0("Usage: install(RSPM|PPM|P3M).r [-c code] [-l libloc] [-h] [-x] ARGS... -c --code ARG set code name for distribution [default: ", code, "] -l --libloc ARG location in which to install [default: ", .libPaths()[1], "] -h --help show this help text -x --usage show help and short example usage Note that RSPM/PPM/P3M support may be somewhat experimental. There may not be binaries for every possibly OS, distibution, and R version. Please file issue tickets at the Github repo for littler if you can contribute additional checks and values. As RSPM has been renamed to PPM and then P3M, we now install the script thrice via hardlinks. ") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n") cat("Basic usage: installRSPM.r digest # install digest for default release '", code, "' installPPM.r -c jammy digest # install digest for Ubuntu 'jammy' installP3M.r -c bookworn digest # install digest for Debian 'bookworm' install(RSPM|PPM|P3M).r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n", sep="") q("no") } if (!is.null(opt$libloc)) .libPaths(opt$libloc) r <- getOption("repos") r["CRAN"] <- paste0("https://p3m.dev/all/__linux__/", opt$code, "/latest") options(repos = r) options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version$platform, R.version$arch, R.version$os))) invisible(sapply(opt$ARGS, function(r) install.packages(r))) littler/inst/examples/roxy.r0000755000176200001440000000455314354122012015714 0ustar liggesusers#!/usr/bin/env r # # Simple helper script for roxygen2::roxygenize() # # Dirk Eddelbuettel, 2013 - 2020 # # GPL-2 or later ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: roxy.r [-n] [-f] [-m] [-h] [-x] [-r ROCLETS] [PACKAGES ...] -n --nocache run the current version not the cached version -r --roclets ROCLETS use roclets arguments for roxygenize [default: rd] -f --full implies both '-n' and '-r NULL' -m --minimal implies 'namespace,rd' roclets -l --libpath LIBP additional library path to be added [default: ] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where PACKAGES... can be one or more packages. Examples: roxy.r # update help pages for package, use cached version roxy.r -n # use non-cached version roxy.r -r NULL # use full roclets i.e. collate,namespace,rd roxy.r -r 'namespace,rd' # use specified roclets i.e. namespace,rd roxy.r -f # use non-cached version and 'NULL' roclets roxy.r -m # shorthand for use 'of namespace,rd' roclets roxy.r is part of littler which brings 'r' to the command-line. See the help for roxygenize for the different 'roclets' arguments; default value 'rd' means to only update Rd files. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (opt$full) { opt$nocache <- TRUE opt$roclets <- "NULL" } if (opt$minimal) { opt$nocache <- FALSE opt$roclets <- "namespace,rd" } ## Works around the marvel that is version 6.1.0 or later if (!opt$nocache && dir.exists("~/.R/cache/roxygen2")) { cat("** Using cached version 6.0.1 of roxygen2.\n") .libPaths("~/.R/cache") } ## load roxygen library(roxygen2) if (!is.null(opt$libpath)) .libPaths(opt$libpath) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call roxygenize() on the given directory with roclets="rd" set sapply(ifelse(length(argv) > 0, argv, "."), FUN = roxygenize, roclets = if (tolower(opt$roclets) == "null") NULL else strsplit(opt$roclets,",")[[1]]) littler/inst/examples/installBioc.r0000755000176200001440000001247314321353447017172 0ustar liggesusers#!/usr/bin/env r # # Install a package from BioConductor # # Copyright (C) 2020 - 2022 Dirk Eddelbuettel # Copyright (C) 2022 - 2022 Dirk Eddelbuettel and Pieter Moris # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## default to first library location in .libPaths() libloc <- .libPaths()[1] ## configuration for docopt doc <- paste0("Usage: installBioc.r [-l LIBLOC] [-d DEPS] [-n NCPUS] [-r REPO ...] [--error] [--skipinstalled] [-m METHOD] [--force] [--update] [-h] [-x] [PACKAGES ...] -l --libloc LIBLOC location in which to install [default: ", libloc, "] -d --deps DEPS install suggested dependencies as well [default: NA] -n --ncpus NCPUS number of processes to use for parallel install [default: getOption] -r --repo REPO additional repository to use [default: getOption] -e --error throw error and halt instead of a warning [default: FALSE] -s --skipinstalled skip installing already installed packages (takes priority over --force) [default: FALSE] -m --method METHOD method to be used for downloading files [default: auto] -f --force force re-download of packages that are currently up-to-date [default: FALSE] -u --update update old already installed packages [default: FALSE] -h --help show this help text -x --usage show help and short example usage") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where PACKAGES... can be one or more BioConductor names. Functionality depends on package 'BiocManger' which has be installed. Examples: installBioc.r -l /tmp/lib S4Vectors # install into given library installBioc.r --update Biobase # install package and update older packages installBioc.r --deps NA --error --skipinstalled # install package without suggested dependencies, # throw an error on installation failure and skip # packages that are already present installBioC.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (!requireNamespace("BiocManager", quietly=TRUE)) { stop("Please install 'BiocManager' first, for example via 'install.r BiocManager'.", call.=FALSE) } ## set repository to empty character vector if not supplied, since ## this is the input expected by BiocManager::install(site_repository=) ## (does not accept NA) ## the custom repository must be a sub-repository of a main BioC_mirror ## e.g. software: https://bioconductor.statistik.tu-dortmund.de/packages/3.15/bioc/ ## annotation: https://ftp.gwdg.de/pub/misc/bioconductor/packages/3.14/data/annotation if (opt$repo == "getOption") { opt$repo = character() } ## check if dependencies need to be installed, see ## https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/install.packages ## the default, NA, means c("Depends", "Imports", "LinkingTo"), but not "Suggests" if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } ## set the number of parallel processes to use for a parallel install of ## more than one source package, see ## https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/install.packages if (opt$ncpus == "getOption") { opt$ncpus <- getOption("Ncpus", 1L) } else if (opt$ncpus == "-1") { ## parallel comes with R 2.14+ opt$ncpus <- max(1L, parallel::detectCores()) } ## helper function to catch errors that could arise when package installation has failed ## and to skip installation of packages that are already present (for BiocManager::install() ## these would otherwise result in additional warnings) install_bioc <- function(pkgs, ..., error = FALSE, skipinstalled = FALSE) { e <- NULL capture <- function(e) { if (error) { catch <- grepl("installation of .* packages failed", e$message) || grepl("is not available", e$message) || grepl("had non-zero exit status", e$message) || grepl("compilation failed for package.*", e$message) || grepl("fatal error", e$message) || grepl("No such file or directory", e$message) if (catch) { e <<- e } } } if (skipinstalled) { pkgs <- setdiff(pkgs, installed.packages()[,1]) } if (length(pkgs) > 0) { withCallingHandlers(BiocManager::install(pkgs, ...), warning = capture) if (!is.null(e)) { stop(e$message, call. = FALSE) } } } ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") ## install requested packages using helper function ## ask must be set to FALSE because user prompts do not appear when calling ## R from the CLI, e.g. ## `R -e 'BiocManager::install("Biobase", ask=TRUE, update=TRUE)'` ## might warn that MASS is out of date, but would not show a user prompt install_bioc(pkgs = opt$PACKAGES, lib = opt$libloc, site_repository = opt$repo, update = opt$update, ask = FALSE, force = opt$force, dependencies = opt$deps, Ncpus = opt$ncpus, method = opt$method, error = opt$error, skipinstalled = opt$skipinstalled) littler/inst/examples/compactpdf.r0000755000176200001440000000156213554554150017045 0ustar liggesusers#!/usr/bin/env r # # A simple wrapper for tools::compactPDF # # Copyright (C) 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: compactpdf.r [-h] [-x] [PATH...] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: compactpdf.r # compact in current directory compactpdf.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (length(opt$PATH) == 0) { opt$PATH <- list.files(".", pattern=".pdf$") } compactFunction <- function(f) { tools::compactPDF(f, gs_quality="ebook") } sapply(opt$PATH, compactFunction) littler/inst/examples/dratInsert.r0000755000176200001440000000257114353570076017050 0ustar liggesusers#!/usr/bin/env r # # Another example to install one or more (source) packages into a drat # # Copyright (C) 2015 - 2017 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN library(drat) }) ## configuration for docopt doc <- "Usage: drat.r [-h] [-x] [--repo REPO] [--commit MSG] [TARGZ...] -r --repo REPO repository path to use [default: ~/git/drat] -c --commit MSG in github use, commit with MSG (default: no commit) -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: dratInsert.r myPkg_1.2-3.tar.gz # installs into default (git) repo dratInsert.r -r /srv/R/ myPkg_1.2-3.tar.gz # installs into local directory repo dratInsert.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (is.null(opt$commit)) opt$commit <- FALSE ## helper function installArg <- function(p, repo, commit) { if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE) insertPackage(p, repo, commit) } ## insert packages using helper function sapply(opt$TARGZ, installArg, opt$repo, opt$commit) littler/inst/examples/silenceTwitterAccount.r0000755000176200001440000000126514005614104021233 0ustar liggesusers#!/usr/bin/r if (is.null(argv) | length(argv) < 1) { cat("Usage: silenceTwitterAccount.r user1 [user2 user3 ...]\n\n") cat("Calls rtweet::post_silence() for the given users.\n") cat("NB: Needs a modified version of rtweet and a twitter token.\n\n") q() } if (!requireNamespace("rtweet", quietly=TRUE)) stop("Please install `rtweet`.", call. = FALSE) if (Sys.getenv("TWITTER_PAT") == "") stop("Please setup a 'TWITTER_PAT' using `rtweet`.", call. = FALSE) library(rtweet) if (is.na(match("post_silence", ls("package:rtweet")))) stop("This needs a version of 'rtweet' with the post_silence() function", call. = FALSE) for (arg in argv) rtweet::post_silence(arg) littler/inst/examples/rhome.r0000755000176200001440000000153013045713217016026 0ustar liggesusers#!/usr/bin/env r ## ## Retrieve R_HOME information ## ## See help(R.home) for details, use arguments "bin", "lib", "etc", ... ## ## ## Note that in shell scripts you may want something like ## ## ## Set R_HOME, respecting an environment variable if set ## : ${R_HOME=$(R RHOME)} ## ## after which expansions use as in ${R_HOME}/bin/Rscript works ## ## In Makefiles you want a similar use via a shell call: ## ## ${R_HOME}/bin/Rscript ## ## as R_HOME is already set with an 'R CMD ...' call (!!). On Windows ## do something like ## ## PKG_LIBS = $(shell "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" -e "RcppGSL:::LdFlags()") ## ## to pick up the architecture flag ## ## ## Copyright (C) 2015 Dirk Eddelbuettel ## ## Released under GPL (>= 2) if (is.null(argv) | length(argv) < 1) argv <- "home" cat(sapply(argv, R.home)) littler/inst/examples/installP3M.r0000755000176200001440000000533014536123346016710 0ustar liggesusers#!/usr/bin/env r # # A simple example to install from RSPM/PPM/P3M # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) if (Sys.info()[["sysname"]] != "Linux") stop(paste("Currently only supported on Linux.", "Please get in touch if you want to / can help on macOS"), call.=FALSE) code <- "" if (file.exists("/etc/os-release")) { # next block borrowed from my chshli package on GitHub osrel <- read.table("/etc/os-release", sep="=", row.names=1, col.names=c("key","value")) if ("REDHAT_SUPPORT_PRODUCT" %in% rownames(osrel)) { # 'centos7' for CentOS/RHEL 7, 'centos8' for CentOS/RHEL 8 and Fedora ver <- osrel["REDHAT_SUPPORT_PRODUCT_VERSION", "value"] code <- paste0("centos", min(as.numeric(ver), 8)) } else if ("VERSION_CODENAME" %in% rownames(osrel)) { code <- osrel["VERSION_CODENAME", "value"] } } if ((code == "") && (Sys.which("lsb_release") != "")) { code <- system("lsb_release -c | awk '{print $2}'", intern=TRUE) } ## configuration for docopt doc <- paste0("Usage: install(RSPM|PPM|P3M).r [-c code] [-l libloc] [-h] [-x] ARGS... -c --code ARG set code name for distribution [default: ", code, "] -l --libloc ARG location in which to install [default: ", .libPaths()[1], "] -h --help show this help text -x --usage show help and short example usage Note that RSPM/PPM/P3M support may be somewhat experimental. There may not be binaries for every possibly OS, distibution, and R version. Please file issue tickets at the Github repo for littler if you can contribute additional checks and values. As RSPM has been renamed to PPM and then P3M, we now install the script thrice via hardlinks. ") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n") cat("Basic usage: installRSPM.r digest # install digest for default release '", code, "' installPPM.r -c jammy digest # install digest for Ubuntu 'jammy' installP3M.r -c bookworn digest # install digest for Debian 'bookworm' install(RSPM|PPM|P3M).r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n", sep="") q("no") } if (!is.null(opt$libloc)) .libPaths(opt$libloc) r <- getOption("repos") r["CRAN"] <- paste0("https://p3m.dev/all/__linux__/", opt$code, "/latest") options(repos = r) options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version$platform, R.version$arch, R.version$os))) invisible(sapply(opt$ARGS, function(r) install.packages(r))) littler/inst/examples/update.r0000755000176200001440000000450713601412147016201 0ustar liggesusers#!/usr/bin/env r # # A simple example to update packages in /usr/local/lib/R/site-library # Parameters are easily adjustable # # Copyright (C) 2006 - 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: update.r [-r REPO...] [-l LIBLOC] [-n NCPUS] [-h] [-x] -r --repos REPO repository to use, or NULL for file [default: getOption] -l --libloc LIBLOC path to examine for packages to update [default: NULL] -n --ncpus NCPUS number of processes to use for parallel install [default: getOption] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("updates packages, optionally from a given repository, fo a library location. Examples: update.r # update installed packages update.r -l /srv/R-lib # update for this location update,r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } ## docopt results are characters, so if we meant NULL we have to set NULL if (opt$repos == "NULL") { opt$repos <- NULL } else if (opt$repos == "getOption") { ## adjust as necessary, see help('download.packages') opt$repos <- getOption("repos") } if (opt$ncpus == "getOption") { opt$ncpus <- getOption("Ncpus", 1L) } else if (opt$ncpus == "-1") { ## parallel comes with R 2.14+ opt$ncpus <- max(1L, parallel::detectCores()) } if (opt$libloc == "NULL") { ## NULL corresponds to .libPaths() but some directories may be non-writeable ## so we filter out the ones where we can write and use only those canWrite <- function(d) file.access(d, mode=2) == 0 opt$libloc <- Filter(canWrite, .libPaths()) } ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") ## simply unrolling of all unlink over all files 'repos*' in $TMP clearCache <- function() { sapply(list.files(path=tempdir(), pattern="*rds$", full.names=TRUE), unlink) } ## Always clear caches of remote and local packages clearCache() update.packages(lib.loc=opt$libloc, repos=opt$repos, Ncpus=opt$ncpus, ask=FALSE) ## Always clear caches of remote and local packages clearCache() littler/inst/examples/installDeps2.r0000644000176200001440000000354614574573755017311 0ustar liggesusers#!/usr/bin/env r # # An even simpler example to install dependencies # # Copyright (C) 2024 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) ## configuration for docopt doc <- "Usage: installDeps2.r [-h] [-x] [-s] [DESC] -s --suggests Add 'Suggests' to dependencies -h --help show this help text -x --usage show help and short example usage " opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat(" installDeps2.r The script expects a DESCRIPTION file in the local directory (or given as the argument) which it then parses. The basic mechanics of doing this dependency-free came from a Dockerfile at the `data.table` repository, and are a appreciated. An alternative version, relying on the `remotes` package, has been available for several years with littler as `installDeps.r`. installDeps2.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (length(opt$DESC)==0 && file.exists("DESCRIPTION") && file.exists("NAMESPACE")) { #message("* installing deps for found in current working directory ...") descfile <- "DESCRIPTION" } else { descfile <- opt$DESC } flds <- c("Imports", "Depends", "LinkingTo") if (opt$suggests) flds <- c(flds, "Suggests") res <- read.dcf(descfile)[1,] # we read only one file so first row only res <- res[intersect(names(res), flds)] # intersect available and desired fields pkgs <- tools:::.split_dependencies(res) # parse and split, then diff off base packages instpkgs <- setdiff(names(pkgs), tools:::.get_standard_package_names()$base) install.packages(instpkgs) # and install remainder littler/inst/examples/pkg2bibtex.r0000755000176200001440000000146513521375747016777 0ustar liggesusers#!/usr/bin/env r # # A simple wrapper for toBibtex # # Copyright (C) 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: pkg2bibtex.r [-h] [-x] [PKG...] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: pkg2bibtex.r anytime nanotime # create two bibtex records pkg2bibtex.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (length(opt$PATH) == 0) { opt$PATH <- "." } res <- sapply(opt$PKG, function(p) toBibtex(citation(p, auto=TRUE)), simplify=FALSE) print(res) littler/inst/examples/compAttr.r0000755000176200001440000000074113245105321016501 0ustar liggesusers#!/usr/bin/env r # # Simple helper script for compileAttributes() # # Dirk Eddelbuettel, July 2014 # # GPL-2 or later ## load Rcpp suppressMessages(library(Rcpp)) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call compileAttributes() on the given directory sapply(ifelse(length(argv) > 0, argv, "."), compileAttributes) littler/inst/examples/installRub.r0000755000176200001440000000627714544563575017067 0ustar liggesusers#!/usr/bin/env r # # A installer for r-universe binaries (on Ubuntu 'jammy' only) # # Copyright (C) 2023 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) library(utils) # for osVersion rver <- gsub("^([\\d].[\\d]).*$", "\\1", as.character(getRversion()), perl=TRUE) uburel <- "jammy" ## configuration for docopt doc <- paste0("Usage: installRub.r [-h] [-x] [-k] [-r REL] [-v VER] [-u UNIV] PACKAGES -u --universe UNIV required argument specifying universe [default: ] -v --version VER R 'major.minor' version release pair to install for [default: ", rver, "] -r --release REL Ubuntu LTS release to install to install for [default: ", uburel, "] -k --keepoption so not set option 'bspm.version.check' to 'TRUE' as is default -h --help show this help text -x --usage show help and short example usage. PACKAGES can also be a shorthand 'package@universe'. See '-x | --usage' for more.") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("In general, PACKAGES... can be one or more R package names available in then selected r-universe repository; its CRAN (as well as some core BioConductor) dependencies will be provided automatically by r2u. It can also be a shorthand 'package@universe'. Note that while CRAN works extremely hard to always provide an installable set of working packages, r-universe works under a different model and its packages cannot offer any such guarantees. Also note that while we use 'r2u' for the CRAN (and, to some extend, BioConductor) parts full-filling *all* dependencies completely, the binaries from r-universe do not carry any (system-)dependency info so you may end up with missing libries you may need to add. Where an r-universe package exists on CRAN you can cover your ground by first installing the CRAN version and then the r-universe version. Examples: installRub.r -u rcppcore Rcpp RcppArmadillo # installs (never than CRAN / r2u) Rcpp(Armadillo) installRub.r -u eddelbuettel RcppKalman # installs non-CRAN package RcppKalman installRub.r rcpp@rcppcore # alternate to install Rcpp from RcppCore universe installRub.r polars@rpolars # alternate to install polars from rpolars universe installRub.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (getRversion() < "4.2.0") stop("R version 4.2.0 or later is required.", call. = FALSE) if (!exists("osVersion")) stop("Cannot find 'osVersion'. Weird.", call. = FALSE) if (!startsWith(utils::osVersion, "Ubuntu")) stop("Ubuntu is required as host system.", call. = FALSE) if (!requireNamespace("bspm", quietly=TRUE)) stop("The 'bspm' package is required.", call. = FALSE) if (is.null(opt$universe) && length(opt$PACKAGES) == 1) { tokens <- strsplit(opt$PACKAGES, "@")[[1]] opt$PACKAGES <- tokens[1] opt$universe <- tokens[2] } univ <- paste0("https://", opt$universe, ".r-universe.dev/bin/linux/", opt$release, "/", opt$version) if (!opt$keepoption) options(bspm.version.check=TRUE) install.packages(pkgs = opt$PACKAGES, repos = c(univ, "https://cloud.r-project.org")) littler/inst/examples/highlightsweave.r0000755000176200001440000000117113245105321020070 0ustar liggesusers#!/usr/bin/env r # # A simple example to invoke Sweave # # Copyright (C) 2014 Dirk Eddelbuettel # # Released under GPL (>= 2) ## use given argument(s) as target files, or else default to .Rnw files in directory files <- if (length(argv) == 0) dir(pattern="*.Rnw") else argv <- Filter(function(x) file.info(x)$is.dir, argv) ## convert all files from Rnw to pdf using the highlight driver invisible(sapply(files, function(srcfile) { Sweave(srcfile, driver=highlight::HighlightWeaveLatex(boxes=TRUE)) tools::texi2pdf(gsub(".Rnw", ".tex", srcfile)) tools::texi2pdf(gsub(".Rnw", ".tex", srcfile), texi2dvi="pdflatex") })) littler/inst/examples/rchk.r0000755000176200001440000000033113477035332015645 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub::check() wrapper using rchk() # # Copyright (C) 2016 - 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) rhub::check(".", "ubuntu-rchk", check_args="--no-manual --no-vignettes") littler/inst/examples/com.r0000755000176200001440000000065313710107314015471 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub::check_on_macos() wrapper # # Copyright (C) 2016 - 2020 Dirk Eddelbuettel # # Released under GPL (>= 2) ##rhub::check_on_macos(check_args="--no-manual --no-vignettes") ## cf https://github.com/r-hub/rhub/issues/368 macos <- "macos-highsierra-release-cran" checkfile <- function(f) if (file.exists(f)) rhub::check(f, platform=macos) if (length(argv) == 0) argv <- "." sapply(argv, checkfile) littler/inst/examples/runit.r0000755000176200001440000000117413144070211016047 0ustar liggesusers#!/usr/bin/env r # # A simple example to invoke unit tests # # Copyright (C) 2014 - 2017 Dirk Eddelbuettel # # Released under GPL (>= 2) suppressMessages({ library(docopt) # we need the docopt package library(RUnit) # we need the RUnit package }) doc <- "Usage: runit.r [-p PACKAGES] [--help] [FILES ...] -p --packages PACKAGES comma-separated list of packages to install [default: ] -h --help show this help text" opt <- docopt(doc) for (p in strsplit(opt$packages, ",")[[1]]) suppressMessages(require(p, character.only=TRUE)) for (f in opt$FILES) runTestFile(f) q(status=0) littler/inst/examples/r2u.r0000755000176200001440000000771614531412752015441 0ustar liggesusers#!/usr/bin/env r # # Simple r2u helper frontend # # Copyright (C) 2022 - 2023 Dirk Eddelbuettel # # Released under GPL (>= 2) library(docopt) doc <- "Usage: r2u.r [--release DIST] [--debug] [--verbose] [--force] [--xvfb] [--bioc] [--suffix SUF] [--debver DBV] [--plusdfsg] [--uncache] [--dryrun] [--compile] [--help] CMD ... Options: -r --release DIST release distribution to use, one of 'focal' or 'jammy' [default: jammy] -d --debug boolean flag for extra debugging -v --verbose boolean flag for verbose operation -f --force boolean flag to force a build -x --xvfb boolean flag to build under 'xvfb' (x11 virtual framebuffer) -b --bioc boolean flag to update BioConductor (subset) not CRAN -s --suffix SUF build version suffix appended [default: .1] -t --debver DBV debian version leading digit [default: 1.] -p --plusdfsg boolean flag if upstream version gets '+dfsg' -u --uncache remove the cached meta data archives of available packages (when using 'package' command) -n --dryrun boolean flag for dry-run of skip build (when using 'package' command) -c --compile boolean flag for ensuring a compilation from source -h --help show this help text Cmd: build updates all packages last reports most recent binary package sync count counts packages downloaded (locally) today table tabulates packages downloaded today package updates the package(s) named in ... and builds " opt <- docopt(doc) if (!is.finite(match(opt$release, c("focal", "jammy")))) stop("Unknown distro '", opt$release, "'.", call. = FALSE) if (length(opt$CMD) > 1) { opt$args <- opt$CMD[-1] opt$CMD <- opt$CMD[1] } if (!is.finite(match(opt$CMD, c("build", "last", "count", "table", "package")))) stop("Unknown command '", opt$CMD, "'.", call. = FALSE) if (is.finite(match(opt$CMD, "build"))) { library(r2u) if (opt$uncache) { for (db in c(r2u:::.defaultCRANDBFile(), r2u:::.defaultAPFile())) if (file.exists(db)) unlink(db) r2u:::.loadDB() r2u:::.loadAP() } buildUpdatedPackages(opt$release, opt$debug, opt$verbose, opt$force, opt$xvfb, opt$bioc) } else if (is.finite(match(opt$CMD, "last"))) { D <- RcppSimdJson::fload("https://packagemanager.posit.co/__api__/sources/1/transactions") ts <- anytime::utctime(D[1,"completed"]) dh <- as.numeric(difftime(Sys.time(), ts, units="hours")) un <- "days" if (dh <= 3) un <- "mins" else if (dh < 25) un <- "hours" cat("P3M/PPM/RSPM last updated", format(round(difftime(Sys.time(), ts, units=un),1)), "ago\n") } else if (is.finite(match(opt$CMD, "count"))) { ll <- readLines(pipe("bash -c ~/bin/web_who_what | grep '.*cranapt\\/pool\\/dists\\/.*\\/r-.*\\.deb$'")) cat(length(ll), ".deb files downloaded\n") } else if (is.finite(match(opt$CMD, "table"))) { con <- pipe("bash -c ~/bin/web_who_what | grep '.*cranapt\\/pool\\/dists\\/.*\\/r-.*\\.deb$'") ll <- readLines(con) close(con) tt <- table(gsub(".*r-(cran|bioc)-(.*)_\\d+.*", "\\2", ll, perl=TRUE)) print(head(tt[order(-tt)], 10)) } else if (is.finite(match(opt$CMD, "package"))) { library(r2u) if (opt$uncache) { for (db in c(r2u:::.defaultCRANDBFile(), r2u:::.defaultAPFile())) if (file.exists(db)) unlink(db) r2u:::.loadDB() r2u:::.loadAP() } for (p in opt$args) { buildPackage(pkg = p, tgt = opt$release, debug = opt$debug, verbose = opt$verbose, force = opt$force, xvfb = opt$xvfb, suffix = opt$suffix, debver = opt$debver, plusdfsg= opt$plusdfsg, dryrun = opt$dryrun, compile = opt$compile) } } littler/inst/examples/cow.r0000755000176200001440000000052013706034372015504 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub::check_on_windows() wrapper # # Copyright (C) 2016 - 2020 Dirk Eddelbuettel # # Released under GPL (>= 2) checkargs <- "--no-manual --no-vignettes" checkfile <- function(f) if (file.exists(f)) rhub::check_on_windows(f, check_args=checkargs) if (length(argv) == 0) argv <- "." sapply(argv, checkfile) littler/inst/examples/c4c.r0000755000176200001440000000051413706034332015364 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub::check_for_cran() wrapper # # Copyright (C) 2016 - 2020 Dirk Eddelbuettel # # Released under GPL (>= 2) checkargs <- "--no-manual --no-vignettes" checkfile <- function(f) if (file.exists(f)) rhub::check_for_cran(f, check_args=checkargs) if (length(argv) == 0) argv <- "." sapply(argv, checkfile) littler/inst/examples/getRStudioDesktop.r0000755000176200001440000000120614372435416020345 0ustar liggesusers#!/usr/bin/env r # # A simple example to install RStudio Desktop # # Copyright (C) 2014 - 2023 Carl Boettiger and Dirk Eddelbuettel # # Released under GPL (>= 2) # # based on earlier https://raw.githubusercontent.com/rocker-org/rstudio-daily/master/latest.R # # todo: cmdline options for different download options / distro flavours setwd("/tmp") # go to /tmp url <- "https://dailies.rstudio.com/rstudio/latest/index.json" js <- jsonlite::fromJSON(url) fileurl <- js$products$electron$platforms$`jammy-amd64`$link file <- basename(fileurl) cat("'", fileurl, "' -> '", file, "'\n", sep="") download.file(fileurl, file) littler/inst/examples/testInstalled.r0000755000176200001440000000165213331043167017536 0ustar liggesusers#!/usr/bin/env r # # a simple example to test one or more installed packages ## load docopt package from CRAN library(docopt) library(tools) ## configuration for docopt doc <- "Usage: test.r [-l LIBLOC] [-o OUTDIR] [-t TYPES] [-s SRCDIR] [-h] [PACKAGES ...] -l --libloc LIBLOC location where package(s) are installed [default: NULL] -o --outdir OUTDIR the directory into which to write output files, should exist. [default: .] -t --types TYPES type(s) of tests to be done. [default: c('examples', 'tests', 'vignettes')] -s --srcdir SRCDIR Optional directory to look for .save files [default: NULL] -h --help show this help text" ## docopt parsing opt <- docopt(doc) ## installation given selected options and arguments testInstalledPackage(pkg = opt$PACKAGES, lib = opt$libloc, outDir = opt$outdir, types = opt$types, srcdir = opt$srcdir) littler/inst/examples/urlUpdate.r0000755000176200001440000000141413736146514016671 0ustar liggesusers#!/usr/bin/env r ## ## A simple tool to update URLs using R's checker ## ## Copyright (C) 2020 - present Dirk Eddelbuettel ## ## Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) if (!requireNamespace("urlchecker", quietly=TRUE)) stop("The 'urlchecker' package is required. Please install it from GitHub.", call.=FALSE) doc <- "Usage: urlUpdate.r [-c] [-h] [PACKAGES ...] -c --check-only check-only, i.e. do not auto-update URLs -h --help show this help text Simple wrapper to 'urlchecker::update_url(...)'. " opt <- docopt(doc) if (length(opt$PACKAGES) == 0) opt$PACKAGES <- "." # default argument current directory for (p in opt$PACKAGES) if (opt$check_only) print(urlchecker::url_check(p)) else urlchecker::url_update(p) littler/inst/examples/kitten.r0000755000176200001440000000231614075403647016224 0ustar liggesusers#!/usr/bin/env r library(docopt) ## configuration for docopt doc <- "Usage: kitten.r [-t TYPE] [-b] [-p] [-h] [-x] PACKAGE -t --type TYPE type of kitten: plain, rcpp, arma, eigen. [default: plain] -b --bunny install roxygen2 documentation example and roxygenize (only for plain) -p --puppy invoke tinytest::puppy to set up testing (only for plain) -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: kitten.r kitten.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } ## maybe support path, author, maintainer, email, license, ... ign <- switch(opt$type, plain = pkgKitten::kitten(opt$PACKAGE, puppy=opt$puppy, bunny=opt$bunny), rcpp = Rcpp::Rcpp.package.skeleton(opt$PACKAGE), arma = RcppArmadillo::RcppArmadillo.package.skeleton(opt$PACKAGE), eigen = RcppEigen::RcppEigen.package.skeleton(opt$PACKAGE)) if (opt$puppy) { stopifnot(requireNamespace("tinytest", quietly=TRUE)) tinytest::puppy(opt$PACKAGE) } littler/inst/examples/rd2md.r0000755000176200001440000000321014433760535015730 0ustar liggesusers#!/usr/bin/env r # # Convert NEWS.Rd to markdown # # Copyright (C) 2016 - 2017 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) library(tools) ## configuration for docopt doc <- "Usage: rd2md.r [-h] [-x] [--src REPODIR] [--out OUTDIR] [FILES...] -s --src REPODIR source root directory [default: ~/git] -o --out OUTDIR output directory [default: /tmp] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: rd2md.r foo # implies conversion of ~/git/foo/inst/NEWS.Rd rd2md.r ~/git/foo/inst/NEWS.Rd # converts given file to markdown rd2md.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } ## helper function convertArg <- function(p, src, out) { filename <- mdfile <- NULL if (file.exists(p)) { filename <- p mdfile <- paste0(filename, ".md") } else { filename <- file.path(src, p, "inst", "NEWS.Rd") if (!file.exists(filename)) { stop("No matching file found for ", p, call.=FALSE) } mdfile <- file.path(out, paste0(p, ".news.md")) } htmlfile <- paste0(filename, ".html") Rd2HTML(filename, htmlfile) cmd <- paste("pandoc", htmlfile, "-o", mdfile) system(cmd) unlink(htmlfile) cat("Converted", filename, "into", mdfile, "\n") } ## insert packages using helper function sapply(opt$FILES, convertArg, opt$src, opt$out) littler/inst/examples/getRStudioServer.r0000755000176200001440000000117014372435531020200 0ustar liggesusers#!/usr/bin/env r # # A simple example to install RStudio Desktop # # Copyright (C) 2014 - 2023 Carl Boettiger and Dirk Eddelbuettel # # Released under GPL (>= 2) # # based on earlier https://raw.githubusercontent.com/rocker-org/rstudio-daily/master/latest.R # # todo: cmdline options for different download options / distro flavours setwd("/tmp") # go to /tmp url <- "https://dailies.rstudio.com/rstudio/latest/index.json" js <- jsonlite::fromJSON(url) fileurl <- js$products$server$platforms$`jammy-amd64`$link cat("'", url, "' -> '", file, "'\n", sep="") download.file(fileurl, file) #, method="wget") littler/inst/examples/cos.r0000755000176200001440000000060413713572701015504 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub(".", platform="solaris-x86-patched") # # Copyright (C) 2016 - 2020 Dirk Eddelbuettel # # Released under GPL (>= 2) #checkargs <- "--no-manual --no-vignettes" solaris <- "solaris-x86-patched" checkfile <- function(f) if (file.exists(f)) rhub::check(f, platform=solaris)#, check_args=checkargs) if (length(argv) == 0) argv <- "." sapply(argv, checkfile) littler/inst/examples/cowu.r0000755000176200001440000000055214156430711015673 0ustar liggesusers#!/usr/bin/env r # # Minimal rhub windown UCRT check wrapper # # Copyright (C) 2016 - 2021 Dirk Eddelbuettel # # Released under GPL (>= 2) checkargs <- "--no-manual --no-vignettes" checkfile <- function(f) if (file.exists(f)) rhub::check(f, platform="windows-x86_64-devel-ucrt", check_args=checkargs) if (length(argv) == 0) argv <- "." sapply(argv, checkfile) littler/inst/examples/shiny.r0000755000176200001440000000126613331042746016054 0ustar liggesusers#!/usr/bin/env r # # Another example to run a shiny app # # Copyright (C) 2015 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## same as runApp() host <- getOption("shiny.host", "127.0.0.1") ## configuration for docopt doc <- paste0("Usage: shiny.r [-h] [--port PORT] [--host HOST] [--dir DIR] -p --port PORT port to use [default: NULL] -o --host HOST host string to use [default: ", host, "] -d --dir DIR directoru run application from [default: .] -h --help show this help text") ## docopt parsing opt <- docopt(doc) suppressMessages(library(shiny)) runApp(opt$dir, port=as.integer(opt$port), host=opt$host) littler/inst/examples/knit.r0000755000176200001440000000047513245105321015661 0ustar liggesusers#!/usr/bin/env r # # Simple helper script for knitr # # Dirk Eddelbuettel, May 2013 # # GPL-2 or later if (is.null(argv)) { cat("Need an argument FILE.Rnw\n") q(status=-1) } file <- argv[1] if (!file.exists(file)) { cat("File not found: ", file, "\n") q(status=-1) } require(knitr) knit2pdf(file) littler/inst/examples/render.r0000755000176200001440000000211513554556213016201 0ustar liggesusers#!/usr/bin/env r # # Another example to convert markdown # # Copyright (C) 2016 - 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: render.r [-c] [-h] [-x] [FILES...] -c --compact compact pdf file [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: render.r foo.Rmd bar.Rmd # convert two given files render.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } library(rmarkdown) ## helper function renderArg <- function(p) { if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE) render(p) if (opt$compact) { s <- gsub(".Rmd$", ".pdf", p) if (file.exists(s)) tools::compactPDF(s, gs_quality="ebook") } } ## render files using helper function sapply(opt$FILES, renderArg) littler/inst/examples/check.r0000755000176200001440000000664014454520425016002 0ustar liggesusers#!/usr/bin/env r # # Another example to check one or more packages, with option parsing # # Copyright (C) 2015 - 2023 Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## configuration for docopt doc <- "Usage: check.r [-h] [-x] [--as-cran] [--repo REPO] [--no-manvig] [--install-deps] [--install-kitchen] [--deb-pkgs PKGS...] [--use-sudo] [--library LIB] [--setwd DIR] [TARGZ ...] -a --as-cran customization similar to CRAN's incoming [default: FALSE] -r --repo REPO repository to use, or NULL for file [default: https://cloud.r-project.org] -n --no-manvig set the '--no-manual --no-vignettes' options [default: FALSE] -i --install-deps also install packages along with their dependencies [default: FALSE] -k --install-kitchen even install packages 'kitchen sink'-style up to suggests [default: FALSE] -l --library LIB when installing use this library [default: /usr/local/lib/R/site-library] -s --setwd DIR change to this directory before undertaking the test [default: ] -d --deb-pkgs PKGS also install binary .deb packages with their dependencies [default: FALSE] -u --use-sudo use sudo when installing .deb packages [default: FALSE] -h --help show this help text -x --usage show help and short example usage" ## docopt parsing opt <- docopt(doc) if (opt$usage) { cat(doc, "\n\n") cat("Examples: check.r -a -i -s /tmp myPkg_1.2-3.tar.gz # run a check --as-cran with depends in /tmp # for package myPkg_1.2-3.tar.gz check.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } args <- character() if (opt$as_cran) args <- c(args, "--as-cran") if (opt$no_manvig) args <- c(args, "--no-manual", "--no-vignettes") if (!is.null(opt$libdir)) .libPaths(opt$libdir) r <- getOption("repos") r["CRAN"] <- opt$repo options(repos = r) hasRcmdcheck <- requireNamespace("rcmdcheck", quietly=TRUE) if (hasRcmdcheck) suppressMessages(library("rcmdcheck")) ## helper functions checkArg <- function(p, args) { if (hasRcmdcheck) { #if (length(args) == 0) args <- "" res <- rcmdcheck(p, args=args) } else { tools:::.check_packages(c(p, args)) res <- NULL } res } ## helper function which switches to local (ie NULL) repo if matching file is presented installArg <- function(p, lib, rep) { p <- gsub("_.*tar\\.gz$", "", p) install.packages(pkgs=p, lib=lib, repos=rep, dependencies=if(opt$install_kitchen) c("Depends", "Imports", "LinkingTo", "Suggests") else TRUE ) } ## if binary .deb files are to be installed first: if (length(opt$deb_pkgs) > 1 || opt$deb_pkgs != FALSE) { cmd <- paste0(if (opt$use_sudo) "sudo " else "", "apt-get install -y ", paste(opt$deb_pkgs, collapse=" ")) system(cmd) } ## if dependencies (or even suggests) are to be installed first: if (opt$install_deps || opt$install_kitchen) sapply(opt$TARGZ, installArg, opt$lib, opt$repo) ## change directory if a target directory was given if (!is.null(opt$setwd)) setwd(opt$setwd) ## installation given selected options and arguments sapply(opt$TARGZ, checkArg, args) littler/inst/examples/installBSPM.r0000755000176200001440000000342313735736364017065 0ustar liggesusers#!/usr/bin/env r # # A simple example to install from RSPM # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) if (Sys.info()[["sysname"]] != "Linux") stop(paste("Currently only supported on Linux.", "Please get in touch if you want to / can help on macOS"), call.=FALSE) if (!requireNamespace("bspm", quietly=TRUE)) stop("The 'bspm' package is required. Please install it.", call.=FALSE) ## configuration for docopt doc <- paste0("Usage: installBSPM.r [-h] [-x] ARGS... -h --help show this help text -x --usage show help and short example usage Note that BSPM support is still somewhat experimental. It also requires support (via the 'bspm' package) of the underlying system package manager, which is known to work for apt/dpkg (Debian, Ubuntu, ...) and dnf/yum (Fedora/RH/CentOS). Please file issue tickets at the Github repo for littler (or bspm) if you can help with additional settings. Note that to take fullest advantage of BSPM, you also need the system package manager to know about the largest number of pre-compiled packages. For Ubuntu, this means the exanded 'ppa:c2d4u.team/c2d4u4.0+' repo, and for Fedora the say 'iucar/cran' Copr archive. This user-level script does not attempt to later your system-level repository information. ") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat(" Basic usage: installBSPM.r digest installBSPM.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } library(bspm) bspm::enable() options(bspm.sudo=TRUE) install.packages(opt$ARGS) littler/inst/examples/install.r0000755000176200001440000000516513600257644016376 0ustar liggesusers#!/usr/bin/env r # # A simple example to install one or more packages # # Note that a more featureful version exists in install2.r # with an added dependency on the 'docopt' argument parser # # Copyright (C) 2006 - 2019 Dirk Eddelbuettel # # Released under GPL (>= 2) if (is.null(argv) | length(argv) < 1) { if (file.exists("DESCRIPTION") && file.exists("NAMESPACE")) { ## we are in a source directory, so build it message("* installing *source* package found in current working directory ...") argv <- "." } else { cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n\n") cat("Installs pkg1, ... from existing files with matching extension.\n") cat("Use \".\" to install the package in current working directory.\n\n") cat("Use (remote) packages pkgname1 pkgname2 pkgname3 ... for parallel\n") cat("installation if 'Ncpus' option is set (or multiple cores present).\n\n") cat("Set environment variables REPOS and LIBLOC to overrride defaults.\n\n") q() } } ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") ## adjust as necessary, see help('download.packages') ## littler can now read ~/.littler.r and /etc/littler.r to set this repos <- getOption("repos") ## NULL means install file, and we supported env var previously if (Sys.getenv("REPOS") == "NULL") repos = NULL ## this makes sense on Debian where no packages touch /usr/local lib.loc <- Sys.getenv("LIBLOC", unset="/usr/local/lib/R/site-library") ## helper function to for existing files with matching extension isMatchingFile <- function(f) (file.exists(f) && grepl("(\\.tar\\.gz|\\.tgz|\\.zip)$", f)) || (f == ".") ## helper function which switches to local (ie NULL) repo if matching file is presented installArg <- function(f, lib, rep) install.packages(pkgs=f, lib=lib, repos=if (isMatchingFile(f)) NULL else repos) ## check arguments for local files -- if none, then we can pass vector on isLocal <- sapply(argv, isMatchingFile) if (any(isLocal)) { ## use argv [filtered by installArg()], lib.loc and repos to install the packages sapply(argv, installArg, lib.loc, repos) } else { ## all remote, so pass argv so Ncpus can enter install.packages(pkgs=argv, lib=lib.loc, repos=repos, Ncpus=getOption("Ncpus", max(1L, parallel::detectCores()))) } ## clean up any temp file containing CRAN directory information sapply(list.files(path=tempdir(), pattern="^(repos|libloc).*\\.rds$", full.names=TRUE), unlink) littler/inst/examples/install2.r0000755000176200001440000001502214407063510016442 0ustar liggesusers#!/usr/bin/env r # # A second example to install one or more packages, now with option parsing # # Copyright (C) 2011 - 2014 Dirk Eddelbuettel # Copyright (C) 2014 - 2017 Carl Boettiger and Dirk Eddelbuettel # Copyright (C) 2018 - 2023 Carl Boettiger, Dirk Eddelbuettel, Brandon Bertelsen, and SHIMA Tatsuya # # Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) ## default to first library location in .libPaths() libloc <- .libPaths()[1] ## configuration for docopt doc <- paste0("Usage: install2.r [-l LIBLOC] [-h] [-x] [-s] [-d DEPS] [-n NCPUS] [-r REPOS...] [-m METHOD] [-t TYPE] [--error] [--] [PACKAGES ...] -l --libloc LIBLOC location in which to install [default: ", libloc, "] -d --deps DEPS install suggested dependencies as well [default: NA] -n --ncpus NCPUS number of processes to use for parallel install, -1 selects all cores [default: getOption] -r --repos REPOS repositor(y|ies) to use, or NULL for file [default: getOption] -e --error throw error and halt instead of a warning [default: FALSE] -s --skipinstalled skip installing already installed packages [default: FALSE] -m --method METHOD method to be used for downloading files [default: auto] -t --type TYPE installation type as used by `install.packages` [default: getOption] -h --help show this help text -x --usage show help and short example usage") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where PACKAGES... can be one or more CRAN package names, or local (binary or source) package files (where extensions .tar.gz, .tgz and .zip are recognised). Optional arguments understood by R CMD INSTALL can be passed interspersed in the PACKAGES, though this requires use of '--'. Examples: install2.r -l /tmp/lib Rcpp BH # install into given library install2.r -- --with-keep.source drat # keep the source install2.r -- --data-compress=bzip2 stringdist # prefer bz2 compression install2.r \".\" # install package in current directory install2.r -n 6 ggplot2 # parallel install: (6 processes) install2.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } ## docopt results are characters, so if we meant NULL we have to set NULL if (length(opt$repos) == 1 && "NULL" %in% opt$repos) { opt$repos <- NULL } if ("getOption" %in% opt$repos) { ## as littler can now read ~/.littler.r and/or /etc/littler.r we can preset elsewhere opt$repos <- c(opt$repos[which(opt$repos != "getOption")], getOption("repos")) } if (opt$ncpus == "getOption") { opt$ncpus <- getOption("Ncpus", 1L) } else if (opt$ncpus == "-1") { ## parallel comes with R 2.14+ opt$ncpus <- max(1L, parallel::detectCores()) } ## type should reflects bspm where available if (opt$type == "getOption") { opt$type <- getOption("pkgType") #if (requireNamespace("bspm", quietly=TRUE) && Sys.info()[["sysname"]] == "Linux") opt$type <- "binary-source" } ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") install_packages2 <- function(pkgs, ..., error = FALSE, skipinstalled = FALSE) { e <- NULL capture <- function(e) { if (error) { catch <- grepl("(download|installation) of package .* failed", e$message) || grepl("(dependenc|package).*(is|are) not available", e$message) || grepl("installation of package.*had non-zero exit status", e$message) || grepl("installation of .+ package(|s) failed", e$message) if (catch) { e <<- e } } } if (skipinstalled) { pkgs <- setdiff(pkgs, installed.packages()[,1]) } if (length(pkgs) > 0) { withCallingHandlers(install.packages(pkgs, ...), warning = capture) if (!is.null(e)) { stop(e$message, call. = FALSE) } } } ## helper function to for existing files with matching extension isMatchingFile <- function(f) (file.exists(f) && grepl("(\\.tar\\.gz|\\.tgz|\\.zip)$", f)) || (f == ".") ## helper function which switches to local (ie NULL) repo if matching file is presented installArg <- function(f, lib, rep, dep, iopts, error, skipinstalled, ncpus, method, type) { install_packages2(pkgs=f, lib=lib, repos=if (isMatchingFile(f)) NULL else rep, dependencies=dep, INSTALL_opts=iopts, Ncpus = ncpus, method = method, type = type, error = error, skipinstalled = skipinstalled) } ## strip out arguments to be passed to R CMD INSTALL isArg <- grepl('^--',opt$PACKAGES) installOpts <- opt$PACKAGES[isArg] opt$PACKAGES <- opt$PACKAGES[!isArg] if (length(opt$PACKAGES)==0 && file.exists("DESCRIPTION") && file.exists("NAMESPACE")) { ## we are in a source directory, so build it message("* installing *source* package found in current working directory ...") opt$PACKAGES <- "." } ## helper function to for existing files with matching extension isMatchingFile <- function(f) (file.exists(f) && grepl("(\\.tar\\.gz|\\.tgz|\\.zip)$", f)) || (f == ".") ## check arguments for local files -- if none, then we can pass vector on isLocal <- sapply(opt$PACKAGES, isMatchingFile) ## for any local sources loop explicitly as before, otherwise for remote ## packages pass vector to install_packages2 which does the rest (and ## possibly in parallel using up to ncpus) if (any(isLocal)) { sapply(opt$PACKAGES, installArg, opt$libloc, opt$repos, opt$deps, installOpts, opt$error, opt$skipinstalled, opt$ncpus, opt$method, opt$type) } else { install_packages2(pkgs = opt$PACKAGES, lib = opt$libloc, repos = opt$repos, dependencies = opt$deps, INSTALL_opts = installOpts, Ncpus = opt$ncpus, method = opt$method, type = opt$type, error = opt$error, skipinstalled = opt$skipinstalled) } ## clean up any temp file containing CRAN directory information sapply(list.files(path=tempdir(), pattern="^(repos|libloc).*\\.rds$", full.names=TRUE), unlink) littler/inst/examples/getPandoc.r0000755000176200001440000000100714160343033016611 0ustar liggesusers#!/usr/bin/env r # # A downloader for Pandoc's amd64 .deb # # Copyright (C) 2021 Dirk Eddelbuettel # # Released under GPL (>= 2) # # TODO: Maybe make the .deb filter an option library(RcppSimdJson) url <- "https://api.github.com/repos/jgm/pandoc/releases/latest" res <- RcppSimdJson::fload(url) files <- res$assets[, "browser_download_url"] deb <- files[grepl("-amd64\\.deb$", files)] tgt <- file.path("/tmp", basename(deb)) download.file(deb, tgt, quiet=TRUE) cat("Downloaded '", deb, "' as '", tgt, "'\n", sep="") littler/inst/examples/getQuartoCli.r0000755000176200001440000000077714121367114017330 0ustar liggesusers#!/usr/bin/env r # # A downloader for Quarto # # Copyright (C) 2021 Dirk Eddelbuettel # # Released under GPL (>= 2) # # TODO: Maybe make the .deb filter an option library(RcppSimdJson) url <- "https://api.github.com/repos/quarto-dev/quarto-cli/releases/latest" res <- RcppSimdJson::fload(url) files <- res$assets[, "browser_download_url"] deb <- files[grepl("\\.deb$", files)] tgt <- file.path("/tmp", basename(deb)) download.file(deb, tgt, quiet=TRUE) cat("Downloaded '", deb, "' as '", tgt, "'\n", sep="") littler/inst/examples/fsizes.r0000755000176200001440000000034313245105321016211 0ustar liggesusers#!/usr/bin/env r # # A simple example to do statistics on files # # Copyright (C) 2006 - 2014 Dirk Eddelbuettel # # Released under GPL (>= 2) fsizes <- as.integer(readLines(file("stdin"))) print(summary(fsizes)) stem(fsizes) littler/inst/examples/tt.r0000755000176200001440000000632714565637303015365 0ustar liggesusers#!/usr/bin/env -S r -t # # tinytest wrapper # # Copyright (C) 2019 - 2024 Dirk Eddelbuettel # # Released under GPL (>= 2) if (!requireNamespace("tinytest", quietly=TRUE)) stop("Please install 'tinytest' from CRAN.", call. = FALSE) ## load docopt and tinytest from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN library(tinytest) # or can use devtools as a fallback }) ## configuration for docopt doc <- "Usage: tt.r [-h] [-x] [-a] [-b] [-c] [-d] [-f] [-n NCPUS] [-p] [-s] [-z] [ARG...] -a --all use test_all mode [default: FALSE] -b --build use build-install-test mode [default: FALSE] -c --ci set environment variable CI to TRUE [default: FALSE] -d --directory use directory mode [default: FALSE] -f --file use file mode [default: FALSE] -n --ncpus NCPUS use 'ncpus' in parallel [default: getOption] -p --package use package mode [default: FALSE] -s --silent use silent and do not print result [default: FALSE] -z --effects show side effects [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where ARG... can be one or more file name, or directories or package names. Examples: tt.r -a # test 'all files' from current directory tt.r -f testfile.R # test the file 'testfile.R' tt.r -d testdir # test all files in the directory 'testdir' tt.r -p testpkg # test the (installed) package 'testpkg' tt.r -n 1 -p testpkg # test (installed) package 'testpkg' in serial mode tt.r # run test_all() if DESCRIPTION && inst/tinytest/ tt.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } sideeffects <- if (opt$effects) TRUE else FALSE # by default, do not show side effects if (opt$ncpus == "getOption") { opt$ncpus <- getOption("Ncpus", 1L) } else if (opt$ncpus == "-1") { ## parallel comes with R 2.14+ opt$ncpus <- max(1L, parallel::detectCores()) } else { opt$ncpus <- as.integer(opt$ncpus) } if (opt$ci) { Sys.setenv(CI="TRUE") } res <- NULL if (opt$all) { res <- test_all(if (length(opt$ARG) == 0) "." else opt$ARG, side_effects=sideeffects) } else if (opt$build) { res <- build_install_test(if (length(opt$ARG) == 0) "." else opt$ARG, side_effects=sideeffects, ncpu=opt$ncpus) } else if (opt$file) { res <- run_test_file(opt$ARG, side_effects=sideeffects) } else if (opt$directory) { if (length(opt$ARG) == 0 && dir.exists("inst/tinytest")) opt$ARG <- "inst/tinytest" res <- run_test_dir(opt$ARG, side_effects=sideeffects) } else if (opt$package) { if (opt$ncpus == 1L) { res <- test_package(opt$ARG, side_effects=sideeffects) } else { res <- test_package(opt$ARG, side_effects=sideeffects, ncpu=opt$ncpus) } } else if (file.exists("DESCRIPTION") && dir.exists("inst/tinytest")) { res <- test_all(".", side_effects=sideeffects) } if (!opt$silent && !is.null(res)) print(res) littler/inst/examples/installDeps.r0000755000176200001440000000330714532414243017201 0ustar liggesusers#!/usr/bin/env r # # A simple example to install dependencies # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN library(remotes) # or can use devtools as a fallback }) ## configuration for docopt doc <- "Usage: installDeps.r [-h] [-x] [-s] [-d DEPS] [ARGS] -d --deps DEPS Logical or char, see '?install.packages', use 'TRUE' for all, [default: NA] -s --suggests Add 'Suggests' to dependencies, shortcut for '--deps TRUE' -h --help show this help text -x --usage show help and short example usage " opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat(" Basic usage: installDeps.r . installDeps.r somePackage_1.2.3.tar.gz The argument to '--deps' can be a combinations of 'Depends', 'Imports', 'LinkingTo', 'Suggests', and 'Enhances'. Default of 'NA' means first three, 'TRUE' means the first four. installDeps.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (length(opt$ARGS)==0 && file.exists("DESCRIPTION") && file.exists("NAMESPACE")) { ## we are in a source directory, so build it message("* installing deps for *source* package found in current working directory ...") opt$ARGS <- "." } if (opt$deps == "TRUE") opt$deps <- TRUE if (opt$deps == "NA") opt$deps <- NA if (opt$suggests) opt$deps <- TRUE ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") invisible(sapply(opt$ARGS, function(r) install_deps(r, dependencies=opt$deps))) littler/inst/examples/ciw.r0000755000176200001440000000527414575567031015521 0ustar liggesusers#!/usr/bin/env r # # ciw wrapper # # Copyright (C) 2024 Dirk Eddelbuettel # # Released under GPL (>= 2) if (!requireNamespace("ciw", quietly=TRUE)) stop("Please install 'eddelbuettel/ciw' from GitHub.", call. = FALSE) ## load docopt and cranincoming suppressMessages({ library(ciw) # at GitHub under eddelbuettel for now library(docopt) # we need docopt (>= 0.3) as on CRAN }) ## configuration for docopt doc <- "Usage: ciw.r [-h] [-x] [-a] [-m] [-i] [-t] [-p] [-w] [-r] [-s] [-n] [-u] [-l rows] [-z] [ARG...] -m --mega use 'mega' mode of all folders (see --usage) -i --inspect visit 'inspect' folder -t --pretest visit 'pretest' folder -p --pending visit 'pending' folder -w --waiting visit 'waiting' folder -r --recheck visit 'recheck' folder -a --archive visit 'archive' folder -n --newbies visit 'newbies' folder -u --publish visit 'publish' folder -s --skipsort skip sorting of aggregate results by age -l --lines rows print top 'rows' of the result object [default: 50] -z --ping run the connectivity check first -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where ARG... can be one or more file name, or directories or package names. Examples: ciw.r -ip # run in 'inspect' and 'pending' mode ciw.r -a # run with mode 'auto' resolved in incoming() ciw.r # run with defaults, same as '-itpwr' When no argument is given, 'auto' is selected which corresponds to 'inspect', 'waiting', 'pending', 'pretest', and 'recheck'. Selecting '-m' or '--mega' are select as default. Folder selecting arguments are cumulative; but 'mega' is a single selections of all folders (i.e. 'inspect', 'waiting', 'pending', 'pretest', 'recheck', 'archive', 'newbies', 'publish'). ciw.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } args <- character() # start with no arguments folders <- c("inspect", "waiting", "pending", "pretest", "recheck", "archive", "newbies", "publish") for (dir in folders) # grow folder set as a select if (opt[[dir]]) args <- c(args, dir) if (opt$mega) args <- folders # or respect the nuclear option if (length(args) == 0) args <- "auto" chk <- length(args) <= 1 # ask for argument check only on short argument vectoe res <- incoming(args, chk, isFALSE(opt$skipsort), isTRUE(opt$ping)) nr <- as.integer(opt$lines) print(head(res, nr), nrows=nr) littler/inst/examples/mph.r0000755000176200001440000000205312613230464015477 0ustar liggesusers#!/usr/bin/env r # # Convert miles-per-hour, time-distance measure settable # on treadmiles, to different race times. # # Copyright (C) 2006 - 2014 Dirk Eddelbuettel # # Released under GPL (>= 2) if (is.null(argv) | length(argv)<1) { cat("Usage: mph.r mph\n") q() } dig <- 5 mph <- as.numeric(argv[1]) cat("Mph : ",format(mph,digits=dig),"\n"); hourminsec <- function(totalsecs){ ret <- list(hour=0,min=0,sec=0) ret$hour <- floor(totalsecs / 3600) totalsecs <- totalsecs - (ret$hour * 3600) ret$min <- floor(totalsecs / 60) ret$sec <- totalsecs - (ret$min * 60) ret } minutes <- floor(60/mph) pminute <- 60/mph - minutes secs <- floor(60 * (pminute)) secspermile <- 60*minutes + secs outrace <- function(title,miles){ race <- hourminsec(miles*secspermile) cat(sprintf("%-8s: %2.f hours %2.f min %2.f sec\n",title, race$hour,race$min, race$sec)) } kilodiv <- 1.609344 # kilometer divisor outrace('1 mile',1) outrace('3 miles',3) outrace('5k',5/kilodiv) outrace('10k',10/kilodiv) outrace('Marathon',42.195/kilodiv) outrace('Ultra',100) littler/inst/examples/pnrrs.r0000755000176200001440000000025513245105321016054 0ustar liggesusers#!/usr/bin/env r if (getRversion() < "3.4.0") stop("Not available for R (< 3.4.0). Please upgrade.", call.=FALSE) tools::package_native_routine_registration_skeleton(".") littler/inst/examples/installPPM.r0000755000176200001440000000533014536123346016745 0ustar liggesusers#!/usr/bin/env r # # A simple example to install from RSPM/PPM/P3M # # Copyright (C) 2020 - present Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) if (Sys.info()[["sysname"]] != "Linux") stop(paste("Currently only supported on Linux.", "Please get in touch if you want to / can help on macOS"), call.=FALSE) code <- "" if (file.exists("/etc/os-release")) { # next block borrowed from my chshli package on GitHub osrel <- read.table("/etc/os-release", sep="=", row.names=1, col.names=c("key","value")) if ("REDHAT_SUPPORT_PRODUCT" %in% rownames(osrel)) { # 'centos7' for CentOS/RHEL 7, 'centos8' for CentOS/RHEL 8 and Fedora ver <- osrel["REDHAT_SUPPORT_PRODUCT_VERSION", "value"] code <- paste0("centos", min(as.numeric(ver), 8)) } else if ("VERSION_CODENAME" %in% rownames(osrel)) { code <- osrel["VERSION_CODENAME", "value"] } } if ((code == "") && (Sys.which("lsb_release") != "")) { code <- system("lsb_release -c | awk '{print $2}'", intern=TRUE) } ## configuration for docopt doc <- paste0("Usage: install(RSPM|PPM|P3M).r [-c code] [-l libloc] [-h] [-x] ARGS... -c --code ARG set code name for distribution [default: ", code, "] -l --libloc ARG location in which to install [default: ", .libPaths()[1], "] -h --help show this help text -x --usage show help and short example usage Note that RSPM/PPM/P3M support may be somewhat experimental. There may not be binaries for every possibly OS, distibution, and R version. Please file issue tickets at the Github repo for littler if you can contribute additional checks and values. As RSPM has been renamed to PPM and then P3M, we now install the script thrice via hardlinks. ") opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n") cat("Basic usage: installRSPM.r digest # install digest for default release '", code, "' installPPM.r -c jammy digest # install digest for Ubuntu 'jammy' installP3M.r -c bookworn digest # install digest for Debian 'bookworm' install(RSPM|PPM|P3M).r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n", sep="") q("no") } if (!is.null(opt$libloc)) .libPaths(opt$libloc) r <- getOption("repos") r["CRAN"] <- paste0("https://p3m.dev/all/__linux__/", opt$code, "/latest") options(repos = r) options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version$platform, R.version$arch, R.version$os))) invisible(sapply(opt$ARGS, function(r) install.packages(r))) littler/inst/examples/mdweave2html.r0000755000176200001440000000057214152154325017317 0ustar liggesusers#!/usr/bin/env r # # Simple helper script for simplermarkdown, reusing the older one for knitr # # Dirk Eddelbuettel, May 2013, Dec 2021 # # GPL-2 or later if (is.null(argv)) { cat("Need an argument FILE.md\n") q(status=-1) } file <- argv[1] if (!file.exists(file)) { cat("File not found: ", file, "\n") q(status=-1) } simplermarkdown::mdweave_to_html(file) littler/inst/examples/installGithub.r0000755000176200001440000000472114521176660017537 0ustar liggesusers#!/usr/bin/env r # # A simple example to install one or more packages from GitHub # # Copyright (C) 2014 - 2023 Carl Boettiger and Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN library(remotes) # or can use devtools as a fallback }) ## configuration for docopt doc <- "Usage: installGithub.r [-h] [-x] [-d DEPS] [-u UPDATE] [-r REPOS...] [-t TYPE] [GHREPOS...] -d --deps DEPS install suggested dependencies as well? [default: NA] -u --update UPDATE update dependencies? [default: TRUE] -r --repos REPOS repositor(y|ies) to use if deps required [default: getOption] -t --type TYPE installation type as used by `install.packages` [default: source] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where GHREPOS... is one or more GitHub repositories. Basic usage: installGithub.r RcppCore/RcppEigen Install multiple R packages from GitHub: installGithub.r RcppCore/Rcpp RcppCore/RcppEigen Install multiple R packages from GitHub listing the packages on separate lines with some comments: installGithub.r \\ RcppCore/Rcpp \\ RcppCore/RcppEigen Installing a specific branch, tag or commit: installGithub.r RcppCore/Rcpp@1.0.0 Installing from a repo subdirectory: installGithub.r chanzuckerberg/cellxgene-census/api/r/cellxgene.census Setting multiple R package repositories to install dependencies of the R package: installGithub.r -r https://cloud.r-project.org -r https://eddelbuettel.github.io/drat RcppCore/RcppEigen installGithub.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } if (length(opt$repos) == 1 && opt$repos == "getOption") { ## as littler can now read ~/.littler.r and/or /etc/littler.r we can preset elsewhere opt$repos <- getOption("repos") } opt$update <- as.logical(opt$update) invisible(sapply(opt$GHREPOS, function(r) install_github(r, dependencies = opt$deps, upgrade = opt$update, repos = opt$repos, type = opt$type))) littler/inst/examples/tttf.r0000755000176200001440000000310114571654243015701 0ustar liggesusers#!/usr/bin/env -S r -t # # testthat::test_file wrapper # # Copyright (C) 2019 - 2024 Dirk Eddelbuettel # # Released under GPL (>= 2) if (!requireNamespace("testthat", quietly=TRUE)) stop("Please install 'testthat' from CRAN.", call. = FALSE) ## load docopt and tinytest from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) ## configuration for docopt doc <- "Usage: tttf.r [-l LIB] [-s FILE] [-c] [-d] [-h] [-x] ARG -l --library LIB load named library, LIB can be comma-separated -s --source FILE source a named file -d --loadall run `devtools::load_all()` -c --ci set environment variable CI to TRUE [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where ARG can be a package directory. Examples: tttf.r test-testfile.r # run test_file() on the given file tttf.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (!is.null(opt$library)) { for (s in strsplit(opt$library, ",")[[1]]) { library(s, character.only=TRUE, verbose=TRUE) } } if (!file.exists(opt$ARG)) { stop("No such file.", call. = FALSE) } if (!is.null(opt$source) && file.exists(opt$source)) { source(opt$source) } if (opt$ci) { Sys.setenv(CI="TRUE") } if (opt$loadall) { suppressMessages(devtools::load_all()) } testthat::test_file(path=opt$ARG) littler/inst/examples/installRepo.r0000755000176200001440000000443713600257721017221 0ustar liggesusers#!/usr/bin/env r # # A simple example to install one or more packages from GitHub # # Copyright (C) 2014 - 2017 Carl Boettiger, Dirk Eddelbuettel and Alexios Galanos # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN library(remotes) # can use devtools as a fallback }) ## configuration for docopt doc <- "Usage: installRepo.r [-l LIBLOC] [-h] [-x] [-d DEPS] [-r REPOS] [-s subdir] [SRC] -l --libloc LIBLOC location in which to install [default: /usr/local/lib/R/site-library] -d --deps DEPS Install suggested dependencies as well? [default: NA] -r --repos REPOS The repository, eg github, bitbucket, svn, or url [default: github] -s --subdir SUBDIR For svn or url, an optional sub-directory within the repo -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where SRC is either a git-style repo (author/repo) or a URL for svn. Examples: installRepo.r RcppCore/RcppEigen # standard GitHub installRepo..r -r bitbucket alexiosg/rugarch # using BitBucket instead installRepo.r -r svn https://github.com/hadley/stringr # from Subversion or a URL installRepo.r -r url https://cran.rstudio.com/src/contrib/Archive/digest/digest_0.5.0.tar.gz installRepo.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } if (is.null(opt$SRC)) q("no") # need optional args to support -x ## ensure installation is stripped Sys.setenv("_R_SHLIB_STRIP_"="true") ## installation given selected options and arguments switch(tolower(opt$repos), github = install_github(opt$SRC, lib=opt$libloc, dependencies=opt$deps), bitbucket = install_bitbucket(opt$SRC, lib=opt$libloc, dependencies=opt$deps), svn = install_svn(opt$SRC, subdir=opt$subdir, lib=opt$libloc, dependencies=opt$deps), url = install_url(opt$SRC, subdir=opt$subdir, lib=opt$libloc, dependencies=opt$deps)) littler/inst/examples/pace.r0000755000176200001440000000201612613230464015622 0ustar liggesusers#!/usr/bin/env r # # a simple example to convert miles and times into a pace # where the convention is that we write e.g. 37 min 15 secs # as 37.15 -- so a call 'pace.r 4.5 37.15' yields a pace of # 8.1667, ie 8 mins 16.67 secs per mile # # Copyright (C) 2006 - 2014 Dirk Eddelbuettel # # Released under GPL (>= 2) if (is.null(argv) | length(argv)!=2) { cat("Usage: pace.r miles time\n") q() } dig <- 5 rundist <- as.numeric(argv[1]) runtime <- as.numeric(argv[2]) cat("Miles : ", format(rundist, digits=dig), "\n") cat("Time : ", format(runtime, digits=dig), "\n") totalseconds <- floor(runtime)*60 + (runtime-floor(runtime))*100 totalsecondspermile <- totalseconds / rundist minutespermile <- floor(totalsecondspermile/60) secondspermile <- totalsecondspermile - minutespermile*60 pace <- minutespermile + secondspermile/100 cat("Pace : ", format(minutespermile, digits=1), "min", format(secondspermile, digits=dig), "sec\n") cat("Mph : ", format( (rundist * 3600)/totalseconds, digits=dig),"\n") littler/inst/examples/fileOps.r0000755000176200001440000000141112613230464016311 0ustar liggesusers#!/usr/bin/env r # # A simple example to do operations on files # # Copyright (C) 2014 Dirk Eddelbuettel # # Released under GPL (>= 2) ## read files files <- dir("..", full.names=TRUE) ## creation time as Date ctimes <- as.Date(file.info(files)$ctime) ## select based on time window -- something arbitrary now <- Sys.Date() ## these are appromiximative, could be refined using DateTimeClasses sixmon <- now - 365.25/2 twelvemon <- now - 365.2 ind <- ctimes >= twelvemon & ctimes <= sixmon if (sum(ind) > 0) { cat("The following files are between six and twelve months old\n") print(files[ind]) } ## do something ## print(files[ind]) ## or rename / move to subdir ## mkdir("newDir") ## file.rename(files[ind], "newDir") ## can also use gsub() etc to rename littler/inst/examples/compiledDeps.r0000755000176200001440000000231114001103143017302 0ustar liggesusers#!/usr/bin/r ## ## Show all dependencies of a package containing native ("compiled") code ## ## Copyright (C) 2021 - present Dirk Eddelbuettel ## ## Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) if (!requireNamespace("data.table", quietly=TRUE)) stop("The 'data.table' package is required. Please install it.", call.=FALSE) doc <- "Usage: urlUpdate.r [-c] [-n] [-h] PACKAGE -c --compact compact, print only package vector -n --nonrecursive non-recursive dependencies [default: FALSE] -h --help show this help text Simple wrapper around 'tools::CRAN_package_db()' and 'tools::package_depdencies()'. " opt <- docopt(doc) suppressMessages(library(data.table)) pkg <- opt$PACKAGE rec <- !opt$nonrecursive db <- setDT(tools::CRAN_package_db(), key="Package") revs <- data.table(Package=tools::package_dependencies(pkg, recursive=rec, db=db)[[1]], key="Package") res <- db[revs, .(Package,Version,Priority,NeedsCompilation)][ is.na(Priority)==TRUE & is.na(Version)==FALSE & NeedsCompilation=="yes"][ ,.(Package,Version)] if (opt$compact) { cat(paste(res[[1]], collapse=" "), "\n") } else { options("datatable.print.nrows"=nrow(res)) print(res) } littler/inst/examples/doi2bib.r0000755000176200001440000000203414574570636016244 0ustar liggesusers#!/usr/bin/env r ## ## Convert a DOI to it bibtext field ## ## Copyright (C) 2024 Dirk Eddelbuettel ## ## Released under GPL (>= 2) ## ## With thanks to https://bsky.app/profile/rmcelreath.bsky.social/post/3knkqvogwbc25 ## load docopt package from CRAN library(docopt) if (!requireNamespace("httr", quietly=TRUE)) stop("Please install 'httr' from CRAN.", call. = FALSE) library(httr) ## configuration for docopt doc <- "Usage: doi2bib.r [-h] [-x] DOI... -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: doi2bib.r 10.1002/evan.10110 10.1007/978-1-4614-6868-4 doi2bib.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } for (arg in opt$DOI) { res <- GET(paste0("https://doi.org/", arg), add_headers(Accept="application/x-bibtex")) cat(rawToChar(res$content)) } littler/inst/examples/tttl.r0000755000176200001440000000274514565140630015715 0ustar liggesusers#!/usr/bin/env -S r -t # # testthat::test_local wrapper # # Copyright (C) 2019 - 2024 Dirk Eddelbuettel # # Released under GPL (>= 2) if (!requireNamespace("testthat", quietly=TRUE)) stop("Please install 'testthat' from CRAN.", call. = FALSE) ## load docopt and tinytest from CRAN suppressMessages({ library(docopt) # we need docopt (>= 0.3) as on CRAN }) ## configuration for docopt doc <- "Usage: tttl.r [-h] [-x] [-c] [ARG] -c --ci set environment variable CI to TRUE [default: FALSE] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("where ARG can be a package directory. Examples: tttl.r # run test_local() if DESCRIPTION && tests/testthat/ tttl.r # run test_local() if in tests/testthat directory tttl.r is part of littler which brings 'r' to the command-line. See https://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } if (!is.null(opt$ARG) && dir.exists(opt$arg)) { setwd(opt$ARG) } if (opt$ci) { Sys.setenv(CI="TRUE") } if (file.exists(file.path(getwd(), "..", "..", "DESCRIPTION"))) { setwd(file.path(getwd(), "..", "..")) } if (file.exists(file.path(getwd(), "..", "DESCRIPTION"))) { setwd("..") } if (file.exists("DESCRIPTION") && dir.exists("tests/testthat")) { testthat::test_local("tests/testthat") } littler/inst/examples/build.r0000755000176200001440000000142614135774702016026 0ustar liggesusers#!/usr/bin/env r ## ## A simple example to builds a source tar.gz file ## ## Copyright (C) 2017 - 2021 Dirk Eddelbuettel ## ## Released under GPL (>= 2) ## load docopt package from CRAN library(docopt) doc <- "Usage: build.r [-f] [-h] [PACKAGES ...] -f --fast skip building vignettes and manual -h --help show this help text Simple wrapper to 'R CMD build ...' which calls 'tools:::.build_packages()' just like the 'R CMD build' invocation. " opt <- docopt(doc) if (length(opt$PACKAGES) == 0) opt$PACKAGES <- "." # default argument current directory argv <- if (opt$fast) c("--no-build-vignettes", "--no-manual", opt$PACKAGES) else opt$PACKAGES extraargs <- c("--compact-vignettes=both", "--resave-data", argv) tools:::.build_packages(extraargs, no.q=interactive()) littler/inst/doc/0000755000176200001440000000000014577617425013475 5ustar liggesuserslittler/inst/doc/littler-examples.md0000644000176200001440000003054014136370627017303 0ustar liggesusers --- title: "Littler Examples" author: "Dirk Eddelbuettel" date: "Originally written 2015-10-28; Updated 2017-12-10, 2018-05-24, 2019-01-06, 2019-06-09 and 2020-06-16" css: "water.css" --- ## Overview We show and discuss a few of the files included in the `inst/examples/` source directory of [littler](http://dirk.eddelbuettel.com/code/littler.html) (which becomes the `examples/` directory once installed). In a few cases we remove comment lines to keep things more concise on this page. We use `$` to denote a shell (_i.e._ terminal) prompt. Note that some systems (such as macOS) cannot install littler as `r` (as lower-case and upper-case are by default the same; not a great idea). And for example the `zsh` has `r` as a builtin so you would have to use `/usr/bin/r`. See the [littler FAQ](littler-faq.html) for more. ## Simple Direct Command-line Use [littler](http://dirk.eddelbuettel.com/code/littler.html) can be used directly on the command-line just like, say, `bc`, easily consuming standard input from a pipe: ```bash $ echo 'cat(pi^2,"\n")' | r 9.869604 ``` Equivalently, commands that are to be evaluated can be given on the command-line ```bash $ r -e 'cat(pi^2, "\n")' 9.869604 ``` But unlike bc(1), GNU R has a vast number of statistical functions. For example, we can quickly compute a `summary()` and show a stem-and-leaf plot for file sizes in a given directory via ```bash $ ls -l /boot | awk 'BEGIN {print "size"} !/^total/ {print $5}' | \ r -de "print(summary(X[,1])); stem(X[,1])" ``` which produces something like ``` Min. 1st Qu. Median Mean 3rd Qu. Max. 13 512 110100 486900 768400 4735000 The decimal point is 6 digit(s) to the right of the | 0 | 0000001122222279222 2 | 79444 4 | 71888 6 | 8 | 10 | 12 | 14 | 8 16 | 4 18 | 20 | 333 ``` (Note that some systems may not have `/boot` in which case you can try `/sbin` or another directory.) As we saw in the preceding example, the program can also be shortened like using the new `-d` option which reads from stdin and assigns to a `data.frame` named `X`. And, last but not least, this (somewhat unwieldy) expression can be stored in a helper script (where we now switch to using an explicit `readLines()` on `stdin`): ```r #!/usr/bin/env r fsizes <- as.integer(readLines(file("stdin"))) print(summary(fsizes)) stem(fsizes) ``` (where calling `#!/usr/bin/env` is a trick from Python which allows one to forget whether r is installed in `/usr/bin/r`, `/usr/local/bin/r`, `~/bin/r`, ...). ## install.r: Direct CRAN Installation This is one of my favourite [littler](http://dirk.eddelbuettel.com/code/littler.html) scripts which I use frequently to install packages off [CRAN](https://cran.r-project.org). ```r #!/usr/bin/env r if (is.null(argv) | length(argv)<1) { cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n") q() } ## adjust as necessary, see help('download.packages') repos <- "https://cran.rstudio.com" ## this makes sense on Debian where no packages touch /usr/local lib.loc <- "/usr/local/lib/R/site-library" install.packages(argv, lib.loc, repos) ``` I invoke it all the time with one, two or more packages to install (or reinstall). ```bash $ install.r digest RcppCNPy ``` It conveniently installs all dependencies, and uses the chosen target directory, all while keeping my R prompt (or prompts with multiple sessions) free to do other things. Also, if used with `options("Ncpu")` set, then (remote CRAN) packages will be installed in parallel. ## install2.r: With Cmdline Parsing Thanks to the fabulous [docopt](https://github.com/edwindj/docopt.R) package, we also have a variant `install2.r` with optional settings of repo and location. It was first installed with [littler 0.2.1](http://dirk.eddelbuettel.com/blog/2014/10/19/). The current (_i.e._, 0.3.3 as of this writing) version is more featureful and longer and included to keep this brief. Some usage examples are ```sh $ install2.r -l /tmp/lib Rcpp BH # install into given library $ install2.r -- --with-keep.source drat # keep the source $ install2.r -- --data-compress=bzip2 stringdist # prefer bz2 compression ``` Another _very_ useful option is `-n N` or `--ncpus N` which will parallelize the installation across `N` processes. This can be set automagically by setting `options("Ncpus")`. ### Installing From Sources Starting with version 0.2.2, `install.r` and `install2.r` now recognise installable source files. So one can also do this: ```bash $ install.r digest_0.6.8.tar.gz ``` and the local source file will the installed via a call to `R CMD INSTALL`. ## check.r: Simple Checker A related use case is to check packages via `check.r`. This script runs `R CMD check`, but also installs package dependencies first as tests may have dependencies not yet satisfied on the test machine. It offers a number of options: ```bash $ check.r -h Usage: check.r [-h] [-x] [--as-cran] [--repo REPO] [--install-deps] [--install-kitchen] [--deb-pkgs PKGS...] [--use-sudo] [--library LIB] [--setwd DIR] [TARGZ ...] -a --as-cran customization similar to CRAN's incoming [default: FALSE] -r --repo REPO repository to use, or NULL for file [default: https://cran.rstudio.com] -i --install-deps also install packages along with their dependencies [default: FALSE] -k --install-kitchen even install packages 'kitchen sink'-style up to suggests [default: FALSE] -l --library LIB when installing use this library [default: /usr/local/lib/R/site-library] -s --setwd DIR change to this directoru before undertaking the test [default: ] -d --deb-pkgs PKGS also install binary .deb packages with their dependencies [default: FALSE] -u --use-sudo use sudo when installing .deb packages [default: TRUE] -h --help show this help text -x --usage show help and short example usage $ ``` ## rcc.r: R CMD check wrapper The script `rcc.r` will also check a source tarball, and offers another set of options: ```bash $ rcc.r -h Usage: rcc.r [-h] [-x] [-c] [-f] [-q] [--args ARGS] [--libpath LIBP] [--repos REPO] [PATH...] -c --as-cran should '--as-cran' be added to ARGS [default: FALSE] -a --args ARGS additional arguments to be passed to 'R CMD CHECK' [default: ] -l --libpath LIBP additional library path to be used by 'R CMD CHECK' [default: ] -r --repos REPO additional repositories to be used by 'R CMD CHECK' [default: ] -f --fast should vignettes and manuals be skipped [default: FALSE] -q --quiet should 'rcmdcheck' be called qietly [default: FALSE] -h --help show this help text -x --usage show help and short example usage $ ``` ## build.r: Building Packages A related script is `build.r` which I often use inside a source repository to quickly build a source tarball. Like `rcc.r`, it has a switch `-f` or `--fast` to omit building of vignettes. ```bash $ build.r # without argument works on current directory $ build.r digest/ # with directory argument builds tar.gz from repo in directory ``` ## installGithub.r: GitHub install Installation directly from [GitHub](https://github.com) is also popular. Here is an example: ```bash $ installGithub.r RcppCore/RcppEigen ``` Installing from github is supported via the following helper script: ```r #!/usr/bin/env r # # A simple example to install one or more packages from GitHub # # Copyright (C) 2014 - 2015 Carl Boettiger and Dirk Eddelbuettel # # Released under GPL (>= 2) ## load docopt and remotes (or devtools) from CRAN suppressMessages(library(docopt)) # we need docopt (>= 0.3) as on CRAN suppressMessages(library(remotes)) # can use devtools as a fallback ## configuration for docopt doc <- "Usage: installGithub.r [-h] [-d DEPS] REPOS... -d --deps DEPS Install suggested dependencies as well? [default: NA] -h --help show this help text where REPOS... is one or more GitHub repositories. Examples: installGithub.r RcppCore/RcppEigen installGithub.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information. " ## docopt parsing opt <- docopt(doc) if (opt$deps == "TRUE" || opt$deps == "FALSE") { opt$deps <- as.logical(opt$deps) } else if (opt$deps == "NA") { opt$deps <- NA } invisible(sapply(opt$REPOS, function(r) install_github(r, dependencies = opt$deps))) ``` ## update.r: CRAN package update One of the scripts I use the most (interactively) is `update.r` which updates installed packages. An earlier version looked like the following example, the current version is a little longer and has more features: ```r #!/usr/bin/env r # # a simple example to update packages in /usr/local/lib/R/site-library # parameters are easily adjustable ## adjust as necessary, see help('download.packages') repos <- "https://cloud.r-project.org" ## this makes sense on Debian where no package touch /usr/local lib.loc <- "/usr/local/lib/R/site-library" ## r use requires non-interactive use update.packages(repos=repos, ask=FALSE, lib.loc=lib.loc) ``` As above, it has my preferred mirror and library location hard-wired. Another _very_ useful option is `-n N` or `--ncpus N` which will parallelize the upgrade across `N` processes. This can be set automagically by setting `options(Ncpus)`. ## knit.r: Calling knitr Here is another convenience script, `knit.r`, which _knits_ a given file after testing the file actually exists. ```r #!/usr/bin/r # # Simple helper script for knitr # # Dirk Eddelbuettel, May 2013 # # GPL-2 or later if (is.null(argv)) { cat("Need an argument FILE.Rnw\n") q(status=-1) } file <- argv[1] if (!file.exists(file)) { cat("File not found: ", file, "\n") q(status=-1) } require(knitr) knit2pdf(file) ``` ## roxy.r: Running roxygen Similar to the previous example, the script `roxy.r` one uses roxygen to extract documentation from R files -- either in the current directory, or in the given directory or directories. ```r #!/usr/bin/r # # Simple helper script for roxygen2::roxygenize() # # Dirk Eddelbuettel, August 2013 # # GPL-2 or later ## load roxygen library(roxygen2) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call compileAttributes() on the given directory sapply(ifelse(length(argv) > 0, argv, "."), FUN=roxygenize, roclets="rd") ``` ## compAttr.r: Compiling Attributes The next script, `compAttr.`, can be used with [Rcpp](http://dirk.eddelbuettel.com/code/rcpp.html), and particularly is powerful _Attributes_ feature, in order to auto-generate helper code. It is similar to the preceding script, but invokes `compileAttributes()` instead. ```r #!/usr/bin/r # # Simple helper script for compileAttributes() # # Dirk Eddelbuettel, July 2014 # # GPL-2 or later ## load Rcpp suppressMessages(library(Rcpp)) ## check all command-line arguments (if any are given) for directory status argv <- Filter(function(x) file.info(x)$is.dir, argv) ## loop over all argument, with fallback of the current directory, and ## call compileAttributes() on the given directory sapply(ifelse(length(argv) > 0, argv, "."), compileAttributes) ``` ## render.r: Render Markdown The `render.r` script generalizes the earlier `knit.r` to convert Markdown into its designated output. ```r #!/usr/bin/env r # # Another example to run a shiny app # # Copyright (C) 2016 Dirk Eddelbuettel # # Released under GPL (>= 2) suppressMessages(library(docopt)) # we need docopt (>= 0.3) as on CRAN ## configuration for docopt doc <- "Usage: render.r [-h] [-x] [FILES...] -h --help show this help text -x --usage show help and short example usage" opt <- docopt(doc) # docopt parsing if (opt$usage) { cat(doc, "\n\n") cat("Examples: render.r foo.Rmd bar.Rmd # convert two given files render.r is part of littler which brings 'r' to the command-line. See http://dirk.eddelbuettel.com/code/littler.html for more information.\n") q("no") } library(rmarkdown) ## helper function renderArg <- function(p) { if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE) render(p) } ## render files using helper function sapply(opt$FILES, renderArg) ``` littler/inst/doc/littler-faq.md0000644000176200001440000000714014136370627016234 0ustar liggesusers --- title: "Littler FAQ" author: "Dirk Eddelbuettel" date: "2019-03-23, updated 2020-06-16" css: "water.css" --- ### Well, why? Glad you asked. When the initial work started, `Rscript` did not exist so there was no scripting tool. We take a small amount of pride into beating `Rscript` narrowly to a first release. Of course, by now, `Rscript` is more widely used as it ships with every R installation but we still have some aspects we like about `r`: it is simpler and shorter, deals (in our biased) view more sanely with command-line arguments via the `argv` vector, always loaded package `methods` (which `Rscript` finally came around to a good decade later) and [still starts faster](http://dirk.eddelbuettel.com/blog/2014/09/02/#littler-faster-at-doing-nothing). And `r` is just to cool a command (in relation to the trusted `R`) so someone had to! ### No Printing In the very beginning of `littler`, we made an executive decision to _not_ echo each command output when we evaluate commands in the read-evaluate-print loop. So `2+2` will be evaluated silently: four will be computed, but not shown. That made sense for scripts we wanted to be silent. The idea is that user will add a `print()` or `cat()` as needed. If you desire each step to printed, add a `-p` or `--verbose` argument. ### No `.Renviron` Another early decision was to make `r` start _faster_ than the alternatives. Our `r` is "just" a small little binary. Whereas `R` and `Rscript` are front-end shell scripts sourcing a number of things and setting them dynamically, we determine values _at compilation time_ and freeze them into the binary. That may seem _risqué_ but worked out just fine. However, while we later added the ability to source `Rprofile` files (which contain R code we can evaluate) there is no way for us to source the `Renviron` files _and to modify the already running process_. So if you want to source `Renviron` you could add an explicit `readEnviron()` to `~/.littler.r` or `/etc/littler/r`. ### Lower-case / upper-case This is mostly an issue on macOS where the brain surgeons behind the OS decided that `r` is the same as `R`. What can we say? On that OS you may need to rename the build to `lr` instead. Please send your complaints to Cupertino, California. ### Adding the binary to your path When the package is installed from source, it displays ``` * * new binary $(TGT) installed in bin/ subdirectory" * consider adding a symbolic link from, e.g., /usr/local/bin" * on OS X, you may have to name this 'lr' instead" * see the littler-faq vignette for more details" * ``` where the variable `$(TGT)` normally expands to `r`. As the text suggests you may want to create a [symbolic link](https://en.wikipedia.org/wiki/Symbolic_link) from a directory in the to make the newly built binary available to users. On Linux you may do ``` cd /usr/local/bin sudo ln -s /usr/local/lib/R/site-library/littler/bin/r . ``` to create a link for `r` in `/usr/local/bin`. On macOS, as suggested, you may want ``` cd /usr/local/bin sudo ln -s /usr/local/lib/R/site-library/littler/bin/r lr ``` to create a command `lr` instead; see the previous question as to why. In either case adjust the source part of the `ln` command to where your binary is -- which R can tell you via `system.file("bin", "r", package="littler")`. Also note that _e.g._ the [zsh](https://zsh.sourceforge.io/) has a builtin command `r` which may conflict, so using the explicit path of, say, `/usr/bin/r` or `/usr/local/bin/r` or ... may provide an alternative. littler/inst/doc/littler-examples.html0000644000176200001440000013007214577617425017661 0ustar liggesusers Littler Examples

Littler Examples

Dirk Eddelbuettel

Originally written 2015-10-28; Updated 2017-12-10, 2018-05-24, 2019-01-06, 2019-06-09 and 2020-06-16

Overview

We show and discuss a few of the files included in the inst/examples/ source directory of littler (which becomes the examples/ directory once installed). In a few cases we remove comment lines to keep things more concise on this page. We use $ to denote a shell (i.e. terminal) prompt.

Note that some systems (such as macOS) cannot install littler as r (as lower-case and upper-case are by default the same; not a great idea). And for example the zsh has r as a builtin so you would have to use /usr/bin/r. See the littler FAQ for more.

Simple Direct Command-line Use

littler can be used directly on the command-line just like, say, bc, easily consuming standard input from a pipe:

$ echo 'cat(pi^2,"\n")' | r
9.869604

Equivalently, commands that are to be evaluated can be given on the command-line

$ r -e 'cat(pi^2, "\n")'
9.869604

But unlike bc(1), GNU R has a vast number of statistical functions. For example, we can quickly compute a summary() and show a stem-and-leaf plot for file sizes in a given directory via

$ ls -l /boot | awk 'BEGIN {print "size"} !/^total/ {print $5}' | \
     r -de "print(summary(X[,1])); stem(X[,1])"

which produces something like

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
     13     512  110100  486900  768400 4735000

  The decimal point is 6 digit(s) to the right of the |

   0 | 0000001122222279222
   2 | 79444
   4 | 71888
   6 | 
   8 | 
  10 | 
  12 | 
  14 | 8
  16 | 4
  18 | 
  20 | 333

(Note that some systems may not have /boot in which case you can try /sbin or another directory.)

As we saw in the preceding example, the program can also be shortened like using the new -d option which reads from stdin and assigns to a data.frame named X.

And, last but not least, this (somewhat unwieldy) expression can be stored in a helper script (where we now switch to using an explicit readLines() on stdin):

#!/usr/bin/env r

fsizes <- as.integer(readLines(file("stdin")))
print(summary(fsizes))
stem(fsizes)

(where calling #!/usr/bin/env is a trick from Python which allows one to forget whether r is installed in /usr/bin/r, /usr/local/bin/r, ~/bin/r, …).

install.r: Direct CRAN Installation

This is one of my favourite littler scripts which I use frequently to install packages off CRAN.

#!/usr/bin/env r

if (is.null(argv) | length(argv)<1) {
  cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n")
  q()
}

## adjust as necessary, see help('download.packages')
repos <- "https://cran.rstudio.com" 

## this makes sense on Debian where no packages touch /usr/local
lib.loc <- "/usr/local/lib/R/site-library"

install.packages(argv, lib.loc, repos)

I invoke it all the time with one, two or more packages to install (or reinstall).

$ install.r digest RcppCNPy

It conveniently installs all dependencies, and uses the chosen target directory, all while keeping my R prompt (or prompts with multiple sessions) free to do other things. Also, if used with options("Ncpu") set, then (remote CRAN) packages will be installed in parallel.

install2.r: With Cmdline Parsing

Thanks to the fabulous docopt package, we also have a variant install2.r with optional settings of repo and location. It was first installed with littler 0.2.1. The current (i.e., 0.3.3 as of this writing) version is more featureful and longer and included to keep this brief. Some usage examples are

$ install2.r -l /tmp/lib Rcpp BH                         # install into given library
$ install2.r -- --with-keep.source drat                  # keep the source
$ install2.r -- --data-compress=bzip2 stringdist         # prefer bz2 compression

Another very useful option is -n N or --ncpus N which will parallelize the installation across N processes. This can be set automagically by setting options("Ncpus").

Installing From Sources

Starting with version 0.2.2, install.r and install2.r now recognise installable source files. So one can also do this:

$ install.r digest_0.6.8.tar.gz

and the local source file will the installed via a call to R CMD INSTALL.

check.r: Simple Checker

A related use case is to check packages via check.r. This script runs R CMD check, but also installs package dependencies first as tests may have dependencies not yet satisfied on the test machine. It offers a number of options:

$ check.r  -h
Usage: check.r [-h] [-x] [--as-cran] [--repo REPO] [--install-deps] [--install-kitchen] [--deb-pkgs PKGS...] [--use-sudo] [--library LIB] [--setwd DIR] [TARGZ ...]

-a --as-cran          customization similar to CRAN's incoming [default: FALSE]
-r --repo REPO        repository to use, or NULL for file [default: https://cran.rstudio.com]
-i --install-deps     also install packages along with their dependencies [default: FALSE]
-k --install-kitchen  even install packages 'kitchen sink'-style up to suggests [default: FALSE]
-l --library LIB      when installing use this library [default: /usr/local/lib/R/site-library]
-s --setwd DIR        change to this directoru before undertaking the test [default: ]
-d --deb-pkgs PKGS    also install binary .deb packages with their dependencies [default: FALSE]
-u --use-sudo         use sudo when installing .deb packages [default: TRUE]
-h --help             show this help text
-x --usage            show help and short example usage
$

rcc.r: R CMD check wrapper

The script rcc.r will also check a source tarball, and offers another set of options:

$ rcc.r -h
Usage: rcc.r [-h] [-x] [-c] [-f] [-q] [--args ARGS] [--libpath LIBP] [--repos REPO] [PATH...]

-c --as-cran          should '--as-cran' be added to ARGS [default: FALSE]
-a --args ARGS        additional arguments to be passed to 'R CMD CHECK' [default: ]
-l --libpath LIBP     additional library path to be used by 'R CMD CHECK' [default: ]
-r --repos REPO       additional repositories to be used by 'R CMD CHECK' [default: ]
-f --fast             should vignettes and manuals be skipped [default: FALSE]
-q --quiet            should 'rcmdcheck' be called qietly [default: FALSE]
-h --help             show this help text
-x --usage            show help and short example usage
$

build.r: Building Packages

A related script is build.r which I often use inside a source repository to quickly build a source tarball. Like rcc.r, it has a switch -f or --fast to omit building of vignettes.

$ build.r            # without argument works on current directory
$ build.r digest/    # with directory argument builds tar.gz from repo in directory

installGithub.r: GitHub install

Installation directly from GitHub is also popular. Here is an example:

$ installGithub.r RcppCore/RcppEigen 

Installing from github is supported via the following helper script:

#!/usr/bin/env r
#
# A simple example to install one or more packages from GitHub
#
# Copyright (C) 2014 - 2015  Carl Boettiger and Dirk Eddelbuettel
#
# Released under GPL (>= 2)

## load docopt and remotes (or devtools) from CRAN
suppressMessages(library(docopt))       # we need docopt (>= 0.3) as on CRAN
suppressMessages(library(remotes))      # can use devtools as a fallback

## configuration for docopt
doc <- "Usage: installGithub.r [-h] [-d DEPS] REPOS...

-d --deps DEPS      Install suggested dependencies as well? [default: NA]
-h --help           show this help text

where REPOS... is one or more GitHub repositories.

Examples:
  installGithub.r RcppCore/RcppEigen                     

installGithub.r is part of littler which brings 'r' to the command-line.
See http://dirk.eddelbuettel.com/code/littler.html for more information.
"

## docopt parsing
opt <- docopt(doc)
if (opt$deps == "TRUE" || opt$deps == "FALSE") {
    opt$deps <- as.logical(opt$deps)
} else if (opt$deps == "NA") {
    opt$deps <- NA
}

invisible(sapply(opt$REPOS, function(r) install_github(r, dependencies = opt$deps)))

update.r: CRAN package update

One of the scripts I use the most (interactively) is update.r which updates installed packages. An earlier version looked like the following example, the current version is a little longer and has more features:

#!/usr/bin/env r 
#
# a simple example to update packages in /usr/local/lib/R/site-library
# parameters are easily adjustable

## adjust as necessary, see help('download.packages')
repos <- "https://cloud.r-project.org" 

## this makes sense on Debian where no package touch /usr/local
lib.loc <- "/usr/local/lib/R/site-library"

## r use requires non-interactive use
update.packages(repos=repos, ask=FALSE, lib.loc=lib.loc)

As above, it has my preferred mirror and library location hard-wired.

Another very useful option is -n N or --ncpus N which will parallelize the upgrade across N processes. This can be set automagically by setting options(Ncpus).

knit.r: Calling knitr

Here is another convenience script, knit.r, which knits a given file after testing the file actually exists.

#!/usr/bin/r
#
# Simple helper script for knitr
#
# Dirk Eddelbuettel, May 2013
#
# GPL-2 or later

if (is.null(argv)) {
    cat("Need an argument FILE.Rnw\n")
    q(status=-1)
}


file <- argv[1]
if (!file.exists(file)) {
    cat("File not found: ", file, "\n")
    q(status=-1)
}

require(knitr)
knit2pdf(file)

roxy.r: Running roxygen

Similar to the previous example, the script roxy.r one uses roxygen to extract documentation from R files – either in the current directory, or in the given directory or directories.

#!/usr/bin/r
#
# Simple helper script for roxygen2::roxygenize() 
#
# Dirk Eddelbuettel, August 2013
#
# GPL-2 or later

## load roxygen
library(roxygen2)

## check all command-line arguments (if any are given) for directory status
argv <- Filter(function(x) file.info(x)$is.dir, argv)

## loop over all argument, with fallback of the current directory, and
## call compileAttributes() on the given directory
sapply(ifelse(length(argv) > 0, argv, "."), FUN=roxygenize, roclets="rd")

compAttr.r: Compiling Attributes

The next script, compAttr., can be used with Rcpp, and particularly is powerful Attributes feature, in order to auto-generate helper code. It is similar to the preceding script, but invokes compileAttributes() instead.

#!/usr/bin/r
#
# Simple helper script for compileAttributes() 
#
# Dirk Eddelbuettel, July 2014
#
# GPL-2 or later

## load Rcpp
suppressMessages(library(Rcpp))

## check all command-line arguments (if any are given) for directory status
argv <- Filter(function(x) file.info(x)$is.dir, argv)

## loop over all argument, with fallback of the current directory, and
## call compileAttributes() on the given directory
sapply(ifelse(length(argv) > 0, argv, "."), compileAttributes)

render.r: Render Markdown

The render.r script generalizes the earlier knit.r to convert Markdown into its designated output.

#!/usr/bin/env r
#
# Another example to run a shiny app
#
# Copyright (C) 2016  Dirk Eddelbuettel
#
# Released under GPL (>= 2)

suppressMessages(library(docopt))       # we need docopt (>= 0.3) as on CRAN

## configuration for docopt
doc <- "Usage: render.r [-h] [-x] [FILES...]

-h --help            show this help text
-x --usage           show help and short example usage"

opt <- docopt(doc)          # docopt parsing

if (opt$usage) {
    cat(doc, "\n\n")
    cat("Examples:
  render.r foo.Rmd bar.Rmd        # convert two given files

render.r is part of littler which brings 'r' to the command-line.
See http://dirk.eddelbuettel.com/code/littler.html for more information.\n")
    q("no")
}

library(rmarkdown)

## helper function 
renderArg <- function(p) {
    if (!file.exists(p)) stop("No file '", p, "' found. Aborting.", call.=FALSE)
    render(p)
}

## render files using helper function 
sapply(opt$FILES, renderArg)
littler/inst/doc/littler-faq.html0000644000176200001440000001431114577617425016607 0ustar liggesusers Littler FAQ

Littler FAQ

Dirk Eddelbuettel

2019-03-23, updated 2020-06-16

Well, why?

Glad you asked. When the initial work started, Rscript did not exist so there was no scripting tool. We take a small amount of pride into beating Rscript narrowly to a first release. Of course, by now, Rscript is more widely used as it ships with every R installation but we still have some aspects we like about r: it is simpler and shorter, deals (in our biased) view more sanely with command-line arguments via the argv vector, always loaded package methods (which Rscript finally came around to a good decade later) and still starts faster. And r is just to cool a command (in relation to the trusted R) so someone had to!

No Printing

In the very beginning of littler, we made an executive decision to not echo each command output when we evaluate commands in the read-evaluate-print loop. So 2+2 will be evaluated silently: four will be computed, but not shown.

That made sense for scripts we wanted to be silent. The idea is that user will add a print() or cat() as needed. If you desire each step to printed, add a -p or --verbose argument.

No .Renviron

Another early decision was to make r start faster than the alternatives. Our r is “just” a small little binary. Whereas R and Rscript are front-end shell scripts sourcing a number of things and setting them dynamically, we determine values at compilation time and freeze them into the binary. That may seem risqué but worked out just fine. However, while we later added the ability to source Rprofile files (which contain R code we can evaluate) there is no way for us to source the Renviron files and to modify the already running process. So if you want to source Renviron you could add an explicit readEnviron() to ~/.littler.r or /etc/littler/r.

Lower-case / upper-case

This is mostly an issue on macOS where the brain surgeons behind the OS decided that r is the same as R. What can we say? On that OS you may need to rename the build to lr instead. Please send your complaints to Cupertino, California.

Adding the binary to your path

When the package is installed from source, it displays

*
* new binary $(TGT) installed in bin/ subdirectory"
* consider adding a symbolic link from, e.g., /usr/local/bin"
* on OS X, you may have to name this 'lr' instead"
* see the littler-faq vignette for more details"
*

where the variable $(TGT) normally expands to r. As the text suggests you may want to create a symbolic link from a directory in the to make the newly built binary available to users. On Linux you may do

cd /usr/local/bin 
sudo ln -s /usr/local/lib/R/site-library/littler/bin/r .

to create a link for r in /usr/local/bin. On macOS, as suggested, you may want

cd /usr/local/bin 
sudo ln -s /usr/local/lib/R/site-library/littler/bin/r lr

to create a command lr instead; see the previous question as to why. In either case adjust the source part of the ln command to where your binary is – which R can tell you via system.file("bin", "r", package="littler").

Also note that e.g. the zsh has a builtin command r which may conflict, so using the explicit path of, say, /usr/bin/r or /usr/local/bin/r or … may provide an alternative.

littler/inst/NEWS.Rd0000644000176200001440000004221114577617361013772 0ustar liggesusers\name{NEWS} \title{News for Package \pkg{littler}} \newcommand{\ghpr}{\href{https://github.com/eddelbuettel/littler/pull/#1}{##1}} \newcommand{\ghit}{\href{https://github.com/eddelbuettel/littler/issues/#1}{##1}} \section{Changes in littler version 0.3.20 (2024-03-23)}{ \itemize{ \item Changes in examples scripts \itemize{ \item New (dependency-free) helper \code{installDeps2.r} to install dependencies \item Scripts \code{rcc.r}, \code{tt.r}, \code{tttf.r}, \code{tttlr.r} use \code{env} argument \code{-S} to set \code{-t} to \code{r} \item \code{tt.r} can now fill in \code{inst/tinytest} if it is present \item New script \code{ciw.r} wrapping new package \pkg{ciw} \item \code{tttf.t} can now use \pkg{devtools} and its \code{loadall} \item New script \code{doi2bib.r} to call the DOI converter REST service (following a skeet by Richard McElreath) } \item Changes in package \itemize{ \item The CI setup use checkout@v4 and the r-ci-setup action \item The Suggests: is a little tighter as we do not list all packages optionally used in the the examples (as R does not check for it either) \item The package load messag can account for the rare build of R under different architecture (Berwin Turlach in \ghpr{117} closing \ghit{116}) \item In non-vanilla mode, the temporary directory initialization in re-run allowing for a non-standard temp dir via config settings } } } \section{Changes in littler version 0.3.19 (2023-12-17)}{ \itemize{ \item Changes in examples scripts \itemize{ \item The help or usage text display for \code{r2u.r}, \code{ttt.r}, \code{check.r} has been improved, expanded or corrected, respectively \item \code{installDeps.r} has a new argument for dependency selection \item An initial 'single test file' runner \code{tttf.r} has been added \item \code{r2u.r} has two new options for setting / varying the Debian build version of package that is built, and one for BioConductor builds, one for a 'dry run' build, and a new \code{--compile} option \item \code{installRSPM.r}, \code{installPPM.r}, \code{installP3M.r} have been updates to reflect the name changes \item \code{installRub.r} now understands 'package@universe' too \item \code{tt.r} flips the default of the \code{--effects} switch } } } \section{Changes in littler version 0.3.18 (2023-03-25)}{ \itemize{ \item Changes in examples scripts \itemize{ \item \code{roxy.r} can now set an additional \code{--libpath} \item \code{getRStudioDesktop.r} and \code{getRStudioServer.r} have updated default download file \item \code{install2.r} and \code{installGithub.r} can set \code{--type} \item \code{r2u.r} now has a \code{--suffix} option \item \code{tt.r} removes a redundant \code{library} call \item \code{tttl.r} has been added for \code{testthat::test_local()} \item \code{installRub.r} has been added to install r-universe binaries on Ubuntu \item \code{install2.r} has updated error capture messages (Tatsuya Shima and Dirk in \ghpr{104}) } } } \section{Changes in littler version 0.3.17 (2022-10-29)}{ \itemize{ \item Changes in package \itemize{ \item An internal function prototype was updated for \code{clang-15}. } \item Changes in examples \itemize{ \item Scripts \code{install2.r} and \code{installBioc.r} were updated for an update in R-devel (Tatsuya Shima and Dirk in \ghpr{104}). } } } \section{Changes in littler version 0.3.16 (2022-08-28)}{ \itemize{ \item Changes in package \itemize{ \item The \code{configure} code checks for two more headers \item The RNG seeding matches the current version in R (Dirk) } \item Changes in examples \itemize{ \item A \code{cowu.r} 'check Window UCRT' helper was added (Dirk) \item A \code{getPandoc.r} downloader has been added (Dirk) \item The \code{-r} option tp \code{install2.r} has been generalzed (Tatsuya Shima in \ghpr{95}) \item The \code{rcc.r} code / package checker now has \code{valgrind} option (Dirk) \item \code{install2.r} now installs to first element in \code{.libPaths()} by default (Dirk) \item A very simple \code{r2u.r} help has been added (Dirk) \item The \code{installBioc.r} has been generalized and extended similar to \code{install2.r} (Pieter Moris in \ghpr{103}) } } } \section{Changes in littler version 0.3.15 (2021-12-03)}{ \itemize{ \item Changes in examples \itemize{ \item The \code{install2} script can select download methods, and cope with errors from parallel download (thanks to Gergely Daroczi) \item The \code{build.r} now uses \code{both} as argument to \code{--compact-vignettes} \item The RStudio download helper were once again updated for changed URLs \item New caller for simplermarkdown::mdweave_to_html } \item Changes in package \itemize{ \item Several typos were correct (thanks to John Kerl) \item Travis artifacts and badges have been pruned \item Vignettes now use \pkg{simplermarkdown} } } } \section{Changes in littler version 0.3.14 (2021-10-05)}{ \itemize{ \item Changes in examples \itemize{ \item Updated RStudio download helper to changed file names \item Added a new option to \code{roxy.r} wrapper \item Added a downloader for Quarto command-line tool } \item Changes in package \itemize{ \item The \code{configure} files were updated to the standard of version 2.69 following a CRAN request } } } \section{Changes in littler version 0.3.13 (2021-07-24)}{ \itemize{ \item Changes in examples \itemize{ \item New script \code{compiledDeps.r} to show which dependencies are compiled \item New script \code{silenceTwitterAccount.r} wrapping \pkg{rtweet} \item The \code{-c} or \code{--code} option for \code{installRSPM.r} was corrected \item The \code{kitten.r} script now passes options \sQuote{bunny} and \sQuote{puppy} on to the \code{pkgKitten::kitten()} call; new options to call the Arma and Eigen variants were added \item The \code{getRStudioDesktop.r} and \code{getRStudioServer.r} scripts were updated for a change in \pkg{rvest} \item Two typos in the \code{tt.r} help message were correct (Aaron Wolen in \ghpr{86}) \item The message in \code{cranIncoming.r} was corrected. } \item Changes in package \itemize{ \item Added Continuous Integration runner via \code{run.sh} from \href{https://eddelbuettel.github.io/r-ci/}{r-ci}. \item Two vignettes got two extra vignette attributes. \item The mkdocs-material documentation input was moved. \item The basic unit tests were slightly refactored and updated. } } } \section{Changes in littler version 0.3.12 (2020-10-04)}{ \itemize{ \item Changes in examples \itemize{ \item Updates to scripts \code{tt.r}, \code{cos.r}, \code{cow.r}, \code{c4r.r}, \code{com.r} \item New script \code{installDeps.r} to install dependencies \item Several updates tp script \code{check.r} \item New script \code{installBSPM.r} and \code{installRSPM.r} for binary package installation (Dirk and Iñaki in \ghpr{81}) \item New script \code{cranIncoming.r} to check in Incoming \item New script \code{urlUpdate.r} validate URLs as R does } \item Changes in package \itemize{ \item Travis CI now uses BSPM \item A package documentation website was added \item Vignettes now use \pkg{minidown} resulting in \emph{much} reduced filesizes: from over 800kb to under 50kb (Dirk in \ghpr{83}) } } } \section{Changes in littler version 0.3.11 (2020-06-26)}{ \itemize{ \item Changes in examples \itemize{ \item Scripts \code{check.r} and \code{rcc.r} updated to reflect updated \pkg{docopt} 0.7.0 behaviour of quoted arguments \item The \code{roxy.r} script has a new ease-of-use option \code{-f | --full} regrouping two other options. } } } \section{Changes in littler version 0.3.10 (2020-06-02)}{ \itemize{ \item Changes in examples \itemize{ \item The \code{update.r} script only considers writeable directories. \item The \code{rcc.r} script tries to report full logs by setting \code{_R_CHECK_TESTS_NLINES_=0}. \item The \code{tt.r} script has an improved \code{ncpu} fallback. \item Several installation and updating scripts set \code{_R_SHLIB_STRIP_} to \code{TRUE}. \item A new script \code{installBioc.r} was added. \item The \code{--error} option to \code{install2.r} was generalized (Sergio Oller in \ghpr{78}). \item The \code{roxy.r} script was extended a little. } \item Changes in package \itemize{ \item Travis CI now uses R 4.0.0 and the bionic distro } } } \section{Changes in littler version 0.3.9 (2019-10-27)}{ \itemize{ \item Changes in examples \itemize{ \item The use of \code{call.} in \code{stop()} was corrected (Stefan Widgren in \ghpr{72}). \item New script \code{cos.r} to check (at rhub) on Solaris. \item New script \code{compactpdf.r} to compact pdf files. \item The \code{build.r} script now compacts vignettes and resaves data. \item The \code{tt.r} script now supports parallel tests and side effects. \item The \code{rcc.r} script can now report error codes. \item The `--libloc` option to \code{update.r} was updated. \item The \code{render.r} script can optionally compact pdfs. \item New script \code{sweave.r} to render (and compact) pdfs. \item New script \code{pkg2bibtex.r} to show bibtex entries. \item The \code{kitten.r} script has a new option \code{--puppy} to add \pkg{tinytest} support in purring packages. } } } \section{Changes in littler version 0.3.8 (2019-06-09)}{ \itemize{ \item Changes in examples \itemize{ \item The \code{install.r} and \code{install2.r} scripts now use parallel installation using \code{options{Ncpu}} on remote packages. \item The \code{install.r} script has an expanded help text mentioning the environment variables it considers. \item A new script \code{tt.r} was added to support \code{tinytest}. \item The rhub checking scripts now all suppress builds of manual and vignettes as asking for working latex appears to be too much. } \item Changes in package \itemize{ \item On startup checks if \code{r} is in \code{PATH} and if not references new FAQ entry; text from \code{Makevars} mentions it too. } \item Changes in documentation \itemize{ \item The FAQ vignette now details setting \code{r} to \code{PATH}. } } } \section{Changes in littler version 0.3.7 (2019-03-15)}{ \itemize{ \item Changes in examples \itemize{ \item The scripts \code{installGithub.r} and \code{install2.r} get a new option \code{-r | --repos} (Gergely Daroczi in \ghpr{67}) } \item Changes in build system \itemize{ \item The \code{AC_DEFINE} macro use rewritten to please R CMD check. } } } \section{Changes in littler version 0.3.6 (2019-01-26)}{ \itemize{ \item Changes in examples \itemize{ \item The scripts \code{install.r} and \code{install2.r} now support argument \code{"."}, and add it if called in a source directory. \item The script \code{install2.r} can set \code{Ncpus} for \code{install.packages()} (Colin Gillespie in \ghpr{63} fixing \ghpr{62}) \item The script \code{update.r} can also set \code{Ncpus} for \code{install.packages()}. \item A new vignette "litter-faq" was added. } } } \section{Changes in littler version 0.3.5 (2018-10-04)}{ \itemize{ \item Changes in examples \itemize{ \item The script \code{roxy.r} now uses a cached copy of \pkg{roxygen2} version 6.0.1 (if available) as the current version 6.1.0 changed behaviour. \item The script \code{rcc.r} was updated as the underlying \pkg{rcmdcheck} changed parameter order. \item A new simpler wrapper \code{rchk.r} was added to use RHub with the \code{rchk} image. } \item Changes in package \itemize{ \item Travis CI now uses the R 3.5 PPA } } } \section{Changes in littler version 0.3.4 (2018-08-24)}{ \itemize{ \item Changes in examples \itemize{ \item The shebang line is now \code{#!/usr/bin/env r} to work with either \code{/usr/local/bin/r} or \code{/usr/bin/r}. \item New example script to only install packages not yet installed (Brandon Bertelsen in \ghpr{59}); later added into \code{install2.r}. \item Functions \code{getRStudioDesktop.r} and \code{getRStudioServer.r} updated their internal URLs. \item Several minor enhancements were made to example scripts. } } } \section{Changes in littler version 0.3.3 (2017-12-17)}{ \itemize{ \item Changes in examples \itemize{ \item The script \code{installGithub.r} now correctly uses the \code{upgrade} argument (Carl Boettiger in \ghpr{49}). \item New script \code{pnrrs.r} to call the package-native registration helper function added in R 3.4.0 \item The script \code{install2.r} now has more robust error handling (Carl Boettiger in \ghpr{50}). \item New script \code{cow.r} to use R Hub's \code{check_on_windows} \item Scripts \code{cow.r} and \code{c4c.r} use \code{#!/usr/bin/env r} \item New option \code{--fast} (or \code{-f}) for scripts \code{build.r} and \code{rcc.r} for faster package build and check \item The \code{build.r} script now defaults to using the current directory if no argument is provided. \item The RStudio getters now use the \code{rvest} package to parse the webpage with available versions. } \item Changes in package \itemize{ \item Travis CI now uses https to fetch script, and sets the group } } } \section{Changes in littler version 0.3.2 (2017-02-14)}{ \itemize{ \item Changes in examples \itemize{ \item New scripts \code{getRStudioServer.r} and \code{getRStudioDesktop.r} to download daily packages, currently defaults to Ubuntu amd64 \item New script \code{c4c.r} calling \code{rhub::check_for_cran()} \item New script \code{rd2md.r} to convert Rd to markdown. \item New script \code{build.r} to create a source tarball. \item The \code{installGitHub.r} script now use package \CRANpkg{remotes} (PR \ghpr{44}, \ghpr{46}) } } } \section{Changes in littler version 0.3.1 (2016-08-06)}{ \itemize{ \item Changes in examples \itemize{ \item \code{install2.r} now passes on extra options past \code{--} to \code{R CMD INSTALL} (PR \ghpr{37} by Steven Pav) \item Added \code{rcc.r} to run \code{rcmdcheck::rcmdcheck()} \item Added (still simple) \code{render.r} to render (R)markdown \item Several examples now support the \code{-x} or \code{--usage} flag to show extended help. } \item Changes in build system \itemize{ \item The \code{AM_LDFLAGS} variable is now set and used too (PR \ghpr{38} by Mattias Ellert) \item Three more directories, used when an explicit installation directory is set, are excluded (also \ghpr{38} by Mattias) \item Travis CI is now driven via \code{run.sh} from our fork, and deploys all packages as .deb binaries using our PPA where needed } \item Changes in package \itemize{ \item SystemRequirements now mentions the need for \code{libR}, i.e. an R built with a shared library so that we can embed R. \item The \CRANpkg{docopt} and \CRANpkg{rcmdcheck} packages are now suggested, and added to the Travis installation. \item A new helper function \code{r()} is now provided and exported so that the package can be imported (closes \ghit{40}). \item URL and BugReports links were added to DESCRIPTION. } \item Changes in documentation \itemize{ \item The help output for \code{installGithub.r} was corrected (PR \ghpr{39} by Brandon Bertelsen) } } } \section{Changes in littler version 0.3.0 (2015-10-29)}{ \itemize{ \item Changes in build system \itemize{ \item First CRAN Release as R package following nine years of source releases \item Script \code{configure}, \code{src/Makevars.in} and remainder of build system rewritten to take advantage of the R package build infrastructure \item Reproducible builds are better supported as the (changing) compilation timestamps etc are only inserted for 'verbose builds' directly off the git repo, but not for Debian (or CRAN) builds off the release tarballs } \item Changes in littler functionality \itemize{ \item Also source \code{$R_HOME/etc/Rprofile.site} and \code{~/.Rprofile} if present } \item Changes in littler documentation \itemize{ \item Added new vignette with examples } } } littler/inst/man-page/0000755000176200001440000000000012613230464014374 5ustar liggesuserslittler/inst/man-page/r.10000644000176200001440000001057112613230464014723 0ustar liggesusers.\" hey, Emacs: -*- nroff -*- .\" littler is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program; see the file COPYING. If not, write to .\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. .\" .\" Use .\" help2man ./r --no-info \ .\" --name="Provides hash-bang (#!) capability for R (www.r-project.org)"\ .\" --output /tmp/r.1 .\" to create a new stub directly from the executable .\" .TH R "1" "September 2006" "r " "User Commands" .\" .\" Please update the above date whenever this man page is modified. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins (default) .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .\" .SH NAME r \- Provides hash-bang (#!) capability for R (www.r-project.org) .SH SYNOPSIS .B r [\fIoptions\fR] [\fI-|file\fR] [\fIR arguments\fR] .SH DESCRIPTION Launches GNU R to execute the specified file containing R commands, or takes commands from stdin if '-' is used to denote stdin, using the specified options. This makes it suitable to create R scripts via the so\-called shebang '#!/' line. The optional \fBR arguments\fR are stored in the \fBR\fR vector \fBargv\fR. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Display a short help list. .TP \fB\-\-usage\fR Give a short usage message. .TP \fB\-V\fR, \fB\-\-version\fR Show the version number. .TP \fB\-v\fR, \fB\-\-vanilla\fR Pass the '\-\-vanilla' option to R. .TP \fB\-t\fR, \fB\-\-rtemp\fR Use a per-session temporary directory as R does. .TP \fB\-i\fR, \fB\-\-interactive\fR Force 'interactive()' to evaluate to TRUE, whereas the default is FALSE. .TP \fB\-q\fR, \fB\-\-quick\fR Skip autoload (i.e. delayed assign) of default libraries. .TP \fB\-p\fR, \fB\-\-verbose\fR Print the value of expressions to the console. .TP \fB\-l\fR, \fB\-\-packages\fR list Load the R packages from the comma\-separated 'list'. .TP \fB\-d\fR, \fB\-\-datastdin\fR Evaluates 'X <- read.csv(file="stdin", stringsAsFactors=FALSE)' to read a data set from stdin. .TP \fB\-L\fR, \fB\-\-libpath\fR dir Add directory to library path via '.libPaths(dir)'. .TP \fB\-e\fR, \fB\-\-eval expr\fR Evaluate 'expr' in R. .PP .SH USAGE \fBr\fR can be used in command-line 'pipes' as well as in 'shebang'-style scripts. .SH EXAMPLES Piping \fBR\fP commands: echo 'cat(pi^2,"\\n")' | r Equivalently, \fBR\fP commands can be given on the command-line: r -e 'cat(pi^2, "\\n")' Alternatively, commands can be stored in a file, which in turn might use \fBR\fP command 'readLines' to process stdin input: $ cat examples/fsizes.r fsizes <- as.integer(readLines()) print(summary(fsizes)) stem(fsizes) which can be evaluated by \fBr\fP with the following command: ls -l /boot | awk '!/^total/ {print $5}' | r examples/fsizes.r The script file may contain a "shebang" line: $ cat examples/install.r #!/usr/bin/env r # a simple example to install one or more packages if (is.null(argv) | length(argv)<1) { cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n") q() } repos <- "http://cran.us.r-project.org" lib.loc <- "/usr/local/lib/R/site-library" install.packages(argv, lib.loc, repos, dependencies=TRUE) and if it is executable, it can be called as: examples/install.r "TeachingDemos" See the examples directory in the sources for more. .SH NOTE The executable program is called \fBr\fR, but the project is called \fBlittler\fR to avoid confusion with the real \fBGNU R\fR. .SH SEE ALSO The \fBGNU R\fR language is documented extensively at the R website (http://www.r-project.org) and in several manuals available in html, info and pdf. .SH AUTHORS Jeffrey Horner . Dirk Eddelbuettel . littler/inst/script-tests/0000755000176200001440000000000012614402214015346 5ustar liggesuserslittler/inst/script-tests/dotLast.r0000755000176200001440000000031312613230464017150 0ustar liggesusers#!/usr/bin/env r # function to be called at exit .Last <- function() { cat("Really done, so bye-bye from .Last\n") } # imagine we're doing something now... # end, and .Last is now called q(status=42) littler/inst/script-tests/exitstatus.sh0000755000176200001440000000124112613230464020125 0ustar liggesusers#!/bin/bash echo "Testing value of 'q(status=...)' exits for r:" echo "q(status=123)" | ../r echo " Got: $? via stdin" echo "q(status=124)" | ../r - echo " Got: $? via file '-'" ../r -e "q(status=125)" echo " Got: $? from 'r -e'" tempfile=`tempfile` echo "q(status=126)" > $tempfile ../r $tempfile echo -n " Got: $? from temp. file and " rm -v $tempfile echo "Testing value of 'q(status=...)' exits for Rscript:" echo "q(status=123)" | Rscript - echo " Got: $? via stdin" Rscript -e "q(status=124)" echo " Got: $? from 'r -e'" tempfile=`tempfile` echo "q(status=125)" > $tempfile Rscript $tempfile echo -n " Got: $? from temp. file and " rm -v $tempfile littler/inst/script-tests/dat.txt0000644000176200001440000000015512613230464016665 0ustar liggesusers31538 79 628 4096 1250 112 1811 3860 182259 2155 17992 1793 105252 15785 24 838 20594 2431 997 271 4096 4096 littler/inst/script-tests/argParse.sh0000755000176200001440000000152112613230464017455 0ustar liggesusers#!/bin/bash ## run this test from the build directory, ie above tests/ littler=./r echo "Shebang 1" $littler tests/shebang foo echo "Shebang 2" $littler tests/shebang foo bar echo "Shebang 2, verbose" $littler --verbose tests/shebang foo bar echo "Piping a file to r" cat tests/test1.R | $littler echo "Piping a file to r -" cat tests/test1.R | $littler - echo "Looking at what argv contains" $littler -e 'print(argv)' -- -a -b echo "Looking at what argv contains, piped" echo 'print(argv)' | $littler - -- -a -b echo "" echo "Eval expr: cat('Hello, world\n')" $littler -e "cat('Hello, world\n')" echo "Eval expr: a=2;print(\"a^2\")" $littler --verbose -e 'a<-2; cat(a^2,"\n")' echo "" echo "Jeffrey's Grand Test of Tukey summary() of /bin/ls output" ls -l | awk '!/^total/ {print $5}' | $littler -e 'print(summary(as.integer(readLines())))' littler/inst/script-tests/longline.R0000755000176200001440000000056712613230464017320 0ustar liggesusers#!/usr/bin/env r longline <- function(len){ n <- floor(len/10) m = len %% 10 if (m>0){ x <- paste(rep(seq(0,9),n),collapse='') y <- paste(seq(0,m-1),collapse='') z <- paste(x,y,sep='') } else { z <- paste(rep(seq(0,9),n),collapse='') } z } cat("x<-\"", longline(1020), "\";",sep=""); cat("cat(x,\"\\n\"",")\n",sep=""); cat("cat(nchar(x),\"\\n\"",")\n",sep=""); littler/inst/script-tests/timing.sh0000755000176200001440000000153512613230464017205 0ustar liggesusers#!/bin/bash N=10 function loopBC { echo echo -n " --- GNU bc doing the addition $N times" i=0 while [ $i -lt $N ] do echo "1+2" | bc -l > /dev/null i=$((i + 1)) done } function loopLittleR { echo echo -n " --- our r doing the addition $N times" i=0 while [ $i -lt $N ] do echo "cat(1+2,'\n')" | ../r --vanilla > /dev/null i=$((i + 1)) done } function loopRscript { echo echo -n " --- GNU R's Rscript doing the addition $N times" i=0 while [ $i -lt $N ] do echo "cat(1+2,'\n')" | Rscript - > /dev/null i=$((i + 1)) done } function loopR { echo echo -n " --- GNU R doing the addition $N times" i=0 while [ $i -lt $N ] do echo "cat(1+2,'\n')" | R --slave --vanilla > /dev/null i=$((i + 1)) done } time loopBC time loopLittleR time loopRscript time loopR littler/inst/script-tests/error.R0000755000176200001440000000010512613230464016626 0ustar liggesusers#!/usr/bin/env r cat(search(),"\n") stop("FOO") cat(ls("Autoloads")) littler/inst/script-tests/summary2.R0000755000176200001440000000010412613230464017253 0ustar liggesusers#!/usr/bin/env r print(summary(as.integer(readLines("dat.txt")))); littler/inst/script-tests/ts.R0000755000176200001440000000066112613230464016132 0ustar liggesusers#!/usr/bin/env r # This should dynamically load stats cat("Is stats loaded?\n"); cat("search: ",search(),"\n"); if(!("package:stats" %in% search())){ cat("Nope!\n"); } cat("Calling ts(1:10)\n"); cat(ts(1:10),"\n"); cat("Now stats is loaded!\n"); cat("search: ",search(),"\n"); if(!("package:utils" %in% search())){ cat("No utils!\n"); cat("Calling timestamp()\n"); cat(timestamp(),"\n"); cat("search: ",search(),"\n"); } littler/inst/script-tests/shebang0000755000176200001440000000015012613230464016704 0ustar liggesusers#!/usr/bin/env r if (!is.null(argv)){ for ( i in 1:length(argv)){ cat("<",argv[i],">\n",sep='') } } littler/inst/script-tests/summary.R0000755000176200001440000000007312613230464017176 0ustar liggesusers#!/usr/bin/env r print(summary(as.integer(readLines()))); littler/inst/script-tests/test1.R0000755000176200001440000000030212613230464016534 0ustar liggesusers#!/usr/bin/env r cat("hello world!\n"); for (i in 1:10){ cat("i is",i,"\n"); } foo <- function(x=1){ if (x == 1){ cat("x is 1\n"); } else { cat("x is",x,":NOT 1\n"); } } foo(2) foo() littler/inst/script-tests/test_longline.R0000755000176200001440000000206212613230464020347 0ustar liggesusers#!/usr/bin/env r x<-"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";cat(x,"\n") cat(nchar(x),"\n") littler/inst/script-tests/timing2.sh0000755000176200001440000000115512613230464017265 0ustar liggesusers#!/bin/bash N=20 function loopLittleR { echo echo -n " --- our r calling summary() $N times" i=0 while [ $i -lt $N ] do ./summary2.R >/dev/null i=$((i + 1)) done } function loopRscript { echo echo -n " --- GNU R's Rscript calling summary() $N times" i=0 while [ $i -lt $N ] do Rscript ./summary2.R >/dev/null i=$((i + 1)) done } function loopR { echo echo -n " --- GNU R calling summary() $N times" i=0 while [ $i -lt $N ] do R --silent --vanilla < ./summary2.R >/dev/null i=$((i + 1)) done } time loopLittleR time loopRscript time loopR littler/cleanup0000755000176200001440000000040114577617426013324 0ustar liggesusers#!/bin/sh rm -f aclocal.m4 \ src/config.h \ config.status config.log \ src/Makevars \ src/autoloads.h src/ldflags.txt src/littler.h \ src/r src/gitversion.h *~ *.o \ stamp-h1 rm -rf autom4te.cache .deps inst/bin/ littler/configure0000755000176200001440000041562214577617426013675 0ustar liggesusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for littler 0.3.20. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and edd@debian.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='littler' PACKAGE_TARNAME='littler' PACKAGE_VERSION='0.3.20' PACKAGE_STRING='littler 0.3.20' PACKAGE_BUGREPORT='edd@debian.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS GITDATE GITREVISION RUN_NAMETOOL EXTRA_LDFLAGS AM_LDFLAGS AM_CFLAGS RPROG NAMETOOL OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_java_libs ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures littler 0.3.20 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/littler] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of littler 0.3.20:";; esac cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-java-libs Link littler to R's java libraries Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF littler configure 0.3.20 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by littler $as_me 0.3.20, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Look for ancillary configure tools in tools # Ensure R_HOME is set yet respect a previously set value : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then as_fn_error $? "Could not determine R_HOME." "$LINENO" 5 fi RPROG=${R_HOME}/bin/R CC=`${RPROG} CMD config CC` AM_CFLAGS=`${RPROG} CMD config CFLAGS` AM_LDFLAGS=`${RPROG} CMD config LDFLAGS` # create a config.h file ac_config_headers="$ac_config_headers src/config.h" # commenting this out relieves us from requiring tools/ with all the scripts # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Checks for libraries. # Checks for header files. ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h else $as_nop as_fn_error $? "littler needs getopt support to run. Please find and install it." "$LINENO" 5 fi ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mkdev_h" = xyes then : printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi if test $ac_cv_header_sys_mkdev_h = no; then ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sysmacros_h" = xyes then : printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi fi # Checks for library functions. ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" if test "x$ac_cv_func_setenv" = xyes then : printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" if test "x$ac_cv_func_clock_gettime" = xyes then : printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "realtime" "ac_cv_func_realtime" if test "x$ac_cv_func_realtime" = xyes then : printf "%s\n" "#define HAVE_REALTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" if test "x$ac_cv_func_gettimeofday" = xyes then : printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "time" "ac_cv_func_time" if test "x$ac_cv_func_time" = xyes then : printf "%s\n" "#define HAVE_TIME 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. # Test the R version for shared library { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if R was built as a shared library" >&5 printf %s "checking if R was built as a shared library... " >&6; } # Unset any user defined notion of R_HOME export R_HOME # First test if R was found if test "${RPROG}" = ""; then echo echo "R not found. Please update your PATH variable to include the R bin directory" echo as_fn_error $? "aborting! " "$LINENO" 5 fi # Now make sure that a well known include file exists # and the libR.so if ${RPROG} CMD config --ldflags 2>/dev/null | grep -v 'R was not built as a shared library' >/dev/null; then AM_CFLAGS="${AM_CFLAGS} `${RPROG} CMD config --cppflags`" AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config --ldflags`" # Now add the various libraries for linking AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config BLAS_LIBS | grep -v ERROR`" AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config LAPACK_LIBS | grep -v ERROR`" # are we on apple or not if test "$build_vendor" != "apple"; then RUN_NAMETOOL="" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else echo echo "R was not built as a shared library" echo echo "Either build it with one, or use another install of R" echo as_fn_error $? "aborting! " "$LINENO" 5 fi ## Check for .git directory if test -d ".git/"; then GITREVISION=`git log --format=fuller | head -6 | awk '/^commit / {print substr($2,1,7)}'` GITDATE=`git log --format=fuller | head -6 | awk '/^CommitDate: / {print $2, $3, $4, $5, $6, $7}'` printf "%s\n" "#define VERBOSE_BUILD 1" >>confdefs.h else GITREVISION="" GITDATE="" fi # Now check if certain libraries should be linked in # Java # Check whether --with-java-libs was given. if test ${with_java_libs+y} then : withval=$with_java_libs; if test x$"$withval" != xno; then AM_LDFLAGS="${AM_LDFLAGS} `${RPROG} CMD config JAVA_LIBS | grep -v ERROR`" fi fi #AC_MSG_RESULT([AM_LDFLAGS is now: ${AM_LDFLAGS}]) # get other linker flags for rpath EXTRA_LDFLAGS=`${RPROG} --silent --vanilla --slave --file=src/scripts/ldflags.R` #AC_MSG_RESULT([EXTRA_LDFLAGS is now: ${EXTRA_LDFLAGS}]) #AM_LDFLAGS="${AM_LDFLAGS} ${EXTRA_LDFLAGS}" #AC_MSG_RESULT([AM_LDFLAGS is now: ${AM_LDFLAGS}]) # Are we building for Mac OS X? this program will exist if so. # Extract the first word of "install_name_tool", so it can be a program name with args. set dummy install_name_tool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_NAMETOOL+y} then : printf %s "(cached) " >&6 else $as_nop case $NAMETOOL in [\\/]* | ?:[\\/]*) ac_cv_path_NAMETOOL="$NAMETOOL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_NAMETOOL="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi NAMETOOL=$ac_cv_path_NAMETOOL if test -n "$NAMETOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NAMETOOL" >&5 printf "%s\n" "$NAMETOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "${NAMETOOL}" != ""; then RUN_NAMETOOL="${NAMETOOL} -change libR.dylib `${RPROG} RHOME`/lib/libR.dylib r" fi ac_config_files="$ac_config_files src/Makevars src/gitversion.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by littler $as_me 0.3.20, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ littler config.status 0.3.20 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; "src/gitversion.h") CONFIG_FILES="$CONFIG_FILES src/gitversion.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi