-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathmake_tgz.sh
executable file
·347 lines (309 loc) · 9.04 KB
/
make_tgz.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
#!/bin/sh
#
# $Id$
#
# ---------------------------------------------------------------
# Copyright 2003 Przemyslaw Czerpak <[email protected]>
# simple script to build binaries .tgz from xHarbour sources
#
# See doc/license.txt for licensing terms.
# ---------------------------------------------------------------
cd `dirname $0`
. bin/hb-func.sh
name="xharbour"
hb_ver=`get_hbver`
hb_platform=`get_hbplatform`
[ "${hb_platform}" = "" ] || hb_platform="-${hb_platform}${HB_BUILDSUF}"
[ "${HB_XBUILD}" = "" ] || hb_platform="-${HB_XBUILD}"
hb_archfile="${name}-${hb_ver}${hb_platform}.bin.tar.gz"
hb_instfile="${name}-${hb_ver}${hb_platform}.inst.sh"
hb_lnkso="yes"
hb_pref="xhb"
hb_contrib=""
hb_sysdir="yes"
hb_exesuf=""
export C_USR="$C_USR -DHB_FM_STATISTICS_OFF -O3"
[ -z "$HB_INSTALL_PREFIX" ] && [ -n "$PREFIX" ] && export HB_INSTALL_PREFIX="$PREFIX"
if [ -z "$TMPDIR" ]; then TMPDIR="/tmp"; fi
HB_INST_PREF="$TMPDIR/$name.bin.$USER.$$"
if [ -z "$HB_ARCHITECTURE" ]; then
if [ "$OSTYPE" = "msdosdjgpp" ]; then
hb_arch="dos"
else
hb_arch=`uname -s | tr -d "[-]" | tr '[A-Z]' '[a-z]' 2>/dev/null`
case "$hb_arch" in
*windows*|*mingw32*|msys*) hb_arch="w32" ;;
*dos) hb_arch="dos" ;;
*bsd) hb_arch="bsd" ;;
esac
fi
export HB_ARCHITECTURE="$hb_arch"
fi
if [ -z "$HB_COMPILER" ]; then
case "$HB_ARCHITECTURE" in
w32) HB_COMPILER="mingw32" ;;
dos) HB_COMPILER="djgpp" ;;
*) HB_COMPILER="gcc" ;;
esac
export HB_COMPILER
fi
if [ -z "$HB_GT_LIB" ]; then
case "$HB_ARCHITECTURE" in
w32) HB_GT_LIB="gtwin" ;;
dos) HB_GT_LIB="gtdos" ;;
os2) HB_GT_LIB="gtos2" ;;
*) HB_GT_LIB="gttrm" ;;
esac
export HB_GT_LIB
fi
if [ -z "$HB_MT" ]; then
case "$HB_ARCHITECTURE" in
dos) HB_MT="" ;;
*) HB_MT="MT" ;;
esac
export HB_MT
fi
if [ -z "$HB_COMMERCE" ]; then export HB_COMMERCE=no; fi
# default lib dir name
HB_LIBDIRNAME="lib"
ETC="/etc"
HB_ARCH64=""
if [ "$HB_ARCHITECTURE" = "linux" ]
then
HB_CPU=`uname -m`
case "$HB_CPU" in
*[_@]64)
export C_USR="$C_USR -fPIC"
HB_ARCH64="yes"
;;
*)
;;
esac
elif [ "$HB_ARCHITECTURE" = "hpux" ]
then
export C_USR="$C_USR -fPIC"
fi
# Select the platform-specific installation prefix and ownership
HB_INSTALL_OWNER=root
case "$HB_ARCHITECTURE" in
darwin)
[ -z "$HB_INSTALL_PREFIX" ] && HB_INSTALL_PREFIX="/usr/local"
HB_INSTALL_GROUP=wheel
ETC="/private/etc"
;;
linux)
[ -z "$HB_INSTALL_PREFIX" ] && HB_INSTALL_PREFIX="/usr"
[ -d "$HB_INSTALL_PREFIX/lib64" ] && [ "${HB_ARCH64}" = yes ] && HB_LIBDIRNAME="lib64"
HB_INSTALL_GROUP=root
;;
w32)
[ -z "$HB_INSTALL_PREFIX" ] && HB_INSTALL_PREFIX="/usr/local"
HB_INSTALL_GROUP=0
hb_sysdir="no"
hb_exesuf=".exe"
hb_instfile=""
;;
dos)
[ -z "$HB_INSTALL_PREFIX" ] && HB_INSTALL_PREFIX="/${name}"
HB_INSTALL_GROUP=root
hb_lnkso="no"
hb_sysdir="no"
hb_exesuf=".exe"
hb_instfile=""
hb_archfile="${name}.tgz"
HB_INST_PREF="$TMPDIR/hb-$$"
;;
*)
[ -z "$HB_INSTALL_PREFIX" ] && HB_INSTALL_PREFIX="/usr/local"
HB_INSTALL_GROUP=wheel
;;
esac
# Select the platform-specific command names
MAKE=make
TAR=tar
hb_gnutar=yes
if gtar --version >/dev/null 2>&1; then
TAR=gtar
elif ! tar --version >/dev/null 2>&1; then
hb_gnutar=no
echo "Warning!!! Cannot find GNU TAR"
fi
if gmake --version >/dev/null 2>&1; then
MAKE=gmake
elif ! make --version >/dev/null 2>&1; then
echo "Warning!!! Cannot find GNU MAKE"
fi
# Set other platform-specific build options
if [ -z "$HB_GPM_MOUSE" ]; then
if [ "$HB_ARCHITECTURE" = "linux" ] && \
( [ -f /usr/include/gpm.h ] || [ -f /usr/local/include/gpm.h ]); then
HB_GPM_MOUSE=yes
else
HB_GPM_MOUSE=no
fi
export HB_GPM_MOUSE
fi
if [ -z "${HB_WITHOUT_GTSLN}" ]; then
HB_WITHOUT_GTSLN=yes
case "$HB_ARCHITECTURE" in
linux|bsd|darwin|hpux|sunos)
for dir in /usr /usr/local /sw /opt/local
do
if [ -f ${dir}/include/slang.h ] || \
[ -f ${dir}/include/slang/slang.h ]; then
HB_WITHOUT_GTSLN=no
fi
done
;;
esac
export HB_WITHOUT_GTSLN
fi
case "$HB_ARCHITECTURE" in
linux)
;;
darwin)
# Autodetect old Darwin versions and set appropriate build options
if [ `uname -r | sed "s/\..*//g"` -lt 6 ]; then
export HB_NCURSES_FINK=yes
fi
[ -z "$HB_WITHOUT_X11" ] && export HB_WITHOUT_X11=yes
;;
dos|w32)
[ -z "$HB_WITHOUT_X11" ] && export HB_WITHOUT_X11=yes
;;
*)
[ -z "$HB_WITHOUT_X11" ] && export HB_WITHOUT_X11=yes
;;
esac
if [ "$HB_COMMERCE" = yes ]
then
export HB_GPM_MOUSE=no
export HB_WITHOUT_GTSLN=yes
fi
if [ "${hb_sysdir}" = "yes" ]; then
export HB_BIN_INSTALL="$HB_INSTALL_PREFIX/bin"
export HB_INC_INSTALL="$HB_INSTALL_PREFIX/include/${name}"
export HB_LIB_INSTALL="$HB_INSTALL_PREFIX/$HB_LIBDIRNAME/${name}"
else
export HB_BIN_INSTALL="$HB_INSTALL_PREFIX/bin"
export HB_INC_INSTALL="$HB_INSTALL_PREFIX/include"
export HB_LIB_INSTALL="$HB_INSTALL_PREFIX/$HB_LIBDIRNAME"
fi
# build
umask 022
$MAKE -r clean
$MAKE -r
for l in ${hb_contrib}
do
(cd "contrib/$l"
$MAKE -r clean
$MAKE -r)
done
# install
rm -fR "${HB_INST_PREF}"
export _DEFAULT_BIN_DIR=$HB_BIN_INSTALL
export _DEFAULT_INC_DIR=$HB_INC_INSTALL
export _DEFAULT_LIB_DIR=$HB_LIB_INSTALL
export HB_BIN_INSTALL="$HB_INST_PREF$HB_BIN_INSTALL"
export HB_INC_INSTALL="$HB_INST_PREF$HB_INC_INSTALL"
export HB_LIB_INSTALL="$HB_INST_PREF$HB_LIB_INSTALL"
mkdir -p $HB_BIN_INSTALL
mkdir -p $HB_INC_INSTALL
mkdir -p $HB_LIB_INSTALL
$MAKE -r -i install
for l in ${hb_contrib}
do
(cd "contrib/$l"
$MAKE -r -i install)
done
# Keep the size of the binaries to a minimim.
if [ -f $HB_BIN_INSTALL/harbour${hb_exesuf} ]; then
${CCPREFIX}strip $HB_BIN_INSTALL/harbour${hb_exesuf}
fi
if [ "$HB_ARCHITECTURE" != "hpux" ]; then
# Keep the size of the libraries to a minimim, but don't try to strip symlinks.
${CCPREFIX}strip -S `find $HB_LIB_INSTALL -type f`
fi
if [ "${hb_sysdir}" = "yes" ]; then
mkdir -p $HB_INST_PREF$ETC/harbour
cp -f source/rtl/gtcrs/hb-charmap.def $HB_INST_PREF$ETC/harbour/hb-charmap.def
chmod 644 $HB_INST_PREF$ETC/harbour/hb-charmap.def
cat > $HB_INST_PREF$ETC/harbour.cfg <<EOF
CC=${CCPREFIX}gcc
CFLAGS=-c -I$_DEFAULT_INC_DIR -O3
VERBOSE=YES
DELTMP=YES
EOF
fi
# check if we should rebuild tools with shared libs
if [ "${hb_lnkso}" = yes ]
then
case $HB_ARCHITECTURE in
darwin) ADD_LIBS="$ADD_LIBS -lncurses -L/opt/local/lib -L/sw/lib" ;;
dos|w32) ADD_LIBS="" ;;
*) ADD_LIBS="$ADD_LIBS -lncurses" ;;
esac
[ "${HB_GPM_MOUSE}" = yes ] && ADD_LIBS="$ADD_LIBS -lgpm"
[ "${HB_WITHOUT_GTSLN}" != yes ] && ADD_LIBS="$ADD_LIBS -lslang"
[ "${HB_WITHOUT_X11}" != yes ] && ADD_LIBS="$ADD_LIBS -L/usr/X11R6/$HB_LIBDIRNAME -lX11"
export L_USR="-L${HB_LIB_INSTALL} -l${name} ${ADD_LIBS} ${L_USR}"
export PRG_USR="\"-D_DEFAULT_INC_DIR='${_DEFAULT_INC_DIR}'\" ${PRG_USR}"
for utl in hbmake hbrun hbpp hbdoc hbtest hbdict xbscript
do
(cd "utils/${utl}"
rm -fR "./${HB_ARCHITECTURE}/${HB_COMPILER}"
$MAKE -r install
${CCPREFIX}strip "${HB_BIN_INSTALL}/${utl}${hb_exesuf}")
done
fi
chmod 644 $HB_INC_INSTALL/*
(cd ${HB_BIN_INSTALL}
if [ "$HB_ARCHITECTURE" = "w32" ]; then
cp -f "${HB_LIB_INSTALL}/${name}.dll" .
echo '#!/bin/sh' > xprompt.sh
echo 'xbscript "$@"' >> xprompt.sh
else
ln -s xbscript${hb_exesuf} xprompt${hb_exesuf}
fi
ln -s xbscript${hb_exesuf} pprun${hb_exesuf}
)
CURDIR=$(pwd)
if [ $hb_gnutar = yes ]; then
(cd "${HB_INST_PREF}"; $TAR czvf "${CURDIR}/${hb_archfile}" --owner=${HB_INSTALL_OWNER} --group=${HB_INSTALL_GROUP} .)
UNTAR_OPT=xvpf
else
(cd "${HB_INST_PREF}"; $TAR covf - . | gzip > "${CURDIR}/${hb_archfile}")
UNTAR_OPT=xvf
fi
rm -fR "${HB_INST_PREF}"
if [ -n "${hb_instfile}" ]; then
if [ "${HB_ARCHITECTURE}" = linux ]; then
DO_LDCONFIG="&& ldconfig"
else
DO_LDCONFIG=""
fi
# In the generated script use tar instead of $TAR because we can't be sure
# if $TAR exists in the installation environment
cat > "${hb_instfile}" <<EOF
#!/bin/sh
if [ "\$1" = "--extract" ]; then
sed -e '1,/^HB_INST_EOF\$/ d' "\$0" > "${hb_archfile}"
exit
fi
if [ \`id -u\` != 0 ]; then
echo "This package has to be installed from root account."
exit 1
fi
echo "Do you want to install ${name} (y/n)"
read ASK
if [ "\${ASK}" != "y" ] && [ "\${ASK}" != "Y" ]; then
exit 1
fi
(sed -e '1,/^HB_INST_EOF\$/ d' "\$0" | gzip -cd | tar ${UNTAR_OPT} - -C /) ${DO_LDCONFIG}
exit \$?
HB_INST_EOF
EOF
cat "${hb_archfile}" >> "${hb_instfile}"
chmod +x "${hb_instfile}"
rm -f "${hb_archfile}"
fi