#!/bin/bash ####################### # University of Wisconsin Madison, Space Science Engineering Center (SSEC) #file_Date = '$Date: 2016-07-05 15:12:24 -0400 (Tue, 05 Jul 2016) $' #file_Revision = '$Revision: 775 $' #file_Author = '$Author: scottm $' #file_HeadURL = '$HeadURL: https://svn.ssec.wisc.edu/repos/jpss_adl_distribution/trunk/httpsFiles/SSEC-Support/ADL_BLOCK_2/scripts/adl_cots_install.sh $' #file_Id = '$Id: adl_cots_install.sh 775 2016-07-05 19:12:24Z scottm $' ####################### # University of Wisconsin Madison, Space Science Engineering Center (SSEC) # script to install ADL cots from server at UW-Madison #ADL_COTS/adl_cots.sh wipe all 2>&1 | tee ADL_COTS/java.log gcc --version # gcc netos6 Comment these out for buildbucket export CC="gcc" export CPP="cpp" export CXX="g++" export FORTRAN="gfortran" export FC="gfortran" # gcc netos6 Comment above out for buildbucket #CC, FC, CXX, F90, F77, F9X #LINUXCPUFLAGS="-msse4a -fPIC" #gcc buildbucket export FORTRAN=${FC} export F77=${FORTRAN} export FC=${FORTRAN} export LOADER=${FORTRAN} export F77_COMPILER=${FORTRAN} export F90_COMPILER=${FORTRAN} export F95_COMPILER=${FORTRAN} export CPP_COMPILER=${FORTRAN} export FFLAGS=" -O3 -msse4a -fPIC -Wall -funderscoring -x f77" ###"-msse4a -msse4a LINUXCPUFLAGS="-march=ivybridge" echo "CPPFLAGS" $CPPFLAGS echo "CPATH" $CPATH export F77_FLAGS=${FFLAGS} export CFLAGS=" -msse4a -g -O3 -fPIC -Wall -Wno-unknown-pragmas -Wunused-variable -Wunused-but-set-parameter " export CPPFLAGS=" -msse4a -g -O3 -fPIC -Wall -Wno-unknown-pragmas -Wunused-variable -fpermissive -Wunused-but-set-parameter " export CXXFLAGS=$CPPFLAGS echo "CPPFLAGS" $CPPFLAGS echo "CPATH" $CPATH COTS_HOME=/csppbinaries/cspp-sdr-binary/distro/ COTSBASE=/CSPP_SDR_4_0 mkdir -p ${COTSBASE} echo $COTSBASE echo $COTS_HOME export ADL_COTS=${COTS_HOME}/tars export USER_COTS_PATH=${COTSBASE}/local export BUILD=${COTSBASE}/build echo "LD_RUN_PATH" $LD_RUN_PATH echo "LD_LIBRARY_PATH" $LD_LIBRARY_PATH echo "PATH" $PATH export LD_LIBRARY_PATH=${USER_COTS_PATH}/lib64:${USER_COTS_PATH}/lib:${LD_LIBRARY_PATH} export LD_RUN_PATH=${USER_COTS_PATH}/lib64:${USER_COTS_PATH}/lib:${LD_RUN_PATH} export PATH=${USER_COTS_PATH}/bin:$PATH install_the_source (){ echo ${FUNCNAME[0]} # This will download and unpack the requested COT. If the cot is already present it will not be downloaded. tar_name=$1 destination=${BUILD}"/" echo "install " ${tar_name} "to "${destination} if [ -e ${ADL_COTS}/${tar_name} ] ; then cd ${BUILD} tar -xf ${ADL_COTS}/${tar_name} if [ $? == "0" ] ; then echo "Package unpacked: " ${tar_name} return 0 else unzip ${ADL_COTS}/${tar_name} return 0 fi else echo "No source " ${ADL_COTS}/${tar_name} fi return 1 } echo_var() { var=${1} echo $1 echo "$1="${${var}} } echo_vars() { echo_var "COTS_HOME" echo_var "DOWNLOAD" echo_var "BUILD" echo_var "USER_COTS_PATH" echo_var "CC" echo_var "CPP" echo_var "CXX" echo_var "FORTRAN" echo_var "F77" echo_var "FC" echo_var "LOADER" echo_var "F77_COMPILER" echo_var "F90_COMPILER" echo_var "F95_COMPILER" echo_var "CPP_COMPILER" echo_var "FFLAGS" echo_var "F77_FLAGS" echo_var "LD_RUN_PATH" echo_var "LD_LIBRARY_PATH" gcc -version gfortran --version } chk_installed() { echo ${FUNCNAME[0]} exit_now=0 echo "Variables" which ${CC} which ${CPP} which ${CXX} which gcc if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install gcc.x86_64" exit_now=1 fi which g++ if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install gcc-c++.x86_64" exit_now=1 fi which gfortran if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install gcc-gfortran.x86_64" exit_now=1 fi X11=`find / -mount -name Xlib.h 2>&-` if [ -z ${X11} ]; then echo "Possible installation command" echo "sudo yum install libXt-devel.x86_64" fi X11=`find / -mount -iname expat-dev* 2>&-` if [ -z ${X11} ]; then echo "Possible installation command" echo "sudo yum install expat-devel.x86_64" fi which bison if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install bison.x86_64" exit_now=1 fi which jar if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install java-1.8.0-openjdk-devel.x86_64 " exit_now=1 fi which ksh if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install sudo yum install ksh.x86_64" exit_now=1 fi which imake if [ $? -eq 1 ] ; then echo "Possible installation command" echo " sudo yum install imake.x86_64" exit_now=1 fi which tclsh if [ $? -eq 1 ] ; then echo "Possible installation command" echo " sudo yum install tcl-devel.x86_64" exit_now=1 fi which perl if [ $? -eq 1 ] ; then echo "Possible installation command" echo "perl must be at least 5.10.1" perl -v #2>&1 | grep "version" fi which cpan if [ $? -eq 1 ] ; then echo "Possible installation command" echo "sudo yum install perl-CPAN.x86_64" fi modules="File::Basename Getopt::Std Data::Dumper FileHandle Exporter XML::Simple " exit_now=0 for mod in ${modules} ; do perl -M${mod} -e 1 &> perl.log if [ $? != 0 ] ; then echo "Possible installation command" echo "sudo cpan -f ${mod} " exit_now=1 else echo 'Module: ' ${mod} 'present' fi done if [ ${exit_now} -ne 0 ] ; then echo "Missing perl COTS listed above" echo "Suggested commands listed" exit 1 fi boost_libs=`find /usr -iname *libboost*` if [ ! -z "${boost_libs}" ] ; then echo "Warning parts of Boost already installed" fi } mk_libtool() { echo ${FUNCNAME[0]} tar_name=libtool-2.4.6.tar.gz && \ rm -fr ${BUILD}/libtool* && \ install_the_source ${tar_name} && \ cd ${BUILD}/libtool* && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" } mk_xerces() { echo ${FUNCNAME[0]} tar_name=xerces-c-3.2.3.tar.gz && \ install_the_source ${tar_name} && \ cd ${BUILD}/xerces-c-3.2.3 && \ ./configure --enable-static --enable-shared --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_png() { echo ${FUNCNAME[0]} tar_name=libpng-1.6.37.tar.gz && \ install_the_source ${tar_name} && \ cd ${BUILD}/libpng* && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_zlib() { echo ${FUNCNAME[0]} tar_name=zlib-1.2.7.tar.gz && \ install_the_source ${tar_name} && \ cd ${BUILD}/zlib* && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_bz2() { echo ${FUNCNAME[0]} tar_name=bzip2-1.0.6.tar.gz && / install_the_source ${tar_name} && / cd ${BUILD}/bz* && / make clean && / make install PREFIX=${USER_COTS_PATH} CFLAGS=" ${CFLAGS} -Winline -D_FILE_OFFSET_BITS=64" CC="${CC}" && \ rm bzless; ln -sr bzmore bzless && / rm bzegrep; ln -sr bzgrep bzegrep && / rm bzfgrep; ln -sr bzgrep bzfgrep && / echo "${FUNCNAME[0]} finished" && \ return 0 } # -D_GLIBCXX_USE_CXX11_ABI=0 mk_boost(){ echo ${FUNCNAME[0]} tar_name=boost_1_57_0.tar.gz && \ rm -fr ${USER_COTS_PATH}/lib/*boost* && \ rm -fr ${USER_COTS_PATH}/include/boost && \ install_the_source ${tar_name} && \ cd ${BUILD}/boost* && \ ./bootstrap.sh --help ./bootstrap.sh --with-toolset=gcc --with-libraries="filesystem","iostreams","regex","thread","serialization","system" --prefix="${USER_COTS_PATH}" && \ ./b2 --help-options ./b2 install toolset=gcc -q --build-dir=tmp --debug-configuration -d+2 --prefix="${USER_COTS_PATH}" linkflags="-L${USER_COTS_PATH}/lib" cxxflags="${CXXFLAGS} -Wunused-but-set-parameter " && \ #./b2 install --debug-configuration -d+2 --prefix="'${USER_COTS_PATH}'" --build-dir=tmp/build-boost optimization=speed linkflags="-L${USER_COTS_PATH}/lib" cxxflags="'${CXXFLAGS}' " && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_wgrib2() { echo ${FUNCNAME[0]} tar_name=wgrib2.v2.0.2.tgz && \ rm -fr ${BUILD}/grib2 && \ install_the_source ${tar_name} && \ cd ${BUILD}/g* && \ # do this twice make USE_G2CLIB=1 && \ cp -f ./g2clib-1.4.0/libgrib2c.a ${USER_COTS_PATH}/lib && \ cp -f --preserve=links ./libpng*/.libs/* ${USER_COTS_PATH}/lib && \ cp -f --preserve=links ./jasp*/src/libjasper/.libs/* ${USER_COTS_PATH}/lib && \ cp -f ./g2clib-1.4.0/grib2.h ${USER_COTS_PATH}/include && \ cp ${BUILD}/grib2/wgrib2/wgrib2 ${USER_COTS_PATH}/bin && \ #ln -fs ${USER_COTS_PATH}/lib ${USER_COTS_PATH}/g2clib-1.4.0 && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_hdf5() { echo ${FUNCNAME[0]} gcc --version tar_name=hdf5-1.10.4.tar.gz && \ install_the_source ${tar_name} && \ cd ${BUILD}/hdf* && \ ./configure --enable-static=yes --enable-shared=yes --with-zlib=${USER_COTS_PATH} --with-slib=${USER_COTS_PATH} --with-szlib=${USER_COTS_PATH} --prefix=${USER_COTS_PATH} CPPFLAGS="${CPPFLAGS}" CXXFLAGS="${CXXFLAGS}" CPATH="${CPATH}" C_INCLUDE="${C_INCLUDE}" CFLAGS="${CFLALGS}" CC="${CC}" && \ make clean && \ make -j 3 && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_log4cplus() { echo ${FUNCNAME[0]} tar_name=log4cplus-1.0.4.3.tar.gz && \ install_the_source ${tar_name} && \ cd ${BUILD}/log4c* && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_szip() { echo ${FUNCNAME[0]} tar_name=szip-2.1.tar.gz && \ rm -fr ${BUILD}/szip* && \ #rm ${USER_COTS_PATH}/lib/*slibc* install_the_source ${tar_name} && \ cd ${BUILD}/szip* && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_slibc() { echo ${FUNCNAME[0]} tar_name=slibc-0.9.3.tar.gz && \ rm -fr ${BUILD}/slibc* && \ rm -fr ${USER_COTS_PATH}/lib/*slibc* && \ install_the_source ${tar_name} && \ cd ${BUILD}/slibc* && \ export PATH=${USER_COTS_PATH}/bin:${PATH} && \ cd src && \ cat stdio_s.c | sed "s#inline void get_s_cleanup#void get_s_cleanup#" > test.c && \ mv test.c stdio_s.c && \ cd .. && \ make && \ cp -r include/* ${USER_COTS_PATH}/include && \ cp src/libslibc.so.0.9.3 ${USER_COTS_PATH}/lib/ && \ cd ${USER_COTS_PATH}/lib && \ ln -s ./libslibc.so.0.9.3 libslibc.so && \ ln -s ./libslibc.so.0.9.3 libslibc++.so && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_sqlite() { echo ${FUNCNAME[0]} tar_name=sqlite-autoconf-3330000.tar.gz && \ rm -fr ${BUILD}/SQ* && \ cd ${BUILD} && \ install_the_source ${tar_name} && \ cd ${BUILD}/sqlite* && \ ./configure --prefix=${USER_COTS_PATH} --exec-prefix=${USER_COTS_PATH} --disable-tcl && \ make && \ make install && \ echo "${FUNCNAME[0]} finished" && \ return 0 } #liblapack.a mk_lapack(){ echo ${FUNCNAME[0]} tar_name=lapack-3.5.0.tgz && \ rm -fr ${BUILD}/lapack* && \ install_the_source $tar_name && \ cd ${BUILD}/lapack* && \ cp make.inc.example make.inc && \ echo "Building BLAS / LAPACK" && \ cd BLAS/SRC && \ export LD_RUN_PATH=${USER_COTS_PATH}/lib64:${USER_COTS_PATH}/lib && \ echo $LD_RUN_PATH && \ export FORTRAN=${FC} && \ export LOADER=${FC} && \ make OPTS=" -msse4a -O3 -fPIC -Wall -funderscoring " LD_RUN_PATH=${LD_RUN_PATH} FORTRAN="${FORTRAN} -funderscoring -g " LOADER="${LOADER}" && \ cd ../.. && \ make OPTS=" -msse4a -fPIC -Wall " LD_RUN_PATH=${LD_RUN_PATH} FORTRAN="${FORTRAN} -fimplicit-none -funderscoring -g" LOADER="${LOADER} -g" && \ cp librefblas.a libblas.a && \ cp *.a ${USER_COTS_PATH}/lib && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_gtest() { echo ${FUNCNAME[0]} tar_name=gtest-1.7.0.zip && \ rm -fr ${BUILD}/gtest* && \ cd ${BUILD} && \ install_the_source ${tar_name} && \ cd ${BUILD}/gtest* && \ ./configure --prefix=${USER_COTS_PATH} && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_proto() { echo ${FUNCNAME[0]} tar_name=protobuf-3.8.x.zip && \ rm -fr ${BUILD}/protobuf* && \ rm -fr ${USER_COTS_PATH}//google/protobuf && \ rm -fr ${USER_COTS_PATH}/lib/*proto* && \ rm -fr ${USER_COTS_PATH}/lib/*proto* && \ cd ${BUILD} && \ install_the_source ${tar_name} && \ cd ${BUILD}/protobuf* && \ echo ${USER_COTS_PATH} && \ libtoolize --force && \ ./autogen.sh --prefix=${USER_COTS_PATH} && \ ./configure --prefix=${USER_COTS_PATH} && \ make && \ make install && \ LIB=${BUILD}/protobuf-3.8/lib && \ echo "Now java part" && \ cd ${BUILD}/protobuf*/java && \ export LD_LIBRARY_PATH=${USER_COTS_PATH}/lib && \ export LD_RUN_PATH=${USER_COTS_PATH}/lib && \ ${USER_COTS_PATH}/bin/protoc --java_out=core/src/main/java -I../src ../src/google/protobuf/descriptor.proto && \ cd ${BUILD}/protobuf* && \ cd java/core/src/main/java/com/google/protobuf && \ javac *.java && \ cd ${BUILD}/protobuf* && \ cd java/core/src/main/java && \ jar cf ${USER_COTS_PATH}/lib/protobuf-java-3.8.0.jar com/google/protobuf/*.class && \ echo "mk_proto complete" } mk_fftw() { echo ${FUNCNAME[0]} tar_name=fftw-3.3.4.tar.gz && \ install_the_source $tar_name && \ cd ${BUILD}/fftw* && \ CFLAGS=-msse4a ./configure --with-gcc-arch=pentium4 --enable-shared=yes --enable-static=yes --enable-portable-binary --prefix=${USER_COTS_PATH} && \ make && \ make install } mk_slatec4 () { echo ${FUNCNAME[0]} tar_name=slatec.tar.gz && \ install_the_source $tar_name && \ cd ${BUILD}/slatec/src && \ make CXXFLAGS=" -msse4a -funderscoring -O3 -fPIC -Wall -Wno-unknown-pragmas " && \ mv static/libslatec.a ${USER_COTS_PATH}/lib } mk_pppack() { echo ${FUNCNAME[0]} tar_name=pppack.tar.gz && \ rm -fr ${BUILD}/pppack* && \ install_the_source ${tar_name} && \ # this must use underscores cd ${BUILD}/PPPack && \ echo "Building pppack" && \ export F77_COMPILER="${FC}" && \ export F90_COMPILER="${FC}" && \ export F95_COMPILER="${FC}" && \ export CPP_COMPILER="${FC}" && \ make FCompile_Optn=" -m64 -fPIC -ffree-form -fimplicit-none -funderscoring" F77Compile_Optn=" -m64 -fPIC -ffixed-form -fimplicit-none -funderscoring -x f77" F77_FLAGS="-m64 -fPIC -ffixed-form -funderscoring -x f77" && \ mv libpppack.a ${USER_COTS_PATH}/lib } mk_cminpak(){ echo ${FUNCNAME[0]} tar_name=cminpack-1.3.6.zip && \ cd ${BUILD} && \ rm -fr ${BUILD}/cminpack-1.3.6 && \ unzip ${ADL_COTS}/$tar_name && \ cd ${BUILD}/cminpack-1.3.6 && \ make -f Makefile && \ cp cminpack.h ${USER_COTS_PATH}/include && \ cp libcminpack.a ${USER_COTS_PATH}/lib && \ echo "${FUNCNAME[0]} finished" && \ return 0 } mk_open_ssl() { echo ${FUNCNAME[0]} tar_name=openssl-1.0.2a.tar.gz && \ rm -fr ${BUILD}/openssl* && \ install_the_source ${tar_name} && \ cd ${BUILD}/open* && \ ./config --openssldir=${BUILD} --prefix=${USER_COTS_PATH} && \ make && \ make test && \ make install } where() { cd ${BUILD} mkdir where cd where rm *.o cp ${ADL_COTS}/getday.c . cp ${ADL_COTS}/gettim.c . cp ${ADL_COTS}/where.f . gfortran where.f gettim.c getday.c -o where cp where ${USER_COTS_PATH}/bin } wipe() { rm -fr ${BUILD} rm -fr ${USER_COTS_PATH} mkdir -p ${BUILD} mkdir -p ${USER_COTS_PATH} mkdir -p ${USER_COTS_PATH}/lib64 mkdir -p ${USER_COTS_PATH}/bin/ mkdir -p ${USER_COTS_PATH}/include } for_container() { echo ${FUNCNAME[0]} MYLIBS=/usr/lib64/ #echo "ls ${MYLIBS}" #ls ${MYLIBS} #find / -iname libgfortran.* rm ${USER_COTS_PATH}/lib/libgfortran.* rm ${USER_COTS_PATH}/lib/libquadmath.* rm ${USER_COTS_PATH}/lib/libgcc* rm ${USER_COTS_PATH}/lib/libstdc++* rm ${USER_COTS_PATH}/lib64/libgfortran.* rm ${USER_COTS_PATH}/lib64/libquadmath.* rm ${USER_COTS_PATH}/lib64/libgcc* rm ${USER_COTS_PATH}/lib64/libstdc++* cp --preserve=links ${MYLIBS}/libgfortran.* ${USER_COTS_PATH}/lib64 cp --preserve=links ${MYLIBS}/libquadmath.* ${USER_COTS_PATH}/lib64 cp --preserve=links ${MYLIBS}/libgcc* ${USER_COTS_PATH}/lib64 cp --preserve=links ${MYLIBS}/libstdc++* ${USER_COTS_PATH}/lib64 cmd="ls -al ${USER_COTS_PATH}/lib64" echo $cmd $cmd } fix_links() { cd ${USER_COTS_PATH}/bin && \ rm -f bzcmp && \ ln -s ./bzcmp bzdiff && \ rm -f bzegrep && \ ln -s ./bzegrep bzgrep && \ rm -f bzfgrep && \ ln -s ./bzfgrep bzgrep && \ rm -f bzless && \ ln -s ./bzless bzmore && \ echo "${FUNCNAME[0]} finished" && \ return 0 } all() { for_container && \ mk_xerces && \ mk_png && \ mk_zlib && \ mk_bz2 && \ mk_boost && \ mk_wgrib2 && \ mk_szip && \ mk_hdf5 && \ exit && \ mk_log4cplus && \ mk_slibc && \ mk_sqlite && \ mk_fftw && \ mk_slatec4 && \ mk_lapack && \ mk_pppack && \ mk_libtool && \ mk_cminpak && \ mk_proto && \ fix_links && \ echo "COTS Built" } wipe all