Rev 11368 | 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.48.2.1 $'version=`set - ${revision}; echo ${2}`version="R add-on package installer ${version}Copyright (C) 2000 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 into the default R librarytree (${R_HOME}/library) or the tree specified via \`--library'. Theelements of pkgs can be relative or absolute paths to directories withthe package (bundle) sources, or to gzipped package \`tar' archives.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)-c, --clean remove all files created during installation-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# Get one field including all continuation lines from a DCF file.get_dcf_field () {ws="[ ]" # space and tabsed -n "/^${1}:/,/^[^ ]/{p;}" ${2} | \sed -n "/^${1}:/{s/^${1}:${ws}*//;p;}/^${ws}/{s/^${ws}*//;p;}"}# get the full path names to all packages contained in $1; modifies pkgsget_packages () {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=${R_HOME}/librarypkgs=clean=falsedebug=falseerror=falsebuild_text=truebuild_html=truebuild_latex=truebuild_example=truebuild_help=truebuild_help_opts=use_configure=trueuse_zip_data=use_zip_help=while test -n "${1}"; docase ${1} in-h|--help)echo "${usage}"; exit 0 ;;-v|--version)echo "${version}"; exit 0 ;;-c|--clean)clean=true ;;-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/[^=]*=//'` ;;*)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`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}`dep_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;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 ; then./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}/etc/Makeconf -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`sh ${R_HOME}/bin/SHLIB -o ${pkg}.@SHLIB_EXT@ ${srcs} \&& cp *.@SHLIB_EXT@ ${lib}/${pkg}/libs \|| error=true; \if ${clean}; thenrm -f .libs _libs *.o *.@SHLIB_EXT@ficd ..fiif ${error}; thenecho "ERROR: Compilation failed for package \`${pkg}'"exit 5fiif ${debug}; then set +x; fifiif test -d R; thenecho " R"mkdir -p ${lib}/${pkg}/Rcat `ls R/*.[RSqrs] R/unix/*.[RSqrs] 2>/dev/null` \> ${lib}/${pkg}/R/${pkg}fiif 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 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}fifor f in COPYING DESCRIPTION INDEX; doif test -f ${f}; then cp ${f} ${lib}/${pkg}; fidonetitle=`grep -s "^Title:" DESCRIPTION | sed "s/^Title:[ \t]*//"`if test "${title}"; then${R_HOME}/bin/maketitle > ${lib}/${pkg}/TITLEelif test -f TITLE; thencp TITLE ${lib}/${pkg}fi## 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 " ${R_HOME}/bin/build-help ${BUILD_HELP_OPTS} ../${pkg} ${lib}"fi${R_HOME}/bin/build-help ${build_help_opts} ../${pkg} ${lib}${R_HOME}/bin/Rd2contents ../${pkg} > ${lib}/${pkg}/CONTENTSif test ${lib} = ${R_HOME}/library; then${R_HOME}/bin/build-help --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 00Titles 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}fi(cd ${lib}; cat */TITLE > LibIndex 2> /dev/null)chmod -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: ***