URI:
       ttest_optdepends.sh - petsc-git-PKGBUILD - build template for non-complex PETSC with petsc4py
  HTML git clone git://src.adamsgaard.dk/petsc-git-PKGBUILD
   DIR Log
   DIR Files
   DIR Refs
       ---
       ttest_optdepends.sh (9764B)
       ---
            1 #!/bin/sh
            2 
            3 # Test if external packages for PETSC are installed
            4 
            5 # Fair attempt to find the directory of a header file
            6 find_inc () {
            7     local INC;
            8     INC="$(find_so "$1")";
            9     # * Faster first
           10     if [ -f "${INC}" ]; then
           11         INC="${INC}";
           12     elif [ -f "${INC}"/"$1" ]; then
           13         # ** The header is inside INC (a directory) e.g.
           14         #    /usr/include/scotch
           15         #    /usr/include/scotch/scotch.h
           16         INC="${INC}"/"$1"
           17     elif [ -d "${INC}" ]; then
           18         # ** INC is a directory, and the header is deep inside
           19         #    (hopefully faster than `pacman')
           20         INC="$(find "${INC}" -name "$1" -print -quit)";
           21     elif [ ! "x$2" == "x" ]; then
           22         # ** May be there is a package?
           23         pacman -Qs "$2" 2>&1>/dev/null && \
           24             INC="$(pacman -Qlq "$2" | grep "/$1\$" || printf "")";
           25     fi;
           26     dirname "${INC}"
           27 }
           28 
           29 # Find a shared object (library; .so extension)
           30 #   example: find_so libboost_mpi
           31 find_so () {
           32     whereis -b "$1" | cut -d' ' -f2
           33 }
           34 
           35 # Find directory where a pkg-config file is
           36 #   example: find_pc glut
           37 find_pc () {
           38     dirname "$(pkgconf --path "$1")"
           39 }
           40 
           41 ONLY_INC="--keep-system-cflags --cflags-only-I";
           42 
           43 type mpicc >/dev/null && \
           44     CONFOPTS="${CONFOPTS} --with-cc=mpicc"
           45 type mpicxx >/dev/null && \
           46     CONFOPTS="${CONFOPTS} --with-cxx=mpicxx"
           47 type mpifort >/dev/null && \
           48     CONFOPTS="${CONFOPTS} --with-fc=mpifort"
           49 
           50 # BOOST: Free peer-reviewed portable C++ source libraries
           51 if [ -f "$(find_so libboost_mpi.so)" ]; then
           52     CONFOPTS="${CONFOPTS} --with-boost=1"
           53 fi;
           54 
           55 # CGNS: Recording and recovering computer data
           56 if [ -f "$(find_so libcgns.so)" ]; then
           57         CONFOPTS="${CONFOPTS} --with-cgns=1"
           58 fi
           59 
           60 # eigen: Lightweight C++ template library for vector and
           61 # matrix math
           62 EIGEN_DIR="$(pkgconf --cflags-only-I eigen3)"
           63 EIGEN_DIR="${EIGEN_DIR##-I}"
           64 if [ -d "${EIGEN_DIR}" ]; then
           65         CONFOPTS="${CONFOPTS} --with-eigen=1"
           66         CONFOPTS="${CONFOPTS} --with-eigen-include=${EIGEN_DIR}"
           67 fi
           68 
           69 # fftw: Fast-Fourier Transform
           70 if [ -f "$(find_so libfftw3_mpi.so)" ]; then
           71         CONFOPTS="${CONFOPTS} --with-fftw=1"
           72 fi
           73 
           74 # GDB: GNU debugger
           75 if [ -f "$(find_so gdb)" ]; then
           76         CONFOPTS="${CONFOPTS} --with-debugger=gdb"
           77 fi
           78 
           79 # # GLUT (requires OpenGL)
           80 # if [ -f "$(find_so libglut.so)" ]; then
           81 #         CONFOPTS="${CONFOPTS} --with-glut=1"
           82 #     CONFOPTS="${CONFOPTS} --with-glut-pkg-config="
           83 #     CONFOPTS="${CONFOPTS} $(find_pc glut)"
           84 # fi
           85 
           86 # HDF5: large files
           87 if [[ "$(h5stat -V)" ]]; then
           88         CONFOPTS="${CONFOPTS} --with-hdf5=1"
           89 fi
           90 
           91 # hwloc: abstraction of hierarchical architectures
           92 if [ -f "$(find_so libhwloc.so)" ]; then
           93         CONFOPTS="${CONFOPTS} --with-hwloc=1"
           94     CONFOPTS="${CONFOPTS} --with-hwloc-pkg-config="
           95     CONFOPTS="${CONFOPTS} $(find_pc hwloc)"
           96 fi
           97 
           98 # Hypre: Large and sparse linear with massive parallel
           99 # computing
          100 HYPRE_SO="$(find_so libHYPRE.so)"
          101 if [ -f "${HYPRE_SO}" ]; then
          102         CONFOPTS="${CONFOPTS} --with-hypre=1"
          103         CONFOPTS="${CONFOPTS} --with-hypre-lib=${HYPRE_SO}"
          104     HYPRE_INC="$(find_inc "HYPRE.h" "hypre")"
          105         CONFOPTS="${CONFOPTS} --with-hypre-include=${HYPRE_INC}"
          106 fi
          107 
          108 # MED: Data Modelization and Exchanges (meshes)
          109 if [ -f "$(find_so libmed.so)" ]; then
          110         CONFOPTS="${CONFOPTS} --with-med=1"
          111 fi
          112 
          113 # METIS: Automatic meshing partitioning
          114 if [ -f "$(find_so libmetis.so)" ]; then
          115         CONFOPTS="${CONFOPTS} --with-metis=1"
          116         # parmetis support
          117         if [ -f "/usr/include/parmetis.h" ]; then
          118                 CONFOPTS="${CONFOPTS} --with-parmetis=1"
          119         fi
          120 fi
          121 
          122 # # MPI4Py
          123 # if [ -n "$(pacman -Qsq mpi4py)" ]; then
          124 #     mpi4py_inc="$(pacman -Ql python-mpi4py | awk '/mpi4py.h$/{print $NF}')"
          125 #         CONFOPTS="${CONFOPTS} --with-mpi4py=1"
          126 #     CONFOPTS="${CONFOPTS} --with-mpi4py-include="
          127 #     CONFOPTS="${CONFOPTS} $(dirname "${mpi4py_inc}")"
          128 #     CONFOPTS="${CONFOPTS} --with-mpi4py-lib="
          129 #     CONFOPTS="${CONFOPTS} $(pacman -Ql python-mpi4py | awk '/.*\.so$/{print $NF}' | tr ' \n' ',')"
          130 # fi
          131 
          132 # MUMPS: Sparse solver library
          133 if [ -f "$(find_so libmumps_common.so)" ]; then
          134         CONFOPTS="${CONFOPTS} --with-mumps=1"
          135 fi
          136 
          137 # NetCDF
          138 if [ -f "$(find_so libnetcdf.so)" ]; then
          139         CONFOPTS="${CONFOPTS} --with-netcdf=1"
          140     CONFOPTS="${CONFOPTS} --with-netcdf-pkg-config="
          141     CONFOPTS="${CONFOPTS} $(find_pc netcdf)"
          142 fi
          143 
          144 # PNG
          145 if [ -f "$(find_so libpng.so)" ]; then
          146         CONFOPTS="${CONFOPTS} --with-png=1"
          147     CONFOPTS="${CONFOPTS} --with-png-pkg-config="
          148     CONFOPTS="${CONFOPTS} $(find_pc libpng)"
          149 fi
          150 
          151 # PNetCDF
          152 if [ -f "$(find_so libpnetcdf.so)" ]; then
          153         CONFOPTS="${CONFOPTS} --with-pnetcdf=1"
          154     CONFOPTS="${CONFOPTS} --with-pnetcdf-pkg-config="
          155     CONFOPTS="${CONFOPTS} $(find_pc pnetcdf)"
          156 fi
          157 
          158 # OpenBLAS: Linear algebra libraries
          159 BLAS_SO="$(find_so libblas.so)"
          160 OPENBLAS_SO="$(find_so libopenblas.so)"
          161 LAPACK_SO="$(find_so liblapack.so)"
          162 if [ -f "${BLAS_SO}" ] && [ -f "${OPENBLAS_SO}" ] \
          163        && [ -f "${LAPACK_SO}" ]; then
          164     # With help from Satish Balay
          165     # @ 3.15.4.33.g0bac13e0fe9 2021-09-21
          166     #  nm -AoD /usr/lib64/libopenblas.so | grep dgetrs_
          167     CONFOPTS="${CONFOPTS} --with-blaslapack-lib=[${LAPACK_SO},${BLAS_SO}]"
          168 fi
          169 
          170 # OpenCL: GPU computing
          171 # Check header files
          172 # (from opencl-headers package; how to do this in a consistent way?)
          173 OPENCL_INC="/usr/include/CL/cl.h"
          174 # Check library (find libOpenCL.so)
          175 OPENCL_SO="$(find_so libOpenCL.so)"
          176 if [ -f "${OPENCL_SO}" ] && [ -f "${OPENCL_INC}" ]; then
          177         CONFOPTS="${CONFOPTS} --with-opencl=1"
          178 fi
          179 
          180 # # OpenGL (mesa)
          181 # # echo /lib64/libOpenGL.so /lib64/libGLX.so /lib64/libGLU.so
          182 # # FindOpenGL found both a legacy GL library:
          183 # #
          184 # #     OPENGL_gl_LIBRARY: /lib64/libGL.so
          185 # #
          186 # # and GLVND libraries for OpenGL and GLX:
          187 # #
          188 # #     OPENGL_opengl_LIBRARY: /lib64/libOpenGL.so
          189 # #     OPENGL_glx_LIBRARY: /lib64/libGLX.so
          190 # OPENGLIB="$(find_so libOpenGL.so)"
          191 # if [ -f "${OPENGLIB}" ]; then
          192 # #    OPENGLIB+=",$(find_so libGL),"
          193 #     # OPENGLIB+=",$(find_so libGLX)"
          194 #     # OPENGLIB+=",$(find_so libGLX)"
          195 #     # # OPENGLIB+="$(pacman -Ql mesa | awk '/\.so$/{print $NF}' | tr ' \n' ',')"
          196 #         # CONFOPTS="${CONFOPTS} --with-opengl=1"
          197 #     # CONFOPTS="${CONFOPTS} --with-opengl-lib=[${OPENGLIB}]"
          198 #     # CONFOPTS="${CONFOPTS} --with-opengl-include=[/usr/include/GL/glew.h]"
          199 #         CONFOPTS="${CONFOPTS} --with-opengl=1"
          200 #     CONFOPTS="${CONFOPTS} --with-opengl-pkg-config="
          201 #     CONFOPTS="${CONFOPTS} $(dirname $(pkgconf --path opengl))"
          202 #     # CONFOPTS="${CONFOPTS} $(pacman -Ql mesa | awk '/\/include\/[^/]*\/$/{print $NF}' | tr ' \n' ',')]"
          203 # fi
          204 
          205 # OpenMP: 64 bits blas and lapack, multi-threaded
          206 if [ -f "$(find_so libomp.so)" ]; then
          207         CONFOPTS="${CONFOPTS} --with-openmp=1"
          208 fi
          209 
          210 # # OpenMPI (dependency; should be found by pacman)
          211 # MPILIBDIR=$(dirname "$(pacman -Qlq openmpi | grep 'libmpi.so$')")
          212 # MPIINC="$(pacman -Qlq openmpi | grep 'mpi.h$')"
          213 # if [ -d "${MPILIBDIR}" ]; then
          214 #         CONFOPTS="${CONFOPTS} --with-mpi=1"
          215 #     CONFOPTS="${CONFOPTS} --with-mpi-dir=/usr/"
          216 # fi
          217 
          218 # Scalapack: Parallel memory linear algebra
          219 if [ -f "$(find_so libscalapack.so)" ]; then
          220         CONFOPTS="${CONFOPTS} --with-scalapack=1"
          221 fi
          222 
          223 # Scotch: Partitioning with sparse matrices
          224 # TODO: general (non-pacman) way
          225 PTSCOTCH_SO="$(find_so libptscotch.so)"
          226 if [ -f "${PTSCOTCH_SO}" ]; then
          227         CONFOPTS="${CONFOPTS} --with-ptscotch=1"
          228     SCOTCH_LIBS=$(pacman -Qlq scotch | grep '.so$'| tr '\n' ',')
          229     # Check if libscotch was compiled with bz2
          230     if [ ! -z "$(nm -D $(find_so libscotch.so) | grep bz)" ]; then
          231         CONFOPTS="${CONFOPTS}$(find_so libbz2.so)"
          232     else
          233         # Remove trailing ,
          234         SCOTCH_LIBS="${SCOTCH_LIBS%%,}"
          235     fi;
          236     CONFOPTS="${CONFOPTS} --with-ptscotch-lib=[${SCOTCH_LIBS}]"
          237     CONFOPTS="${CONFOPTS} --with-ptscotch-include="
          238     CONFOPTS="${CONFOPTS}$(find_inc ptscotch.h scotch)"
          239 fi
          240 
          241 # SuiteSparse: Sparse matrix library
          242 if [ -f "$(find_so libsuitesparseconfig.so)" ]; then
          243         CONFOPTS="${CONFOPTS} --with-suitesparse=1"
          244 fi
          245 
          246 # SuperLU: Subroutines for sparsse linear systems
          247 # TODO: programatic way
          248 SUPERLU_DIR="/usr/include/superlu"
          249 if [ -d "${SUPERLU_DIR}" ]; then
          250         CONFOPTS="${CONFOPTS} --with-superlu=1"
          251         CONFOPTS="${CONFOPTS} --with-superlu-lib=-lsuperlu"
          252         CONFOPTS="${CONFOPTS} --with-superlu-include=${SUPERLU_DIR}"
          253 fi
          254 
          255 # YAML: configuration files
          256 # Check library (find libyaml.so)
          257 OPENCL_SO="$(find_so libyaml.so)"
          258 if [ -f "${OPENCL_SO}" ]; then
          259         CONFOPTS="${CONFOPTS} --with-yaml=1"
          260 fi
          261 
          262 # X: to enable ksp_xmonitor
          263 LIBX11_SO="$(find_so libX11.so)"
          264 LIBX11_DIR="$(dirname ${LIBX11_SO})"
          265 if [ -f "${LIBX11_SO}" ]; then
          266     LIBX11_INC="$(pkgconf ${ONLY_INC} x11)";
          267     LIBX11_INC="${LIBX11_INC//-I/}";
          268         CONFOPTS="${CONFOPTS} --with-x-lib=[${LIBX11_DIR}/";
          269     # As per X11.pc, it seems that xcb.so is needed
          270     CONFOPTS="${CONFOPTS}libX11-xcb.so,${LIBX11_SO}]"
          271     CONFOPTS="${CONFOPTS} --with-x-include=${LIBX11_INC}"
          272 fi
          273 
          274 # ZLIB
          275 if [ -f "$(find_so libzlib.so)" ]; then
          276         CONFOPTS="${CONFOPTS} --with-zlib=1"
          277     CONFOPTS="${CONFOPTS} --with-zlib-pkg-config="
          278     CONFOPTS="${CONFOPTS} $(find_pc zlib)"
          279 fi
          280 
          281 # # trilinos support
          282 #
          283 # if [ "${TRILINOS_DIR}" ]; then
          284 #         CONFOPTS="${CONFOPTS} --with-ml-dir=${TRILINOS_DIR}"
          285 #         # boost support (may be useful for trilinos)
          286 #         CONFOPTS="${CONFOPTS} --with-boost=1"
          287 # fi
          288 
          289 # Incompatible with complex
          290 # # sundials support
          291 # SUNDIALS_DIR="/usr/include/sundials/"
          292 # if [ -d "${SUNDIALS_DIR}" ]; then
          293 #         CONFOPTS="${CONFOPTS} --with-sundials=1"
          294 #         CONFOPTS="${CONFOPTS} --with-sundials-include=${SUNDIALS_DIR}"
          295 # fi
          296 
          297 # # pastix support (non-free)
          298 # PASTIX_CONF=$(which pastix-conf)
          299 # if [ -f "${PASTIX_CONF}" ]; then
          300 #         PASTIX_DIR="$($PASTIX_CONF --incs | sed 's/-I//')"
          301 #         if [ ! -d ${PASTIX_DIR} ]; then
          302 #                 PASTIX_DIR="[]"
          303 #         fi
          304 #         #PASTIX_LIBS="$($PASTIX_CONF --libs)"
          305 #         PASTIX_LIBS="[libpastix.a,librt.so,libhwloc.so,libpthread.a]"
          306 #         CONFOPTS="${CONFOPTS} --with-pastix=1"
          307 #         CONFOPTS="${CONFOPTS} --with-pastix-lib=${PASTIX_LIBS}"
          308 #         CONFOPTS="${CONFOPTS} --with-pastix-include=${PASTIX_DIR}"
          309 # fi
          310 
          311 echo "${CONFOPTS}"