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