#!/bin/ksh # $Id: Build.sh 343 2010-02-19 05:42:24Z elkner $ # source: http://www.r-project.org/ | http://mirrors.softliste.de/cran/ # license: GPL VERSION=2.10.1 SDIR=`dirname $0` if [ "$SDIR" == "." ]; then SDIR=`pwd` fi SCRIPTDIR=${SDIR}/../../../../etc . ${SCRIPTDIR}/buildfunctions.sh SRC=$SOURCE/misc/R TMPBUILD=$BUILD/R-${VERSION} REAL_STUDIO_HOME=$(readlink -f $STUDIO_HOME) doPrepare() { SUNPKGS="SUNWxwinc SUNWxwplt SUNWTcl SUNWTk SUNWbzip SUNWzlib SUNWpcre SUNWgnu-readline SUNWxdg-utils SUNWperl584core SUNWxwice SUNWpango SUNWglib2 SUNWpng SUNWcairo SUNWjpg SUNWTiff SUNWless SUNWzip SUNWunzip SUNWgawk SUNWggrp SUNWgtar SUNWtexi SUNWxcu4" #REQUIRED="LNFpcre LNFreadline LNFncurses" . ${SCRIPTDIR}/root4build gtar xzf ${SRC}/R-${VERSION}.tar.gz cd $TMPBUILD # gunzip -c ${SRC}/R-${VERSION}-release.diff.gz | gpatch -p1 -b -z .org ls -1 ${SDIR}/*.patch | grep -v sunperf | while read p ; do gpatch -p1 -b -z .orig <$p done gpatch -p1 -b -z .orig <${SDIR}/sunperf-base.patch gsed -i -e 's,SHLIB_FCD,SHLIB_FCLD,' configure.ac cp ${SDIR}/blas00.c ./src/extra/blas/blas00.c gsed -i -e 's, 1\.4,1.6,g' m4/java.m4 # as long as -z defs is enabled gsed -i -e '/^EXTRA_LIBS/ s,$, -lsunperf,' src/main/Makefile.in gsed -i -e '/^PKG_LIBS/ s,$, -lsunperf,' src/library/stats/src/Makefile.in gsed -i -e '/^internet_la_LIBADD/ s,= ,= -lsocket -lnsl -lmtsk ,' \ src/modules/internet/Makefile.in gsed -i \ -e '/^Rlapack_la_LIBADD/ s,= ,= -lfsu -lsunperf -lsunmath -lmtsk -lm ,' \ -e '/^lapack_la_LIBADD/ s,= ,= -lsunperf ,' \ src/modules/lapack/Makefile.in gsed -i -e '/^@BUILD_AQUA_TRUE@PKG_LIBS/ s,^.*$,PKG_LIBS=-lmtsk -lm,' \ src/library/grDevices/src/Makefile.in gsed -i -e '/^PKG_LIBS/ s,-lfui,-lsunperf -lfui,' \ src/library/stats/src/Makefile.in gsed -i -e '/^PKG_CFLAGS/ a\ PKG_LIBS = -lm' \ src/library/grid/src/Makefile.in gsed -i -e 's,en_US.utf8,en_US.UTF-8,g' \ src/library/tools/R/QC.R doc/html/R-admin.html \ doc/manual/R-exts.texi doc/manual/R-admin.texi # doc/manual/R-exts.html doc/manual/R-admin.html \ # src/library/tools/all.R \ aclocal -I m4 autoheader -I m4 autoconf # damn stupid matrix contains an empty dummy.cpp, which forces 'CC' # to be used for R lib linkage cd src/library/Recommended ; mkdir x ; cd x gtar xzf ../Matrix.tgz cd Matrix ; gpatch -p1 -b -z .orig <${SDIR}/sunperf-Matrix.patch find . -name dummy.cpp -exec rm -f {} \; cd .. ; gtar cplf - Matrix | gzip -c >../Matrix.tgz gtar xzf ../mgcv.tgz cd mgcv ; gpatch -p1 -b -z .orig <${SDIR}/sunperf-mgcv.patch cd .. ; gtar cplf - mgcv | gzip -c >../mgcv.tgz } # NOTES: ./src/include/config.h # HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_RWLOCK, # PTHREAD_IN_USE_DETECTION_HARD not relevant since # ./src/extra/intl/ will not be built (gettext is already in libc) doMake() { cd $TMPBUILD export LD_LIBRARY_PATH="${LD_LIBRARY_PATH_64}:${TMPBUILD}/lib" unset LD_LIBRARY_PATH_32 unset LD_LIBRARY_PATH_64 #L_FFLAGS="-xlibmopt" # causes relocation error wrt. NINT() in libsunmath # -xprefetch=auto -xprefetch_level=3 #L_CFLAGS="-xbuiltin=%all" # produces a wrong test result L_CPPFLAGS="-I$ROOT4BUILD/usr/include -I/usr/sfw/include -I${REAL_STUDIO_HOME}/prod/include/cc" if [ $DEBUG = 0 ]; then BASE_FLAGS="-xvector=simd -xautopar -xdepend -g -fsimple=0 -fns=no -m${MEM_MODEL} -xarch=${PKG_ARCH} -nofstore -xlibmil $L_CPPFLAGS" [ `uname -p` = "sparc" ] && BASE_FLAGS="-dalign $BASE_FLAGS" L_CFLAGS="-xO5 -xcrossfile -xstrconst -xc99 -xlibmieee $BASE_FLAGS" L_CXXFLAGS="-library=stlport4 -xO3 $BASE_FLAGS" L_FFLAGS="-xO5 -xcrossfile $BASE_FLAGS -pad=local -stackvar -xknown_lib=blas,intrinsics" L_SHCXXLDFLAGS="-library=stlport4 -xO3 -xautopar -Bdirect -zdefs -lCrun -lc" L_SHLDFLAGS="-xO5 -xautopar -Bdirect -Wl,-z,defs" else BASE_FLAGS="-g -fsimple=0 -fns=no -m${MEM_MODEL} -xarch=${PKG_ARCH} -nofstore -xlibmil $L_CPPFLAGS" [ `uname -p` = "sparc" ] && BASE_FLAGS="-dalign $BASE_FLAGS" L_CFLAGS="-xc99 -xlibmieee $BASE_FLAGS" L_CXXFLAGS="-library=stlport4 $BASE_FLAGS" L_FFLAGS="$BASE_FLAGS -pad=local -stackvar -xknown_lib=blas,intrinsics" L_SHCXXLDFLAGS="-library=stlport4 -Bdirect -zdefs -lCrun -lc" L_SHLDFLAGS="-Bdirect -Wl,-z,defs" fi F77=f95 FC=f95 \ OBJC="false" \ FPICFLAGS="-Kpic" FCPICFLAGS="-Kpic" \ CPICFLAGS="-Kpic" CXXPICFLAGS="-Kpic" \ CFLAGS="$L_CFLAGS" CXXFLAGS="$L_CXXFLAGS" \ FFLAGS="$L_FFLAGS" FCFLAGS="$L_FFLAGS" \ CPPFLAGS="$L_CPPFLAGS" \ LDFLAGS="$L_LDFLAGS" \ SHLIB_FCLD="cc" \ SHLIB_CXXLDFLAGS="$L_SHCXXLDFLAGS" \ SHLIB_LDFLAGS="$L_SHLDFLAGS" \ ./configure --prefix=/usr \ --disable-rpath \ --enable-shared \ --disable-static \ --enable-R-shlib \ --enable-BLAS-shlib \ --with-blas=sunperf \ --with-lapack=sunperf \ --with-system-zlib \ --with-system-bzlib \ --with-system-pcre \ --with-tcltk \ --with-tcl-config=${ROOT4BUILD}/usr/bin/tclConfig.sh \ --with-tk-config=${ROOT4BUILD}/usr/bin/tkConfig.sh \ # fix RPATH - use implicit LD_RUN_PATH # -> avoid $ORIGIN -> RIGIN make/shell translation gsed -i -r -e 's,-R[^[:space:]]*,,g' \ -e 's, -L(/usr/ccs/lib/amd64|/lib/amd64|/usr/lib/amd64),,g' \ Makeconf etc/Makeconf \ ./src/library/stats/src/Makefile echo "make log goes to $MAKELOG" make 2>&1 1>$MAKELOG | tee /tmp/stderr.log } doPackage() { clean_dst $PROTO cd $TMPBUILD make DESTDIR=$PROTO install MAJOR=${VERSION%%.*} MINOR=${VERSION#*.} MINOR=${MINOR%%.*} cd $PROTO/usr/lib/R gsed -i -e 's,-rpath ,-L,' bin/LINK rm COPYING ; ln -s ./share/licenses/GPL-2 COPYING export R_HOME=$PROTO/usr/lib/R export R_SHARE_DIR=${R_HOME}/share ksh bin/javareconf rm etc/*.old gsed -i -r -e "s,$REAL_STUDIO_HOME,\${STUDIO_HOME},g" \ -e "/JAVA_HOME:=/ s,=[^}]*,=@JAVA_HOME@," \ -e "s,${ROOT4BUILD}/[^:]*,\${STUDIO_HOME}/lib/stlport4/amd64:\${OPAL_PREFIX}/lib/64," \ -e 's,:(/usr/ccs/lib/amd64|/lib/amd64|/usr/lib/amd64),,g' \ etc/ldpaths gsed -i -r -e "s,$REAL_STUDIO_HOME,\$(STUDIO_HOME),g" \ -e "/^JAVA_HOME =/ s,=.*,= @JAVA_HOME@," \ -e "s, -(I|L)${ROOT4BUILD}[^ ]*,,g" \ -e 's, -I/usr/include,,g' \ -e '/^JAVAC =/ a\JFLAGS = -O -Xlint:all' \ -e '/^ALL_CFLAGS =/ s,$, $(PKG_CFLAGS_LAST),' \ -e '/^ALL_CPPFLAGS =/ s,$, $(PKG_CPPFLAGS_LAST),' \ -e '/^ALL_CXXFLAGS =/ s,$, $(PKG_CXXFLAGS_LAST),' \ -e '/^ALL_OBJCFLAGS =/ s,$, $(PKG_OBJCFLAGS_LAST),' \ -e '/^ALL_OBJCXXFLAGS =/ s,$, $(PKG_OBJCXXFLAGS_LAST),' \ -e '/^ALL_FFLAGS =/ s,$, $(PKG_FFLAGS_LAST),' \ -e '/^ALL_LIBS =/ s,#, $(PKG_LIBS_LAST)#,' \ etc/Makeconf gsed -i -e "/^VERSION=/ s,=.*,=${MAJOR}.${MINOR}," \ -e 's,/usr/lib/R,${R_HOME},g' \ bin/R mv ../../share/man share/ mv ../pkgconfig lib/ gsed -i -e "/^rhome=/ s,=.*,=@CLIENT_BASEDIR@/R-${MAJOR}.${MINOR}," \ -e '/^rincludedir=/ s,=.*,=${rhome}/include,' \ lib/pkgconfig/libR.pc cd $TMPBUILD pkginfo2arch nawk -F= '/^NAME/ { print "P LNFr " $2 }' pkginfo.lnf >depend.lnf cat<${TMPBUILD}/prototype.lnf i pkginfo=${TMPBUILD}/pkginfo.lnf i depend=${SDIR}/depend i checkinstall=${SDIR}/checkinstall i i.rename=${SDIR}/i.rename f none R-${MAJOR}.${MINOR}/README=${SDIR}/README.lnf 0644 bin bin EOF pkgproto ${PROTO}/usr/lib/R=R-${MAJOR}.${MINOR} | nawk '{ if ( $1 == "l" || $1 == "s" ) { print } else if ( $1 == "f" ) { if ( $3 ~ "bin/R=|etc/Makeconf=|etc/ldpaths=|/libR.pc=" ) { print $1, "rename", $3, $4, "bin bin" } else { print $1, $2, $3, $4, "bin bin" } } else { print $1, $2, $3, $4, "bin bin" } }' >>${TMPBUILD}/prototype.lnf cat<${TMPBUILD}/prototype.links.lnf i pkginfo=${TMPBUILD}/pkginfo.doc.lnf i depend=${TMPBUILD}/depend.lnf i checkinstall=${SDIR}/checkinstall.links d none bin ? ? ? d none lib ? ? ? d none lib/pkgconfig ? ? ? d none share ? ? ? d none share/man ? ? ? d none share/man/man1 ? ? ? s none bin/R=\$R_DIR/bin/R s none bin/Rscript=\$R_DIR/bin/Rscript s none share/man/man1/R.1=\$R_DIR/share/man/man1/R.1 s none share/man/man1/Rscript.1=\$R_DIR/share/man/man1/Rscript.1 s none lib/pkgconfig/libR.pc=\$R_DIR/lib/pkgconfig/libR.pc EOF PKGDIR=$PKGDIR/R echo "calling ${TMPBUILD}/prototype.lnf" call_pkgmk ${TMPBUILD}/prototype.lnf echo "calling ${TMPBUILD}/prototype.links.lnf" call_pkgmk ${TMPBUILD}/prototype.links.lnf } doBuild "$1"