ttest_optdepends.sh - petsc-git-PKGBUILD - build template for non-complex PETSC… | |
git clone git://src.adamsgaard.dk/petsc-git-PKGBUILD | |
Log | |
Files | |
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 $N… | |
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$/{… | |
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 '… | |
196 # # CONFOPTS="${CONFOPTS} --with-opengl=1" | |
197 # # CONFOPTS="${CONFOPTS} --with-opengl-lib=[${OPENGLIB}]" | |
198 # # CONFOPTS="${CONFOPTS} --with-opengl-include=[/usr/include/GL/gle… | |
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\/[^/]*… | |
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}" |