Salome HOME
spns #32239 - openturns 1.19
[tools/sat_salome.git] / products / compil_scripts / openturns-1.19.sh
1 #!/bin/bash                                                                                                                                                                              
2
3 echo "##########################################################################"
4 echo "openturns" $VERSION
5 echo "##########################################################################"
6
7 # we don't install in python directory -> modify environment as described in INSTALL file
8
9 mkdir -p $PRODUCT_INSTALL/lib/python${PYTHON_VERSION}/site-packages
10 export PATH=$(pwd)/bin:$PATH
11 export PYTHONPATH=$(pwd):$PYTHONPATH
12 export PYTHONPATH=${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
13
14 CMAKE_OPTIONS=""
15 if [ -n "$SAT_HPC" ] && [ -n "$MPI_ROOT_DIR" ]; then
16     echo "WARNING: setting CC and CXX environment variables and target MPI wrapper"
17     CMAKE_OPTIONS+=" -DCMAKE_CXX_COMPILER:STRING=${MPI_CXX_COMPILER}"
18     CMAKE_OPTIONS+=" -DCMAKE_C_COMPILER:STRING=${MPI_C_COMPILER}"
19 fi
20
21 CMAKE_OPTIONS+=" -DCMAKE_INSTALL_PREFIX:STRING=${PRODUCT_INSTALL}"
22 CMAKE_OPTIONS+=" -DCMAKE_INSTALL_LIBDIR:STRING=lib"
23 CMAKE_OPTIONS+=" -DCMAKE_BUILD_TYPE:STRING=Release"
24 CMAKE_OPTIONS+=" -DPYTHON_EXECUTABLE=${PYTHONBIN}"
25
26 if [ -n "$SWIG_ROOT_DIR" ] && [ "$SAT_swig_IS_NATIVE" != "1" ]; then
27     CMAKE_OPTIONS+=" -DSWIG_EXECUTABLE=${SWIG_ROOT_DIR}/bin/swig"
28 fi
29
30 if [ -n "$TBB_ROOT_DIR" ] && [ "$SAT_tbb_IS_NATIVE" != "1" ]; then
31     CMAKE_OPTIONS+=" -DTBB_ROOT_DIR=${TBB_ROOT_DIR}"
32     CMAKE_OPTIONS+=" -Dtbb_DIR=${TBB_ROOT_DIR}/lib/cmake"
33 fi
34
35 # https://github.com/persalys/persalys/issues/745
36 LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
37 case $LINUX_DISTRIBUTION in
38     UB22*|CO8*|CO9*|FD36)
39         echo "WARNING: switching OFF TBB support"
40         CMAKE_OPTIONS+=" -DUSE_TBB=OFF"
41         ;;
42     *)
43         ;;
44 esac
45
46 # Blas/Lapack
47 if [ -n "$LAPACK_ROOT_DIR" ] && [ "$SAT_lapack_IS_NATIVE" != "1" ]; then
48     CMAKE_OPTIONS+=" -DLAPACK_DIR=${LAPACK_ROOT_DIR}/lib/cmake/lapack-3.8.0"
49     CMAKE_OPTIONS+=" -DCBLAS_DIR=${LAPACK_ROOT_DIR}/lib/cmake/cblas-3.8.0"
50     CMAKE_OPTIONS+=" -DCBLAS_LIBRARIES=$LAPACK_ROOT_DIR/lib/libcblas.so"
51     CMAKE_OPTIONS+=" -DBLAS_LIBRARIES=$LAPACK_ROOT_DIR/lib/libblas.so"
52 fi
53
54 ### libxml2 settings
55 if [ -n "$LIBXML2_ROOT_DIR" ] && [ "$SAT_libxml2_IS_NATIVE" != "1" ]; then
56     CMAKE_OPTIONS+=" -DLIBXML2_INCLUDE_DIR:STRING=${LIBXML2_ROOT_DIR}/include/libxml2"
57     CMAKE_OPTIONS+=" -DLIBXML2_LIBRARIES:STRING=${LIBXML2_ROOT_DIR}/lib/libxml2.so"
58     CMAKE_OPTIONS+=" -DLIBXML2_XMLLINT_EXECUTABLE=${LIBXML2_ROOT_DIR}/bin/xmllint"
59 fi
60
61 # HDF5
62 if [ -n "$HDF5_ROOT_DIR" ] && [ "$SAT_hdf5_IS_NATIVE" != "1" ]; then
63     CMAKE_OPTIONS+=" -DHDF5_DIR:PATH=${HDF5_ROOT_DIR}/share/cmake/hdf5"
64     CMAKE_OPTIONS+=" -DHDF5_USE_STATIC_LIBRARIES:BOOL=OFF"
65     CMAKE_OPTIONS+=" -DHDF5_ROOT:PATH=${HDF5_ROOT_DIR}"
66     CMAKE_OPTIONS+=" -DHDF5_hdf5_LIBRARY_RELEASE=${HDF5_ROOT_DIR}/lib"
67     CMAKE_OPTIONS+=" -DHDF5_hdf5_hl_LIBRARY_RELEASE=${HDF5_ROOT_DIR}/lib/libhdf5_hl.so"
68     CMAKE_OPTIONS+=" -DHDF5_HL_LIBRARY=${HDF5_ROOT_DIR}/lib/libhdf5_hl.so"
69     CMAKE_OPTIONS+=" -DHDF5_C_INCLUDE_DIR=${HDF5_ROOT_DIR}/include"
70 fi
71
72 # CMINPACK
73 if [ -n "$CMINPACK_ROOT_DIR" ] && [ "$SAT_cminpack_IS_NATIVE" != "1" ]; then
74     CMAKE_OPTIONS+=" -DCMINPACK_ROOT_DIR=${CMINPACK_ROOT_DIR}"
75     CMAKE_OPTIONS+=" -DCMINPACK_INCLUDE_DIR=${CMINPACK_ROOT_DIR}/include/cminpack-1"
76     CMAKE_OPTIONS+=" -DCMINPACK_LIBRARY=$CMINPACK_ROOT_DIR/lib/libcminpack_s.a"
77 else
78     CMAKE_OPTIONS+=" -DCMINPACK_ROOT_DIR=${CMINPACK_ROOT_DIR}"
79     CMAKE_OPTIONS+=" -DCMINPACK_INCLUDE_DIR=${CMINPACK_ROOT_DIR}/include/cminpack-1"
80 fi
81
82 # Blas/Lapack
83 if [ -n "$LAPACK_ROOT_DIR" ] && [ "$SAT_lapack_IS_NATIVE" != "1" ]; then
84     CMAKE_OPTIONS+=" -DLAPACK_DIR=${LAPACK_ROOT_DIR}/lib/cmake/lapack-3.8.0"
85     CMAKE_OPTIONS+=" -DCBLAS_DIR=${LAPACK_ROOT_DIR}/lib/cmake/cblas-3.8.0"
86     CMAKE_OPTIONS+=" -DCBLAS_LIBRARIES=$LAPACK_ROOT_DIR/lib/libcblas.so"
87     CMAKE_OPTIONS+=" -DBLAS_LIBRARIES=$LAPACK_ROOT_DIR/lib/libblas.so"
88 fi
89
90 if [[ $DIST_NAME == "CO" && $DIST_VERSION == "8" &&  -f /usr/lib64/libcblas.so && -f /usr/lib64/libblas.so ]]; then
91     CMAKE_OPTIONS+=" -DCBLAS_LIBRARIES=/usr/lib64/libcblas.so"
92     CMAKE_OPTIONS+=" -DBLAS_LIBRARIES=/usr/lib64/libblas.so"
93 fi
94
95 ### libxml2 settings
96 if [ -n "$LIBXML2_ROOT_DIR" ] && [ "$SAT_libxml2_IS_NATIVE" != "1" ]; then
97     CMAKE_OPTIONS+=" -DLIBXML2_INCLUDE_DIR:STRING=${LIBXML2_ROOT_DIR}/include/libxml2"
98     CMAKE_OPTIONS+=" -DLIBXML2_LIBRARIES:STRING=${LIBXML2_ROOT_DIR}/lib/libxml2.so"
99     CMAKE_OPTIONS+=" -DLIBXML2_XMLLINT_EXECUTABLE=${LIBXML2_ROOT_DIR}/bin/xmllint"
100 fi
101
102 ## nlopt
103 if [ -n "$NLOPT_ROOT_DIR" ] && [ "$SAT_nlopt_IS_NATIVE" != "1" ]; then
104     CMAKE_OPTIONS+=" -DNLOPT_INCLUDE_DIRS:STRING=${NLOPT_ROOT_DIR}/include"
105     CMAKE_OPTIONS+=" -DNLOPT_LIBRARIES:STRING=${NLOPT_ROOT_DIR}/lib"
106     CMAKE_OPTIONS+=" -DNLOPT_DIR:STRING=${NLOPT_ROOT_DIR}"
107 fi
108
109
110
111 echo
112 echo "*** cmake" $CMAKE_OPTIONS
113
114 mkdir -p $BUILD_DIR/openturns
115 mkdir -p  $BUILD_DIR/cache/pip
116 cd  $BUILD_DIR/openturns
117 cmake $CMAKE_OPTIONS $SOURCE_DIR/openturns-1.19
118 if [ $? -ne 0 ]
119 then
120     echo "ERROR on cmake"
121     exit 1
122 fi
123
124 echo
125 echo "*** make" $MAKE_OPTIONS
126 make $MAKE_OPTIONS
127 if [ $? -ne 0 ]
128 then
129     echo "ERROR on make"
130     exit 2
131 fi
132
133 echo
134 echo "*** make install"
135 make install
136 if [ $? -ne 0 ]
137 then
138     echo "ERROR on make install"
139     exit 3
140 fi
141
142 echo
143 echo "*** check installation"
144
145 if [ -d "${PRODUCT_INSTALL}/lib64" ]
146 then
147     mv ${PRODUCT_INSTALL}/lib64/* ${PRODUCT_INSTALL}/lib
148     rmdir ${PRODUCT_INSTALL}/lib64
149 fi
150
151 export PYTHONPATH=${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages:${PYTHONPATH}
152 export LD_LIBRARY_PATH=${PRODUCT_INSTALL}/lib:${LD_LIBRARY_PATH}
153 chmod +x ${SOURCE_DIR}/openturns-1.19/python/test/t_features.py
154 ${SOURCE_DIR}/openturns-1.19/python/test/t_features.py
155 if [ $? -ne 0 ]
156 then
157     echo "ERROR  testing Openturns features...."
158     exit 4
159 fi
160
161 LD_LIBRARY_PATH_REF=${LD_LIBRARY_PATH}
162 if [[ -d "$SOURCE_DIR/otfftw-0.12" ]]; then
163
164     declare -A OTC
165     OTC["otagrum"]="0.6"
166     OTC["otfftw"]="0.12"
167     OTC["otmixmod"]="0.13"
168     OTC["otmorris"]="0.13"
169     OTC["otpmml"]="1.12"
170     OTC["otrobopt"]="0.11"
171     OTC["otsubsetinverse"]="1.9"
172     OTC["otsvm"]="0.11"
173
174     for k in ${!OTC[@]};
175     do         
176         echo
177         echo "*** C O M P O N E N T : $k-${OTC[$k]} "
178         if [[ $k == "otagrum" ]]; then
179             echo "WARNING: skipping $k.."
180             continue
181         fi
182         cd  $BUILD_DIR
183         mkdir ${BUILD_DIR}/$k
184         cd ${BUILD_DIR}/$k 
185         CMAKE_EXTRA_OPTIONS=
186         if [[ $DIST_NAME == "CO" ]]; then
187             CMAKE_EXTRA_OPTIONS+=" -DBUILD_DOC=OFF"  # needs extra latex modules on CentOS 7, 8
188             CMAKE_EXTRA_OPTIONS+=" -DUSE_SPHINX=OFF"
189         fi
190         if [[ $k == "otmixmod" ]]; then
191             CMAKE_EXTRA_OPTIONS+=" -DBUILD_DOC=OFF"
192             CMAKE_EXTRA_OPTIONS+=" -DSOURCEFILES=$SOURCE_DIR/$k-${OTC[$k]}"
193         elif [[ $k == "otsubsetinverse" ]]; then
194             CMAKE_EXTRA_OPTIONS+=" -DOPENTURNS_HOME=$PRODUCT_INSTALL"
195             CMAKE_EXTRA_OPTIONS+=" -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON"
196             CMAKE_EXTRA_OPTIONS+=" -DUSE_SPHINX=OFF"
197         elif  [[ $k == "otfftw" ]]; then
198             CMAKE_EXTRA_OPTIONS+=" -DBUILD_DOC=OFF"
199         elif [ $k == "otmorris" ] &&  [ "$DIST_NAME$DIST_VERSION" == "FD32" ]; then
200             CMAKE_EXTRA_OPTIONS+=" -DBUILD_DOC=OFF"
201             CMAKE_EXTRA_OPTIONS+=" -DUSE_SPHINX=OFF" # missing package to be installed.
202         elif  [[ $k == "otpmml" ]]; then
203             CMAKE_EXTRA_OPTIONS+=" -DBUILD_DOC=OFF"
204         fi
205
206         echo
207         echo "*** cmake " $CMAKE_OPTIONS ${CMAKE_EXTRA_OPTIONS}  $SOURCE_DIR/$k-${OTC[$k]}
208         cmake $CMAKE_OPTIONS ${CMAKE_EXTRA_OPTIONS} $SOURCE_DIR/$k-${OTC[$k]}
209         if [ $? -ne 0 ]
210         then
211             echo "ERROR on cmake"
212             exit 1
213         fi
214         
215         echo
216         echo "*** make" $MAKE_OPTIONS
217         make $MAKE_OPTIONS
218         if [ $? -ne 0 ]
219         then
220             echo "ERROR on make"
221             exit 2
222         fi
223         
224         echo
225         echo "*** make install"
226         make install
227         if [ $? -ne 0 ]
228         then
229             echo "ERROR on make install"
230             exit 3
231         fi
232     done
233     declare -A OTP
234     OTP["otfmi"]="0.15"
235     OTP["otpod"]="0.6.8"
236     OTP["otwrapy"]="0.11"
237     for k in ${!OTP[@]};
238     do 
239         echo
240         echo "*** C O M P O N E N T : $k-${OTP[$k]} "
241
242         if [ "$SAT_Python_IS_NATIVE" == "1" ]; then
243             if [ $k == "otfmi" ]; then
244                 echo "INFO: install dill-0.3.4"
245                 ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/dill-0.3.4/dill-0.3.4-py2.py3-none-any.whl --no-deps  --prefix=$PRODUCT_INSTALL 
246                 if [ $? -ne 0 ]
247                 then
248                     echo "FATAL: could not install dill-0.3.4"
249                     exit 6
250                 fi
251             elif [ $k == "otpod" ]; then
252                 if [[ $DIST_NAME == "CO" && $DIST_VERSION == "8" ]]; then
253                     echo "*** skipping: since system Cython too old"
254                     continue
255                 fi
256                 echo "INFO: install scikit-learn-0.24.2"
257                 ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/scikit-learn-0.24.2/scikit-learn-0.24.2.tar.gz --no-deps  --prefix=$PRODUCT_INSTALL
258                 if [ $? -ne 0 ]
259                 then
260                     echo "FATAL: could not install scikit-0.24.2"
261                     exit 6
262                 fi
263                 echo "INFO: install threadpoolctl-3.0.0"
264                 ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip  $SOURCE_DIR/threadpoolctl-3.0.0/threadpoolctl-3.0.0-py3-none-any.whl --no-deps --prefix=$PRODUCT_INSTALL
265                 if [ $? -ne 0 ]
266                 then
267                     echo "FATAL: could not install threadpoolctl 3.0.0"
268                     exit 6
269                 fi
270             fi
271         else # non native Python
272             if [[ $k == "otfmi" ]]; then
273                 echo "INFO: install dill-0.3.4"
274                 ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/dill-0.3.4/dill-0.3.4-py2.py3-none-any.whl --no-deps
275                 if [ $? -ne 0 ]
276                 then
277                     echo "FATAL: could not install dikk-0.3.4"
278                     exit 5
279                 fi
280             elif [[ $k == "otpod" ]]; then
281                 echo "INFO: install threadpoolctl-3.0.0"
282                 ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/threadpoolctl-3.0.0/threadpoolctl-3.0.0-py3-none-any.whl --no-deps
283                 if [ $? -ne 0 ]
284                 then
285                     echo "FATAL: could not install readpoolctl 3.0.0"
286                     exit 6
287                 fi
288                 echo "INFO: install joblib-1.1.0"
289                 ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/joblib-1.1.0/joblib-1.1.0-py2.py3-none-any.whl --no-deps
290                 if [ $? -ne 0 ]
291                 then
292                     echo "FATAL: could not install joblib-1.1.0"
293                     exit 6
294                 fi
295                 echo "INFO: install decorator-5.1.0"
296                 ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/decorator-5.1.0/decorator-5.1.0-py3-none-any.whl --no-deps
297                 if [ $? -ne 0 ]
298                 then
299                     echo "FATAL: could not install decorator-5.1.0"
300                     exit 6
301                 fi
302                 echo "INFO: install scikit-learn-0.24.2"
303                 ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/scikit-learn-0.24.2/scikit-learn-0.24.2.tar.gz --no-deps
304                 if [ $? -ne 0 ]
305                 then
306                     echo "FATAL: could not install scikit-0.24.2"
307                     exit 6
308                 fi
309             fi
310         fi
311
312         cd  $BUILD_DIR
313         mkdir ${BUILD_DIR}/$k
314         cd ${BUILD_DIR}/$k
315         cp -R $SOURCE_DIR/$k-${OTP[$k]}/* .
316         #
317         $PYTHONBIN setup.py build
318         if [ $? -ne 0 ]
319         then
320             echo "ERROR on ${PYTHONBIN} setup.py  build"
321             exit 4
322         fi
323         #
324         $PYTHONBIN setup.py install --prefix=$PRODUCT_INSTALL
325         if [ $? -ne 0 ]
326         then
327             echo "ERROR on ${PYTHONBIN} setup.py  install --prefix=$PRODUCT_INSTALL"
328             exit 5
329         fi
330     done
331
332     #
333     # O P E N T U R N S
334     #
335     if [ -f ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages/site.py ]; then
336         echo "INFO: site.py already installed"
337     elif [ "$SAT_Python_IS_NATIVE" == "1" ]; then
338         # check first whether the init.py file is installed
339         echo "WARNING: missing init.py file. Installing it from system Python installation"
340         SITE_PATCH=
341         LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
342         case $LINUX_DISTRIBUTION in
343             DB11)
344                 SITE_PATCH=/usr/lib/pypy/dist-packages/setuptools/site-patch.py
345                 ;;
346             DB10)
347                 SITE_PATCH=/usr/lib/python3/dist-packages/setuptools/site-patch.py
348                 ;;
349             UB22*)
350                 SITE_PATCH=/usr/lib/pypy/dist-packages/setuptools/site-patch.py
351                 ;;
352             UB20*)
353                 SITE_PATCH=/usr/lib/pypy/dist-packages/setuptools/site-patch.py
354                 ;;
355             FD32)
356                 SITE_PATCH=/usr/lib/pypy/dist-packages/setuptools/site-patch.py
357                 ;;
358             FD36)
359                 ###SITE_PATCH=
360                 SITE_PATCH=$SOURCE_DIR/addons/site-patch.py
361                 ;;
362             FD34)
363                 ###SITE_PATCH=
364                 SITE_PATCH=$SOURCE_DIR/addons/site-patch.py
365                 ;;
366             CO8*)
367                 SITE_PATCH=/usr/lib/pypy/dist-packages/setuptools/site-patch.py
368                 ;;
369             *)
370                 SITE_PATCH=$SOURCE_DIR/addons/site-patch.py
371                 ;;
372         esac
373         # check whether this file exists
374         if [ "${SITE_PATCH}" == "" ]; then
375             cp $SOURCE_DIR/addons/site-patch.py ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages/site.py
376         else
377             cp $SITE_PATCH ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages/site.py
378         fi
379     elif [ -f ${PYTHON_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/setuptools/site-patch.py ]; then
380         cp ${PYTHON_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/setuptools/site-patch.py ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages/site.py
381     else
382         echo "ERROR: could not find site-patch.py"
383         exit 7
384     fi
385 fi
386
387 cd ${PRODUCT_INSTALL}/lib
388 # On some nodes, the link to OT is not done properly.
389 if [[ ! -f libOT.so.0 ]]; then
390     echo "INFO: Fixing libOT.so"
391     ln -sf libOT.so.0.19.0 libOT.so.0.19
392     ln -sf libOT.so.0.19 libOT.so.0
393     ln -sf libOT.so.0 libOT.so
394 fi
395
396 echo
397 echo "########## END"