Salome HOME
Fedora 6 support
[tools/install.git] / config_files / boost-common.sh
1 #!/bin/bash -noprofile
2
3 ####################################################################################
4 #  File      : boost-common.sh
5 #  Created   : Thu Apr 12 11:11:11 2007
6 #  Author    : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
7 #  Project   : SALOME
8 #  Module    : Installation Wizard
9 #  Copyright : 2002-2007 CEA
10 #
11 #  This script is the part of the SALOME installation procedure.
12 #
13 ####################################################################################
14
15 if [ "x$VERSION" == "x" ] ; then
16     VERSION="1.33.1"
17 fi
18 XVERSION=$(echo $VERSION | awk -F. '{if(NF>0)maj=$1;else maj=0;if(NF>1)min=$2;else min=0;if(NF>2)rel=$3;else rel=0;printf("%d%03d%02d",maj,min,rel);}')
19 LIBSUFFIX=$(echo $VERSION | awk -F. '{if(NF>0)maj=$1;else maj=0;if(NF>1)min=$2;else min=0;if(NF>2)rel=$3;else rel=0;if(rel==0)printf("%d.%d",maj,min);else printf("%d.%d.%d",maj,min,rel);}')
20
21 check_version(){
22 if [ -n "${BOOSTDIR}" ] && [ -f ${BOOSTDIR}/include/boost/version.hpp ] ; then
23     ver=`egrep 'BOOST_VERSION [0-9]+' ${BOOSTDIR}/include/boost/version.hpp | sed 's/.*BOOST_VERSION \([0-9]\+\)/\1/g'`
24     if [ "$ver" = "${XVERSION}" ]; then
25         return 0
26     fi
27 fi
28 return 1;
29 }
30
31 print_env()
32 {
33 cat > ${INSTALL_WORK}/env_${PRODUCT_TYPE}.sh <<EOF 
34 #$DELIM ${PRODUCT_TYPE} $DELIM 
35 export BOOSTDIR=\${INSTALL_ROOT}/${PRODUCT}
36 export LD_LIBRARY_PATH=\${BOOSTDIR}/lib:\${LD_LIBRARY_PATH}
37 ##
38 EOF
39 (test -w ${PRODUCT_DIR} && cp ${INSTALL_WORK}/env_${PRODUCT_TYPE}.sh ${PRODUCT_DIR})
40 make_env ${INSTALL_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}"
41 }
42
43 # looks for the native product and collects it's environment (used by make_env())
44 try_native(){
45 boostdir="`find_in_path version.hpp /usr/include/boost:/usr/share/include/boost`"
46 if [ -n "${boostdir}" ] ; then
47     boostdir=`cd ${boostdir}/../..; pwd`
48     ls ${boostdir}/lib/libboost_thread* &> /dev/null
49     if [ "$?" -ne "0" ] ; then 
50         return 1
51     fi
52     ver=`egrep 'BOOST_VERSION [0-9]+' ${boostdir}/include/boost/version.hpp | sed 's/.*BOOST_VERSION \([0-9]\+\)/\1/g'`
53     if [ $ver -ge ${XVERSION} ] ;  then 
54         cat > ${INSTALL_WORK}/env_${PRODUCT_TYPE}.sh <<EOF 
55 #$DELIM ${PRODUCT_TYPE} $DELIM 
56 export BOOSTDIR=${boostdir}
57 export LD_LIBRARY_PATH=\${BOOSTDIR}/lib:\${LD_LIBRARY_PATH}
58 ##
59 EOF
60         make_env ${INSTALL_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}"
61         if [ $ver -eq ${XVERSION} ] ;  then 
62             return 0
63         else
64             return 2
65         fi
66     fi
67 fi
68 return 1
69 }
70
71 try_preinstalled(){
72 try_existing ${PRODUCT_DIR} ${INSTALL_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" ${PRODUCT_TYPE}
73 return $?
74 }
75
76 install_source()
77 {
78 make_env ${INSTALL_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" ${PRODUCT_TYPE}
79 source ${INSTALL_WORK}/$SHRC
80
81 makedir ${PRODUCT_DIR}
82
83 # unpack
84 check_jb tar xzf ${SOURCE_DIR}/boost-${VERSION}.tar.gz -C ${INSTALL_WORK}
85
86 # build
87 GCC=`which gcc`
88 cat >> ${PRODUCT_DIR}/BUILD.LOG <<EOF
89 used gcc=$GCC
90 EOF
91
92 cd ${PRODUCT_WORK}
93
94 # make bjam
95 (cd tools/build/jam_src; check_job ${PRODUCT_DIR}/BUILD.LOG ./build.sh)
96
97 # install
98 python_root=$(find_in_path python $PATH)
99 python_root=$(cd ${python_root}/..; pwd)
100 python_version=$(python -c "import sys; print sys.version[:3]")
101 BJAM=`find tools/build/jam_src/ -name bjam -a -type f`
102
103 echo "`pwd` -> $BJAM >> ${PRODUCT_DIR}/INSTALL.LOG"
104 $BJAM "-sBOOST_ALL_DYN_LINK=1" "-sBUILD=release <runtime-link>dynamic <threading>multi" \
105       "-sPYTHON_ROOT=${python_root}" "-sPYTHON_VERSION=${python_version}" "-sTOOLS=gcc" \
106       --prefix=${PRODUCT_DIR} --builddir=${PRODUCT_WORK}                                \
107       install >> ${PRODUCT_DIR}/INSTALL.LOG 2> $INSTALL_WORK/errlog
108
109 if [ "$?" -ne "0" ] ; then
110     cat ${PRODUCT_DIR}/INSTALL.LOG
111     cat $INSTALL_WORK/errlog >&2
112     cat $INSTALL_WORK/errlog >> ${PRODUCT_DIR}/INSTALL.LOG
113 fi
114
115 # move includes
116 cd ${PRODUCT_DIR}/include
117 mv -f boost-${VERSION//./_}/boost boost
118 rm -rf boost-${VERSION//./_}
119
120 # create additional links for libraries
121 cd ${PRODUCT_DIR}/lib
122
123 libs_gcc=$(find . -name "*${VERSION//./_}.a" | sed -e "s%./libboost_%%g;s%\.a.*%%g")
124 libs=$(find . -name "*${VERSION//./_}.a" | sed -e "s%./libboost_%%g;s%\.a.*%%g" | sed -e "s%-gcc.*%%g")
125
126 for lib in $libs ; do
127     # process dynamic libs
128     if [ -f libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so.${VERSION} ] ; then
129         # create link: libboost_<lib>-gcc-mt-<ver>.so -> libboost_<lib>-gcc-mt-<v_e_r>.so.<v.e.r>
130         if [ -e libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so ] ; then rm -f libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so ; fi
131         ln -sf libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so.${VERSION} libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so
132         # create link: libboost_<lib>-gcc-mt.so -> libboost_<lib>-gcc-mt-<v_e_r>.so
133         if [ -e libboost_${lib}-gcc-mt.so ] ; then rm -f libboost_${lib}-gcc-mt.so ; fi
134         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so libboost_${lib}-gcc-mt.so
135         # create link: libboost_<lib>-gcc.so -> libboost_<lib>-gcc-mt-<v_e_r>.so
136         if [ -e libboost_${lib}-gcc.so ] ; then rm -f libboost_${lib}-gcc.so ; fi
137         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so libboost_${lib}-gcc.so
138         # create link: libboost_<lib>-mt.so -> libboost_<lib>-gcc-mt-<v_e_r>.so
139         if [ -e libboost_${lib}-mt.so ] ; then rm -f libboost_${lib}-mt.so ; fi
140         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so libboost_${lib}-mt.so
141         # create link: libboost_<lib>.so -> libboost_<lib>-gcc-mt-<v_e_r>.so
142         if [ -e libboost_${lib}.so ] ; then rm -f libboost_${lib}.so ; fi
143         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.so libboost_${lib}.so
144     fi
145     # process static libs
146     if [ -f libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.a ] ; then
147         # create link: libboost_<lib>-gcc-mt.a -> libboost_<lib>-gcc-mt-<v_e_r>.a
148         if [ -e libboost_${lib}-gcc-mt.a ] ; then rm -f libboost_${lib}-gcc-mt.a ; fi
149         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.a libboost_${lib}-gcc-mt.a
150         # create link: libboost_<lib>-gcc.a -> libboost_<lib>-gcc-mt-<v_e_r>.a
151         if [ -e libboost_${lib}-gcc.a ] ; then rm -f libboost_${lib}-gcc.a ; fi
152         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.a libboost_${lib}-gcc.a
153         # create link: libboost_<lib>-mt.a -> libboost_<lib>-gcc-mt-<v_e_r>.a
154         if [ -e libboost_${lib}-mt.a ] ; then rm -f libboost_${lib}-mt.a ; fi
155         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.a libboost_${lib}-mt.a
156         # create link: libboost_<lib>.a -> libboost_<lib>-gcc-mt-<v_e_r>.a
157         if [ -e libboost_${lib}.a ] ; then rm -f libboost_${lib}.a ; fi
158         ln -s libboost_${lib}-gcc-mt-${LIBSUFFIX//./_}.a libboost_${lib}.a
159     fi
160 done
161
162 if test `uname -m` = "x86_64" ; then
163     cd ${PRODUCT_DIR}; ln -sf lib lib64
164 fi
165 #du -sk ${PRODUCT_WORK} > ${PRODUCT_DIR}/size.log
166 cd ${PRODUCT_DIR}; rm -fr ${PRODUCT_WORK}
167
168 print_env
169 }
170
171 install_binary()
172 {
173 make_env ${INSTALL_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" ${PRODUCT_TYPE}
174 source ${INSTALL_WORK}/$SHRC
175
176 check_jb tar xfz ${SOURCE_DIR}/boost-${VERSION}.tar.gz -C ${INSTALL_ROOT}
177
178 print_env
179 }
180
181 export PROCEDURE=$1;
182 export INSTALL_WORK=$2;
183 export SOURCE_DIR=$3;
184 export INSTALL_ROOT=$4;
185 export PRODUCT_SEQUENCE=$5;
186 if [ $# == 6 ] ; then export PRODUCT_TYPE=$6 ; else export PRODUCT_TYPE="boost" ; fi
187 export PRODUCT="boost-${VERSION}"
188 export PRODUCT_DIR=${INSTALL_ROOT}/${PRODUCT}
189 export PRODUCT_WORK=${INSTALL_WORK}/${PRODUCT}
190 source ./common.sh
191 $PROCEDURE