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