| ## rtags -- tag source files recursively in a directory tree |
| ## |
| ## Examples: |
| ## R CMD rtags -o TAGS /path/to/Rsrc/ |
| |
| revision='$Rev: 47214 $' |
| version=`set - ${revision}; echo ${2}` |
| version="rtags/etags front-end: ${R_VERSION} (r${version}) |
| |
| Copyright (C) 2008 The R Core Team. |
| This is free software; see the GNU General Public License version 2 |
| or later for copying conditions. There is NO warranty." |
| |
| usage="Usage: R CMD rtags [options] [path] |
| |
| Tag C, R, and Rd files under the directory 'path' (pwd by default). |
| |
| Options: |
| -h, --help print short help message and exit |
| -v, --version print version info and exit |
| -o, --output=FILE write output to FILE (default TAGS) |
| --no-c do not tag C (.c, .h) files |
| --no-R do not tag R (.R, .r, .S, .s) files |
| --no-Rd do not tag Rd (.Rd) files |
| -a --append append to output file (overwrites by default) |
| -V, --verbose echo the name of files processed |
| |
| Report bugs to <deepayan.sarkar@r-project.org>." |
| |
| |
| |
| ## FIXME: Rd and C files may be simpler to deal with on Windows if we |
| ## use R to locate the files, and then call system("etags ...") to tag |
| ## them. |
| |
| |
| cfiles=true |
| rfiles=true |
| rdfiles=true |
| verbose=false |
| append=false |
| ofile="TAGS" |
| |
| while test -n "${1}"; do |
| case ${1} in |
| -h|--help) |
| echo "${usage}"; exit 0 ;; |
| -v|--version) |
| echo "${version}"; exit 0 ;; |
| -V|--verbose) |
| verbose=true ;; |
| -a|--append) |
| append=true ;; |
| --no-c) |
| cfiles=false ;; |
| --no-R) |
| rfiles=false ;; |
| --no-Rd) |
| rdfiles=false ;; |
| --output=*) |
| ofile=`echo "${1}" | ${SED} -e 's/[^=]*=//'` ;; |
| -o) |
| if test -n "`echo ${2} | ${SED} 's/^-.*//'`"; then |
| ofile="${2}"; shift |
| else |
| echo "ERROR: option '${1}' requires an argument" |
| exit 1 |
| fi |
| ;; |
| --|*) |
| break ;; |
| esac |
| shift |
| done |
| |
| |
| NDIR=${#} |
| case ${NDIR} in |
| 0) |
| SRCDIR=`pwd` ;; |
| 1) |
| SRCDIR=${1} ;; |
| *) |
| SRCDIR=${1}; echo "WARNING: multiple paths specified; using the first one";; |
| esac |
| |
| RPROG=${R_HOME}/bin/R |
| |
| type="" |
| first=true |
| if ${rfiles}; then type="R"; first=false; fi |
| if ${cfiles}; then |
| if ${first}; then |
| type="C" |
| first=false |
| else |
| type="${type}/C" |
| fi |
| fi |
| if ${rdfiles}; then |
| if ${first}; then |
| type="Rd" |
| first=false |
| else |
| type="${type}/Rd" |
| fi |
| fi |
| |
| if test -z ${type}; then |
| echo "ERROR: nothing to tag" |
| exit 1 |
| fi |
| |
| echo @ECHO_N@ " |
| Tagging ${type} files under ${SRCDIR}; writing to ${ofile}"@ECHO_C@ |
| if ! ${append}; then |
| echo @ECHO_N@ " (overwriting)"@ECHO_C@ |
| echo @ECHO_N@ "" > ${ofile}@ECHO_C@ |
| else |
| echo @ECHO_N@ " (appending)"@ECHO_C@ |
| touch ${ofile} |
| fi |
| echo "... |
| " |
| |
| ## echo RPROG=${RPROG} |
| |
| if ${verbose}; then VERBOSE=TRUE; else VERBOSE=FALSE; fi |
| if ${append}; then APPEND=TRUE; else APPEND=FALSE; fi |
| |
| if ${rfiles}; then |
| SCRIPT_DIR=$(dirname $0) |
| echo " |
| |
| require(utils) |
| |
| rtags(path.expand('${SRCDIR}'), pattern = '[.]*\\\\\.[RrSs]$', |
| keep.re = '/R/[^/]*\\\\\.[RrSs]', |
| verbose = ${VERBOSE}, |
| ofile = '${ofile}', |
| append = ${APPEND}, |
| recursive = TRUE)" | "${RPROG}" --slave |
| |
| fi |
| |
| if ${rdfiles}; then |
| if ${verbose}; then |
| find -L ${SRCDIR} -type f -name "*.Rd" -print |
| fi |
| find -L ${SRCDIR} -type f -name "*.Rd" -print0 | xargs -0 etags -o ${ofile} -a -l none --regex='/\\alias[{]\([^{}]*\)[}]/\1/' |
| fi |
| |
| if ${cfiles}; then |
| if ${verbose}; then |
| find -L ${SRCDIR} -type f -name "*.[ch]" -print |
| find -L ${SRCDIR} -type f -name "*.cpp" -print |
| find -L ${SRCDIR} -type f -name "*.hpp" -print |
| find -L ${SRCDIR} -type f -name "*.cc" -print |
| find -L ${SRCDIR} -type f -name "*.hh" -print |
| fi |
| find -L ${SRCDIR} -type f -name "*.[ch]" -print0 | xargs -0 etags -o ${ofile} -a -l c |
| find -L ${SRCDIR} -type f -name "*.cpp" -print0 | xargs -0 etags -o ${ofile} -a -l c |
| find -L ${SRCDIR} -type f -name "*.hpp" -print0 | xargs -0 etags -o ${ofile} -a -l c |
| find -L ${SRCDIR} -type f -name "*.cc" -print0 | xargs -0 etags -o ${ofile} -a -l c |
| find -L ${SRCDIR} -type f -name "*.hh" -print0 | xargs -0 etags -o ${ofile} -a -l c |
| fi |
| |
| echo "Done" |
| |
| exit 0 |
| |
| |
| |
| ### Local Variables: *** |
| ### mode: sh *** |
| ### sh-indentation: 2 *** |
| ### End: *** |