Rev 15168 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
#! /bin/sh## ${R_HOME}/bin/INSTALL for installing add-on packages# @configure_input@revision='$Revision: 1.69 $'version=`set - ${revision}; echo ${2}`version="R add-on package installer ${version}Copyright (C) 2000-2001 The R Core Development Team.This is free software; see the GNU General Public Licence version 2or later for copying conditions. There is NO warranty."usage="Usage: R CMD INSTALL [options] pkgsInstall the add-on packages specified by pkgs. The elements of pkgs canbe relative or absolute paths to directories with the package (bundle)sources, or to gzipped package \`tar' archives. The library tree toinstall to can be specified via \`--library'. By default, packages areinstalled in the library tree rooted at the first directory given in theenvironment variable R_LIBS if this is set and non-null, and into thedefault R library tree (${R_HOME}/library) otherwise.Options:-h, --help print short help message and exit-v, --version print version info and exit--configure-args=ARGSset args for package's configure script (if any)--configure-vars=VARSset variables for the configure script (if any)-c, --clean remove all files created during installation-s, --save save the package source as an image file, andarrange for this file to be loaded when thepackage is attached--no-save do not save the package source as an image file-d, --debug turn on shell and build-help debugging-l, --library=LIB install packages to library tree LIB--no-configure do not use the package's configure script--no-docs do not build and install documentation--use-zip-data collect data files in zip archive--use-zip-help collect help and examples into zip archives--use-zip combine \`--use-zip-data' and \`--use-zip-help'Report bugs to <r-bugs@r-project.org>."R_VERSION='@VERSION@'INSTALL='@INSTALL@'MAKE=${MAKE-@MAKE@}NO_PERL5=@NO_PERL5@NO_PERL5_MSG="\*** Formatting and installing R help pages needs Perl version 5, which*** does not seem to be installed on your system or is not in your path.*** Please install either Perl 5 on your system and re-configure R or*** get the PDF reference manual from the nearest CRAN server.*** The CRAN master site can be found at*** http://cran.r-project.org/"tmpdir="${TMPDIR-/tmp}/R.INSTALL.$$"umask 022. ${R_HOME}/share/sh/dcf.sh # get_dcf_field()get_packages () {## get the full path names to all packages contained in $1.## NOTE: modifies pkgs!if grep -s "^Contains:" "${1}/DESCRIPTION"; thenbundlepkg=`get_dcf_field Contains "${1}/DESCRIPTION"`for p in ${bundlepkg}; dopkgs="${pkgs} \"`cd "${1}/${p}"; pwd`\""if test -f "${1}/${p}/DESCRIPTION.in"; thencat "${1}/${p}/DESCRIPTION.in" > "${1}/${p}/DESCRIPTION"grep -v "^Contains:" "${1}/DESCRIPTION" >> "${1}/${p}/DESCRIPTION"fidoneelsepkgs="${pkgs} \"`cd "${1}"; pwd`\""fi}lib=`echo ${R_LIBS:-"${R_HOME}/library"} | cut -f1 -d:`pkgs=clean=falsedebug=falseerror=falsebuild_text=truebuild_html=truebuild_latex=truebuild_example=truebuild_help=truebuild_help_opts=use_configure=trueuse_zip_data=use_zip_help=configure_args=configure_vars=save="CHECK"while test -n "${1}"; docase ${1} in-h|--help)echo "${usage}"; exit 0 ;;-v|--version)echo "${version}"; exit 0 ;;-c|--clean)clean=true ;;-s|--save)save=true ;;--no-save)save=false ;;-d|--debug)debug=true ;;--no-configure)use_configure=false ;;--no-docs)build_text=falsebuild_html=falsebuild_latex=falsebuild_example=false ;;--no-text)build_text=false ;;--no-html)build_html=false ;;--no-latex)build_latex=false ;;--no-example)build_example=false ;;--use-zip)use_zip_data=trueuse_zip_help=true ;;--use-zip-data)use_zip_data=true ;;--use-zip-help)use_zip_help=true ;;-l|--library)lib=${2}; shift ;;--library=*)lib=`echo "${1}" | sed -e 's/[^=]*=//'` ;;--configure-args=*)configure_args=`echo "${1}" | sed -e 's/[^=]*=//'` ;;--configure-vars=*)configure_vars=`echo "${1}" | sed -e 's/[^=]*=//'` ;;*)if test -f "${1}"; thenmkdir -p ${tmpdir}pkgname=`basename "${1}"`pkgname=`echo "${pkgname}" | sed 's/_.*//'`gzip -dc "${1}" | (cd ${tmpdir} && tar -xf -)if test -d "${tmpdir}/${pkgname}"; thenget_packages "${tmpdir}/${pkgname}"elseecho "ERROR: cannot extract package from ${1}"exit 1fielif test -d "${1}"; thenget_packages "${1}"elseecho "WARNING: package \`${1}' does not exist"fi;;esacshiftdoneif test -z "${pkgs}"; thenecho "ERROR: no packages specified"exit 1fiif test -d ${lib} -a -w ${lib} || mkdir ${lib} 2> /dev/null; thenlib=`cd ${lib}; pwd`## FIXME: Remove eventually.rm -f ${lib}/LibIndex## </FIXME>cp ${R_HOME}/doc/html/R.css ${lib}elseecho "ERROR: cannot write to or create directory \`${lib}'"exit 2fiif ${build_text}; thenbuild_help_opts="${build_help_opts} --txt"fiif ${build_html}; thenbuild_help_opts="${build_help_opts} --html"fiif ${build_latex}; thenbuild_help_opts="${build_help_opts} --latex"fiif ${build_example}; thenbuild_help_opts="${build_help_opts} --example"fiif test -z "${build_help_opts}"; thenbuild_help=falseelif ${debug}; thenbuild_help_opts="--debug ${build_help_opts}"fido_install () {cd "${1}"pkg=`basename "${1}"`depends=`get_dcf_field Depends DESCRIPTION`depends=`echo ${depends} | grep 'R *('`if test "${depends}"; thendepends=`echo ${depends} | sed 's/.*R *(\([^)]*\)).*/\1/;s/=/= /'`dep_operator=`set - ${depends}; echo ${1}`dep_version=`set - ${depends}; echo ${2}`## Currently, only operators `<=' and `>=' are supported. Hence we## check this, and also whether we found a version string.if (test "${dep_operator}" = "<=" \|| test "${dep_operator}" = ">=") \&& test -n "${dep_version}"; thendep_ok=`expr ${R_VERSION} ${dep_operator} ${dep_version} `if test ${dep_ok} -eq 0; thenecho "ERROR: This R is version ${R_VERSION}"echo " package \`${pkg}' depends on R ${dep_version}"exit 1;fielseecho "WARNING: malformed \`Depends' field in \`DESCRIPTION'"fifimkdir -p ${lib}/${pkg} || exit 3if test -d man; then## Assume this is a source package.## FIXME: Do we have a better test?echo "Installing source package \`${pkg}' ..."## Make the destination directories available to the developer's## installation scripts (e.g. configure, etc.)R_PACKAGE_DIR=${lib}/${pkg}R_LIBRARY_DIR=${lib}R_PACKAGE_NAME=${pkg}export R_LIBRARY_DIRexport R_PACKAGE_DIRexport R_PACKAGE_NAMEif ${use_configure} && test -x ./configure ; theneval ${configure_vars} ./configure ${configure_args}if test ${?} -ne 0; thenecho "ERROR: configuration failed for package \`${pkg}'"exit 4fifiif test -d src; thenecho " libs"if ${debug}; then set -x; fimkdir -p ${lib}/${pkg}/libsif test -f src/Makefile; thencd src;makefiles="-f ${R_HOME}/share/make/shlib.mk -f Makefile"if test -r Makevars; thenmakefiles="-f Makevars ${makefiles}"fi${MAKE} ${makefiles} \&& cp *.@SHLIB_EXT@ ${lib}/${pkg}/libs \|| error=true; \if ${clean}; then${MAKE} cleanficd ..elsecd src;srcs=`ls *.[cfC] *.cc *.cpp 2>/dev/null`if test -n "${srcs}"; thensh ${R_HOME}/bin/SHLIB -o ${pkg}.@SHLIB_EXT@ ${srcs} \&& cp *.@SHLIB_EXT@ ${lib}/${pkg}/libs \|| error=true; \if ${clean}; thenrm -rf .libs _libsrm -f *.o *.@SHLIB_EXT@fielseecho "WARNING: no source files found"ficd ..fiif ${error}; thenecho "ERROR: compilation failed for package \`${pkg}'"exit 5fiif ${debug}; then set +x; fifiif test -d R; thenecho " R"Rsrcs=`ls R/*.[RSqrs] R/unix/*.[RSqrs] 2>/dev/null`if test -n "${Rsrcs}"; thenmkdir -p ${lib}/${pkg}/Rcat ${Rsrcs} > ${lib}/${pkg}/R/${pkg}fifiif test -d data; thenecho " data"mkdir -p ${lib}/${pkg}/datacp data/* ${lib}/${pkg}/datachmod 644 ${lib}/${pkg}/data/*if test -n "${use_zip_data}" \-a -n "${R_UNZIPCMD}" \-a -n "${R_ZIPCMD}"; then(cd ${lib}/${pkg}/data;find . -type f -print > filelist${R_ZIPCMD} -m Rdata * -x filelist 00Index)fifiif test -d demo; thenecho " demo"mkdir -p ${lib}/${pkg}/democp demo/* ${lib}/${pkg}/demochmod 644 ${lib}/${pkg}/demo/*fiif test -d exec; thenecho " exec"mkdir -p ${lib}/${pkg}/execcp exec/* ${lib}/${pkg}/execchmod 755 ${lib}/${pkg}/exec/*fiif test -d inst; thenecho " inst"cp -r inst/* ${lib}/${pkg}ficase ${save} inCHECK)if test -r INSTALL.R; thenR_SAVE_IMAGE=true;elseR_SAVE_IMAGE=false;fi;;*)R_SAVE_IMAGE=${save} ;;esacexport R_SAVE_IMAGEif ${R_SAVE_IMAGE}; thenecho " save image"if test -s "R_PROFILE.R"; then trueelseecho "options(echo=FALSE)" > R_PROFILE.RfiR_PROFILE=./R_PROFILE.Rexport R_PROFILE(echo " .lib.loc <- c(\"${lib}\", .lib.loc)";cat ${lib}/${pkg}/R/${pkg};echo "rm(.lib.loc)") | ${R_HOME}/bin/R --save --silent \|| (echo "Execution of package source for ${pkg} failed"; exit 1)mv .RData ${lib}/${pkg}/R/all.rdamv ${lib}/${pkg}/R/${pkg} ${lib}/${pkg}/R/${pkg}.Rif test -s INSTALL.R; then cp INSTALL.R ${lib}/${pkg}/R/${pkg}elsecat > ${lib}/${pkg}/R/${pkg} <<EOF.First.lib <- function(libname, pkgname) {fullName <- paste("package", pkgname, sep=":")myEnv <- pos.to.env(match(fullName, search()))dataFile <- file.path(libname, pkgname, "R", "all.rda")rm(.First.lib, envir = myEnv)load(dataFile, myEnv)if(exists(".First.lib", envir = myEnv, inherits = FALSE)) {f <- get(".First.lib", envir = myEnv, inherits = FALSE)if(is.function(f))f(libname, pkgname)elsestop(paste("package \"", pkgname, "\"has a non-function .First", sep=""))}}EOFfififor f in COPYING INDEX; doif test -f ${f}; then cp ${f} ${lib}/${pkg}; fidonetitle=`get_dcf_field Title DESCRIPTION`if test "${title}"; then${R_CMD} perl ${R_HOME}/share/perl/maketitle.pl DESCRIPTION \> ${lib}/${pkg}/TITLEelif test -f TITLE; thencp TITLE ${lib}/${pkg}fi## copy DESCRIPTION file and remove blank linesif test -f DESCRIPTION; thencat DESCRIPTION | sed '/^[ ]*$/d;' \> ${lib}/${pkg}/DESCRIPTIONfi## stamp DESCRIPTION with build informationecho "Built: R" ${R_VERSION}\; ${R_PLATFORM}\; `date` \>> ${lib}/${pkg}/DESCRIPTIONif test -d man; thenecho " help"if ${build_help}; thenif ${NO_PERL5}; thenecho "${NO_PERL5_MSG}"elseif ${debug}; thenecho " build-help ${BUILD_HELP_OPTS} ../${pkg} ${lib}"fi${R_CMD} perl ${R_HOME}/share/perl/build-help.pl \${build_help_opts} ../${pkg} ${lib}if test ${?} -ne 0; thenecho "ERROR: building help failed for package \`${pkg}'"exit 6fi${R_CMD} perl ${R_HOME}/share/perl/Rd2contents.pl \../${pkg} > ${lib}/${pkg}/CONTENTSif test ${lib} = ${R_HOME}/library; then${R_CMD} perl ${R_HOME}/share/perl/build-help.pl --htmllistscat ${R_HOME}/library/*/CONTENTS \> ${R_HOME}/doc/html/search/index.txtfifiif test -n "${use_zip_help}" \-a -n "${R_UNZIPCMD}" \-a -n "${R_ZIPCMD}"; thencd ${lib}/${pkg}if test -d R-ex; then(cd R-ex; ${R_ZIPCMD} -m Rex *.R)fi## NOT YET:## if test -d latex; then## (cd latex; ${R_ZIPCMD} -m Rhelp *.tex)## fiif test -d help; then(cd help; ${R_ZIPCMD} -m Rhelp * -x AnIndex);fififielseecho " No man pages found in package \`${pkg}'"fiif ${clean}; thenif test -x ./cleanup ; then./cleanupfifielse## Assume this is a binary packageecho "Installing binary package \`${pkg}' ..."cp -r . ${lib}/${pkg}fichmod -R a+r ${lib}/${pkg}echo " DONE (${pkg})"echo}eval "for pkg in ${pkgs}; do do_install \"\${pkg}\"; done"if test -d "${tmpdir}"; thencd /rm -rf "${tmpdir}"fiecho "DONE (INSTALL)"### Local Variables: ***### mode: sh ***### sh-indentation: 2 ***### End: ***