--- ./etc/Makeconf.in.genlibs-patch Thu Jun 29 23:07:03 2000 +++ ./etc/Makeconf.in Tue Oct 3 14:49:24 2000 @@ -46,3 +46,6 @@ $(SHLIB): $(OBJS) $(SHLIBLD) $(SHLIBLDFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(ALL_LIBS) + +$(LIB): $(OBJS) + $(AR) ru $@ $(OBJS) --- ./src/library/base/R/library.R.genlibs-patch Mon Jun 19 10:54:33 2000 +++ ./src/library/base/R/library.R Tue Oct 3 14:49:24 2000 @@ -12,6 +12,8 @@ if (!character.only) package <- as.character(substitute(package)) pkgname <- paste("package", package, sep = ":") + if (pkgname == "package:lib") + stop("package name \"lib\" is reserved for internal use") if (is.na(match(pkgname, search()))) { packagedir <- system.file("", pkg = package, lib = lib.loc) if (packagedir == "") { --- ./src/scripts/build.genlibs-patch Sun Jun 25 16:07:47 2000 +++ ./src/scripts/build Tue Oct 3 14:49:24 2000 @@ -33,6 +33,7 @@ R_opts="--vanilla" debug=false force=false +makevars=false pkgs= ## Parse argument command line @@ -44,6 +45,8 @@ echo "${version}"; exit 0 ;; -d|--debug) debug=true ;; + --makevars) + makevars=true ;; --force) force=true ;; --nsize=*) @@ -180,6 +183,195 @@ result "OK" } +## Add src/Makevars.in, acinclude.m4 and configure.in +addmakevars () { + if test -d src; then + message "Adding configure scripts to library ${package}" + if test -r src/Makefile; then + echo "src/Makefile exists, not adding src/Makevars.in, acinclude.m4 and" + echo "configure.in. Remove src/Makefile and try to move the statements" + echo "from src/Makefile to src/Makevars.in afterwards." + else + backup=false + if test -r configure.in; then + mv configure.in configure.in.bak + echo "BACKUP: moved old configure.in to configure.in.bak" + backup=true + fi + src_files_f=`find src -name \*.f` + src_files_c=`find src -name \*.c` + src_files="${src_files_f} ${src_files_c}" + first_src_file=`echo ${src_files} | awk ' {print $1}'` + cat >configure.in <acinclude.m4 <conftest.R <2){ + for (j in pc[[1:(length(pc)-2)]]) + if(nchar(j)>0) p<-paste(p,j,sep="/") + numfound<-numfound+1 + if(nchar(outp)>0) + outp<-paste(outp,p,sep=":") + else + outp<-p + } + } + } + out<-paste(out,outp,sep="") + cat(paste(out,"\n","export PKG_LIBPATH_\$1\nPKG_NUM=", + as.character(numfound),"\n","export PKG_NUM\n",sep=""), file="./\$1Libs") +} +paste.libs() +EOT + +echo "source(\"conftest.R\")" | \$R_HOME/bin/R --vanilla >/dev/null +rm -f conftest.R + +eval "\`cat ./\$1Libs\`" +rm -f ./\$1Libs + +if test -z "\${PKG_LIBPATH_\$1}" ; then + echo "Cannot find the \$1 library for R." + echo "Please install it, or set the environment R_LIBS so that it can be" + echo "found in an R session." + exit 1; +else + echo "package found" +fi + +if test "\${PKG_NUM}" -gt 1; then + echo "WARNING: Package $1 found more then once!" +fi + +dnl choose the first component from the list PKG_LIBPATH_\$1 which contains +dnl a dynamic or static package library in its ./lib subdirectory +PKG_R_LIB_\$1_found=false +for i in \`echo \${PKG_LIBPATH_\$1}| sed -e 's/:/ /g'\`; do +dnl should use something like SHLIBEXT instead of .so: + if test -f \${i}/lib/lib\$1.so; then + echo "found lib\$1.so at: \${i}/lib" + PKG_LIBPATH="\${PKG_LIBPATH} -L\${i}/lib" + PKG_R_LIBS="\${PKG_R_LIBS} -l\$1" + PKG_R_LIB_\$1_found=true + break + else + if test -f \${i}/lib/lib\$1.a; then + echo "found lib\$1.a at: \${i}/lib" + PKG_LIBPATH="\${PKG_LIBPATH} -L\${i}/lib" + PKG_R_LIBS="\${PKG_R_LIBS} -l\$1" + PKG_R_LIB_\$1_found=true + break + fi + fi +done +if test ! \$PKG_R_LIB_\$1_found; then + echo "Neither dynamic nor static library for \$1 found." + echo "You may need to reinstall \$1 with --create-lib-so or --create-lib-a" + echo "as options to R INSTALL" + exit 1 +fi +AC_SUBST(PKG_LIBPATH) +AC_SUBST(PKG_R_LIBS) + ] + ) +]) +EOF + echo "acinclude.m4 written." + if test -r src/Makevars.in; then + mv src/Makevars.in src/Makevars.in.bak + echo "BACKUP: moved old src/Makevars.in to src/Makevars.in.bak" + backup=true + fi + cat >src/Makevars.in <install-sh <.so shared library + --create-lib-a create a reusable lib.a static library -v, --version print version info and exit Report bugs to ." @@ -81,6 +83,8 @@ build_help_opts= use_zip_data= use_zip_help= +build_lib_so=false +build_lib_a=false while test -n "${1}"; do case ${1} in @@ -112,6 +116,10 @@ use_zip_data=true ;; --use-zip-help) use_zip_help=true ;; + --create-lib-so) + build_lib_so=true ;; + --create-lib-a) + build_lib_a=true ;; -l|--library) lib=${2}; shift ;; --library=*) @@ -172,6 +180,10 @@ fi do_install () { + if [ "${1}" = "lib" ]; then + echo "ERROR: package name \"lib\" resrved for internal use" + exit 1 + fi cd "${1}" pkg=`basename "${1}"` @@ -210,16 +222,76 @@ if test -r Makevars; then makefiles="-f Makevars ${makefiles}" fi - ${MAKE} ${makefiles} \ - && cp *.@SHLIBEXT@ ${lib}/${pkg}/libs \ - || error=true; \ + if ${build_lib_so}; then \ + ${MAKE} ${makefiles} \ + PKG_LIBPATH="`echo $R_LIBS| \ + awk '{np=split(\$1,pc,\":\"); \ + for (i=1;i<=np;i++) \ + if (pc[i]!=\"\") printf \"-L%s/lib \",pc[i];}'`" \ + && cp *.@SHLIBEXT@ ${lib}/${pkg}/libs \ + || error=true; \ + mkdir -p ${lib}/lib; \ + ln -sf ../${pkg}/libs/${pkg}.@SHLIBEXT@ \ + ${lib}/lib/lib${pkg}.@SHLIBEXT@; \ + ln -sf ../${pkg}/libs/${pkg}.@SHLIBEXT@ \ + ${lib}/lib/${pkg}.@SHLIBEXT@; \ + else \ + if ${build_lib_a}; then \ + ${MAKE} ${makefiles} \ + PKG_LIBPATH="`echo $R_LIBS| \ + awk '{np=split(\$1,pc,\":\"); \ + for (i=1;i<=np;i++) \ + if (pc[i]!=\"\") printf \"-L%s/lib \",pc[i];}'`" && \ + ${MAKE} ${makefiles} lib${pkg}.a LIBS=lib${pkg}.a \ + && cp *.@SHLIBEXT@ ${lib}/${pkg}/libs \ + || error=true; \ + mkdir -p ${lib}/lib; \ + cp lib${pkg}.a ${lib}/lib/lib${pkg}.a; \ + else \ + ${MAKE} ${makefiles} \ + && cp *.@SHLIBEXT@ ${lib}/${pkg}/libs \ + || error=true; \ + fi; \ + fi; \ + if ${build_lib_a}; then \ + mkdir -p ${lib}/lib; \ + cp lib${pkg}.a ${lib}/lib/; \ + fi; \ if ${clean}; then ${MAKE} clean; fi) else (cd src; srcs=`ls *.[cf] *.cc 2>/dev/null` - sh ${R_HOME}/bin/SHLIB \ - -o ${lib}/${pkg}/libs/${pkg}.@SHLIBEXT@ ${srcs} \ - || error=true; \ + if ${build_lib_so}; then + PKG_LIBPATH="`echo $R_LIBS| \ + awk '{np=split(\$1,pc,\":\"); \ + for (i=1;i<=np;i++) \ + if (pc[i]!=\"\") printf \"-L%s/lib \",pc[i];}'`" \ + sh ${R_HOME}/bin/SHLIB \ + -o ${lib}/${pkg}/libs/${pkg}.@SHLIBEXT@ ${srcs} \ + || error=true; \ + mkdir -p ${lib}/lib; \ + ln -sf ../${pkg}/libs/${pkg}.@SHLIBEXT@ \ + ${lib}/lib/lib${pkg}.@SHLIBEXT@; \ + ln -sf ../${pkg}/libs/${pkg}.@SHLIBEXT@ \ + ${lib}/lib/${pkg}.@SHLIBEXT@; \ + else \ + if ${build_lib_a}; then \ + mkdir -p ${lib}/lib; \ + PKG_LIBPATH="`echo $R_LIBS| \ + awk '{np=split(\$1,pc,\":\"); \ + for (i=1;i<=np;i++) \ + if (pc[i]!=\"\") printf \"-L%s/lib \",pc[i];}'`" \ + sh ${R_HOME}/bin/SHLIB \ + -o ${lib}/${pkg}/libs/${pkg}.@SHLIBEXT@ ${srcs} && \ + sh ${R_HOME}/bin/LIB \ + -o ${lib}/lib/lib${pkg}.a ${srcs} \ + || error=true; \ + else \ + sh ${R_HOME}/bin/SHLIB \ + -o ${lib}/${pkg}/libs/${pkg}.@SHLIBEXT@ ${srcs} \ + || error=true; \ + fi; \ + fi; \ if ${clean}; then rm -f *.o; fi) fi if ${error}; then --- ./src/scripts/R.sh.in.genlibs-patch Mon Jun 5 07:52:39 2000 +++ ./src/scripts/R.sh.in Tue Oct 3 21:57:52 2000 @@ -4,11 +4,17 @@ : ${R_HOME=R_HOME_DIR} export R_HOME -: ${R_LD_LIBRARY_PATH=@R_LD_LIBRARY_PATH@} +: ${R_LD_LIBRARY_PATH=@R_LD_LIBRARY_PATH@:${R_HOME}/library/lib} if test -z "${LD_LIBRARY_PATH}"; then LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}" else LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}" +fi +if test -n "${R_LIBS}"; then + R_LIBS_PARTS=`echo $R_LIBS| sed -e 's/:/ /g'` + for i in $R_LIBS_PARTS; do + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$i/lib" + done fi export LD_LIBRARY_PATH --- ./src/scripts/Makefile.in.genlibs-patch Wed Jun 28 17:09:58 2000 +++ ./src/scripts/Makefile.in Tue Oct 3 21:57:52 2000 @@ -13,7 +13,7 @@ SCRIPTS_S = BATCH Rdiff Rd2dvi Rd2txt build filename help help.links \ maketitle massage-Examples pager SCRIPTS_B_IN = COMPILE.in INSTALL.in REMOVE.in Rd2contents.in \ - Rdconv.in Rdindex.in SHLIB.in Sd2Rd.in \ + Rdconv.in Rdindex.in SHLIB.in Sd2Rd.in LIB.in \ build-help.in check.in SCRIPTS_B = $(SCRIPTS_B_IN:.in=) --- ./src/scripts/LIB.in.genlibs-patch Tue Oct 3 14:49:24 2000 +++ ./src/scripts/LIB.in Tue Oct 3 14:49:24 2000 @@ -0,0 +1,59 @@ +#!/bin/sh +# +# ${R_HOME}/bin/LIB + +# @configure_input@ + +revision='$Revision: 1.12 $' +version=`set - ${revision}; echo ${2}` +version="R shared library builder ${version}" + +usage="Usage: R LIB [options] files + +Build a static library for linking into other packages from the +specified source or object files (which are automagically made from +their sources). If not given via \`--output', the name for the library +is determined from the first file. + +Options: + -h, --help print short help message and exit + -o, --output=LIB use LIB as (full) name for the built library + -v, --version print version info and exit + +Report bugs to ." + +lib= +objs= +MAKE=${MAKE-@MAKE@} +makefiles="-f ${R_HOME}/etc/Makeconf" + +while test -n "${1}"; do + case ${1} in + -h|--help) + echo "${usage}"; exit 0 ;; + -v|--version) + echo "${version}"; exit 0 ;; + -o) + lib=${2}; shift ;; + --output=*) + lib=`echo "${1}" | sed -e 's/[^=]*=//'` ;; + *.cc|*.[cfo]) + if test -z "${lib}"; then + lib="`echo ${1} | sed 's/\.[^\.][^\.]*$/.@SHLIBEXT@/'`" + fi + objs="${objs} `echo ${1} | sed 's/\.[^\.][^\.]*$/.o/'`" + ;; + esac + shift +done + +if test -r Makevars; then + makefiles="-f Makevars ${makefiles}" +fi + +${MAKE} ${makefiles} LIB="${lib}" OBJS="${objs}" + +### Local Variables: *** +### mode: sh *** +### sh-indentation: 2 *** +### End: *** --- ./configure.in.genlibs-patch Mon Jul 31 00:46:45 2000 +++ ./configure.in Tue Oct 3 14:49:24 2000 @@ -873,6 +873,7 @@ src/scripts/Rdconv src/scripts/Rdindex src/scripts/SHLIB + src/scripts/LIB src/scripts/Sd2Rd src/scripts/build-help src/scripts/check