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