Salome HOME
Merge branch 'vsr/cos55_gcc44' into SALOME_7
[tools/install.git] / config_files / tcltk.sh
1 #!/bin/bash -noprofile
2
3 ####################################################################################
4 #  File      : tcltk.sh
5 #  Created   : Thu Dec 18 12:01:00 2002
6 #  Author    : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
7 #  Project   : SALOME
8 #  Module    : Installation Wizard
9 #  Copyright : 2002-2014 CEA
10 #
11 #  This script is the part of the SALOME installation procedure.
12 #
13 ####################################################################################
14
15 #
16 # tcl, tk and tclX versions
17 #
18 VERSION_TCL=8.6.0
19 VERSION_TK=8.6.0
20 VERSION_TCLX=8.4.1
21 #
22 TCL_LIBVERSION=`echo ${VERSION_TCL} | awk -F. '{printf("%d.%d", $1, $2)}'`
23 TK_LIBVERSION=`echo ${VERSION_TK} | awk -F. '{printf("%d.%d", $1, $2)}'`
24 TCLX_LIBVERSION=`echo ${VERSION_TCLX} | awk -F. '{printf("%d.%d", $1, $2)}'`
25
26 check_version()
27 {
28 if [ -z "${TCLHOME}" ]; then
29    echo "TCLHOME doesn't set"
30    return 1
31 fi
32
33 # check tcl version
34 tcl_cfg=${TCLHOME}/lib/tclConfig.sh
35 if [ ! -f ${tcl_cfg} ]; then tcl_cfg=${TCLHOME}/tcl${TCL_LIBVERSION}/lib/tclConfig.sh; fi
36 if [ ! -f ${tcl_cfg} ]; then tcl_cfg=${TCLHOME}/lib/tcl${TCL_LIBVERSION}/tclConfig.sh; fi
37 if [ ! -f ${tcl_cfg} ]; then tcl_cfg=${TCLHOME}/lib/tcl${TCL_LIBVERSION}/lib/tclConfig.sh; fi
38 if [ -f ${tcl_cfg} ]; then
39     tcl_ver=`awk '/^VERSION_TCL=.*/ {gsub("VERSION_TCL=","",$1);print $1}' ${tcl_cfg} | cut -d "'" -f 2`
40     if [ "${tcl_ver}" != ${TCL_LIBVERSION} ] ; then
41         return 1
42     fi
43 else
44     return 1
45 fi
46
47 # check tk version
48 tk_cfg=${TCLHOME}/lib/tkConfig.sh
49 if [ ! -f ${tk_cfg} ]; then tk_cfg=${TCLHOME}/tk${TK_LIBVERSION}/tkConfig.sh; fi
50 if [ ! -f ${tk_cfg} ]; then tk_cfg=${TCLHOME}/lib/tk${TK_LIBVERSION}/tkConfig.sh; fi
51 if [ ! -f ${tk_cfg} ]; then tk_cfg=${TCLHOME}/lib/tk${TK_LIBVERSION}/lib/tkConfig.sh; fi
52 if [ -f ${tk_cfg} ]; then
53     tk_ver=`awk '/^VERSION_TK=.*/ {gsub("VERSION_TK=","",$1);print $1}' ${tk_cfg} | cut -d "'" -f 2`
54     if [ "${tk_ver}" != ${TK_LIBVERSION} ] ; then
55         return 1
56     fi
57 else
58     return 1
59 fi
60
61 return 0
62 }
63
64 print_env_bin()
65 {
66 cat > ${INSTALL_WORK}/env_${PRODUCT_TYPE}.sh <<EOF 
67 #${DELIM} ${PRODUCT_TYPE} ${DELIM}
68 export TCLHOME=\${INST_ROOT}/${SINGLE_DIR:-${PRODUCT}}
69 export TCLLIBPATH="\${TCLHOME}/lib \${TCLHOME}/lib/tcl${TCL_LIBVERSION} \${TCLHOME}/lib/tk${TK_LIBVERSION}"
70 export PATH=\${TCLHOME}/bin:\${PATH}
71 export LD_LIBRARY_PATH=\${TCLHOME}/lib:\${LD_LIBRARY_PATH}
72 ##
73 EOF
74 (test -w ${PRODUCT_DIR} && cp ${INSTALL_WORK}/env_${PRODUCT_TYPE}.sh ${PRODUCT_DIR})
75 make_env ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}"
76 }
77
78 print_env_src()
79 {
80 cat > ${INSTALL_WORK}/env_${PRODUCT_TYPE}_src.sh <<EOF 
81 #${DELIM} ${PRODUCT_TYPE}_src ${DELIM}
82 # nothing to do
83 ##
84 EOF
85 (test -w ${PRODUCT_SRC_DIR} && cp ${INSTALL_WORK}/env_${PRODUCT_TYPE}_src.sh ${PRODUCT_SRC_DIR})
86 make_env ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}"
87 }
88
89 try_preinstalled(){
90 try_existing ${PRODUCT_DIR} ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}" ${PRODUCT_TYPE}
91 try_existing ${PRODUCT_SRC_DIR} ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}" ${PRODUCT_TYPE}_src
92 return $?
93 }
94
95 install_source()
96 {
97 make_env ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}" ${PRODUCT_TYPE}_src
98 source ${INSTALL_WORK}/${SHRC}
99
100 mkdir -p ${PRODUCT_SRC_DIR}
101
102 check_jb tar xfz ${SOURCE_DIR}/tcl-${VERSION_TCL}.tar.gz   -C ${PRODUCT_SRC_DIR}
103 check_jb tar xfz ${SOURCE_DIR}/tk-${VERSION_TK}.tar.gz     -C ${PRODUCT_SRC_DIR}
104 check_jb tar xfz ${SOURCE_DIR}/tclx-${VERSION_TCLX}.tar.gz -C ${PRODUCT_SRC_DIR}
105
106 if [ "${SALOME_IW_COMPSIZE}" = "1" ] ; then
107     du -sk ${PRODUCT_SRC_DIR} > ${INST_ROOT}/${PRODUCT_TYPE}.src.size
108 fi
109
110 # to generate environment scripts
111 try_preinstalled
112 }
113
114 install_source_and_build()
115 {
116 # install sources
117 install_source
118
119 # build sources
120 test -z ${SINGLE_DIR} && makedir ${PRODUCT_DIR} || mkdir -p ${PRODUCT_DIR}
121
122 # ... tcl 
123
124 cd ${PRODUCT_SRC_DIR}/tcl-${VERSION_TCL}_SRC/unix
125
126 local TCL_CONFIGURE_FLAGS="--prefix=${PRODUCT_DIR} --enable-gcc --enable-shared --enable-threads"
127 if test `uname -m` = "x86_64" ; then
128     TCL_CONFIGURE_FLAGS="${TCL_CONFIGURE_FLAGS} --enable-64bit"
129 fi
130
131 cat >> ${PRODUCT_DIR}/CONFIGURE.LOG <<EOF
132 -------------------
133 Configuring tcl...
134 Used options: ${TCL_CONFIGURE_FLAGS}
135 -------------------
136 EOF
137 check_job ${PRODUCT_DIR}/CONFIGURE.LOG ./configure ${TCL_CONFIGURE_FLAGS}
138
139 cat >> ${PRODUCT_DIR}/MAKE.LOG <<EOF
140 -------------------
141 Making tcl...
142 -------------------
143 EOF
144 check_job ${PRODUCT_DIR}/MAKE.LOG make
145
146 cat >> ${PRODUCT_DIR}/MAKEINSTALL.LOG <<EOF
147 -------------------
148 Installing tcl...
149 -------------------
150 EOF
151 check_job ${PRODUCT_DIR}/MAKEINSTALL.LOG make install
152
153 (cd ${PRODUCT_DIR}/bin && ln -fs tclsh${TCL_LIBVERSION} tclsh)
154 (cd ${PRODUCT_DIR}/lib && ln -fs libtcl${TCL_LIBVERSION}.so libtcl.so)
155 (cd ${PRODUCT_DIR}/lib && ln -fs libtclstub${TCL_LIBVERSION}.a libtclstub.a)
156
157 # ... tk
158
159 cd ${PRODUCT_SRC_DIR}/tk-${VERSION_TK}_SRC/unix
160
161 local TK_CONFIGURE_FLAGS="--prefix=${PRODUCT_DIR} --enable-gcc --enable-shared --enable-threads --with-tcl=${PRODUCT_DIR}/lib"
162 if test `uname -m` = "x86_64" ; then
163     TK_CONFIGURE_FLAGS="${TK_CONFIGURE_FLAGS} --enable-64bit"
164 fi
165
166 cat >> ${PRODUCT_DIR}/CONFIGURE.LOG <<EOF
167 -------------------
168 Configuring tk...
169 Used options: ${TK_CONFIGURE_FLAGS}
170 -------------------
171 EOF
172 check_job ${PRODUCT_DIR}/CONFIGURE.LOG ./configure ${TK_CONFIGURE_FLAGS}
173
174 cat >> ${PRODUCT_DIR}/MAKE.LOG <<EOF
175 -------------------
176 Making tk...
177 -------------------
178 EOF
179 check_job ${PRODUCT_DIR}/MAKE.LOG make
180
181 cat >> ${PRODUCT_DIR}/MAKEINSTALL.LOG <<EOF
182 -------------------
183 Installing tk...
184 -------------------
185 EOF
186 check_job ${PRODUCT_DIR}/MAKEINSTALL.LOG make install
187
188 (cd ${PRODUCT_DIR}/bin && ln -fs wish${TK_LIBVERSION} wish)
189 (cd ${PRODUCT_DIR}/lib && ln -fs libtk${TK_LIBVERSION}.so libtk.so)
190 (cd ${PRODUCT_DIR}/lib && ln -fs libtkstub${TK_LIBVERSION}.a libtkstub.a)
191
192 # ... tclX
193
194 cd ${PRODUCT_SRC_DIR}/tclx-${VERSION_TCLX}_SRC
195
196 local TCLX_CONFIGURE_FLAGS="--prefix=${PRODUCT_DIR} --enable-gcc --enable-shared --enable-threads --with-tcl=${PRODUCT_DIR}/lib --with-tk=${PRODUCT_DIR}/lib"
197 if test `uname -m` = "x86_64" ; then
198     TCLX_CONFIGURE_FLAGS="${TCLX_CONFIGURE_FLAGS} --enable-64bit"
199 fi
200
201 cat >> ${PRODUCT_DIR}/CONFIGURE.LOG <<EOF
202 -------------------
203 Configuring tclx...
204 Used options: ${TCLX_CONFIGURE_FLAGS}
205 -------------------
206 EOF
207 check_job ${PRODUCT_DIR}/CONFIGURE.LOG ./configure ${TCLX_CONFIGURE_FLAGS}
208
209 cat >> ${PRODUCT_DIR}/MAKE.LOG <<EOF
210 -------------------
211 Making tclx...
212 -------------------
213 EOF
214 check_job ${PRODUCT_DIR}/MAKE.LOG make
215
216 cat >> ${PRODUCT_DIR}/MAKEINSTALL.LOG <<EOF
217 -------------------
218 Installing tclx...
219 -------------------
220 EOF
221 check_job ${PRODUCT_DIR}/MAKEINSTALL.LOG make install
222
223 (cd ${PRODUCT_DIR}/lib && ln -fs tclx${TCLX_LIBVERSION}/libtclx${TCLX_LIBVERSION}.so .)
224 (cd ${PRODUCT_DIR}/lib && ln -fs libtclx${TCLX_LIBVERSION}.so libtclx.so)
225
226 cd ${PRODUCT_DIR}
227
228 if [ "${SALOME_IW_COMPSIZE}" = "1" ] ; then
229     du -sk ${PRODUCT_SRC_DIR} > ${INST_ROOT}/${PRODUCT_TYPE}.build.size
230     du -sk ${PRODUCT_DIR}     > ${INST_ROOT}/${PRODUCT_TYPE}.bin.size
231 fi
232
233 # remove sources and temporary files after building
234 if [ ${REMOVE_SRC_TMP} = "TRUE" ] ; then
235     test -d ${PRODUCT_SRC_DIR} && rm -fr ${PRODUCT_SRC_DIR}
236 fi
237
238 # to generate environment scripts
239 try_preinstalled
240 }
241
242 install_binary()
243 {
244 make_env ${INST_ROOT} ${INSTALL_WORK} "${PRODUCT_SEQUENCE}" "${INSTALL_PRODUCTS}" ${PRODUCT_TYPE}
245 source ${INSTALL_WORK}/${SHRC}
246
247 # create a product directory
248 test -z ${SINGLE_DIR} && makedir ${PRODUCT_DIR} || mkdir -p ${PRODUCT_DIR}
249
250 check_jb tar xfz ${SOURCE_DIR}/${PRODUCT}.tar.gz -C ${PRODUCT_DIR}
251
252 # add symbolic link for 64bit platforms (VSR: is it indeed needed?)
253 (cd ${PRODUCT_DIR} && test `uname -m` = "x86_64" && test ! -e lib64 && ln -sf lib lib64)
254
255 # overriding installation path
256 old_prefix=`grep -e "^TCL_PREFIX='.*'" ${PRODUCT_DIR}/lib/tclConfig.sh | sed -e "s%^TCL_PREFIX='\(.*\)'%\1%g"`
257 for l in X `find ${PRODUCT_DIR}/lib -name "*Config.sh"` `find ${PRODUCT_DIR}/lib/pkgconfig -name "*.pc"` ; do
258     if [ "${l}" != "X" ] ; then
259         sed -i "s%${old_prefix}%${PRODUCT_DIR}%g" ${l}
260     fi
261 done
262
263 # to generate environment scripts
264 try_preinstalled
265 }
266
267 export PROCEDURE=$1;
268 export INSTALL_WORK=$2;
269 export SOURCE_DIR=$3;
270 export INST_ROOT=$4;
271 export PRODUCT_SEQUENCE=$5;
272 export PRODUCT_TYPE=$6;
273 export INSTALL_PRODUCTS=$7;
274 shift
275 REMOVE_SRC_TMP=$8;
276 test $# = 10 && shift && SINGLE_DIR=$9
277 export PRODUCT="tcltk-${VERSION_TCL}"
278 export PRODUCT_DIR=${INST_ROOT}/${SINGLE_DIR:-${PRODUCT}}
279 export PRODUCT_WORK=${INSTALL_WORK}/${PRODUCT}
280 export PRODUCT_SRC_DIR=${INST_ROOT}/${PRODUCT}_SRC
281 source ./common.sh
282 ${PROCEDURE}