-
Notifications
You must be signed in to change notification settings - Fork 0
/
env.sh
447 lines (385 loc) · 13.5 KB
/
env.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
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
# This shell fragment is intended for use in `bash` or `zsh`. While it
# may work in other shells it is not meant to, and any misbehaviour is not
# considered a bug in that case.
#
# NetSurf Library, tool and browser development support script
#
# Copyright 2013-2017 Vincent Sanders <vince@netsurf-browser.org>
# Released under the MIT Licence
#
# This script allows NetSurf and its libraries to be built without
# requiring installation into a system.
#
# Usage: source env.sh
#
# Controlling variables
# HOST sets the target architecture for library builds
# BUILD sets the building machines architecture
# TARGET_WORKSPACE is the workspace directory to keep the sandboxes
#
# The use of HOST and BUILD here is directly comprable to the GCC
# usage as described at:
# http://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html
#
###############################################################################
# OS Package installation
###############################################################################
# deb packages for dpkg based systems
NS_DEV_DEB="build-essential pkg-config git gperf libcurl3-dev libpng-dev libjpeg-dev"
NS_TOOL_DEB="flex bison libhtml-parser-perl"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_DEB="libgtk-3-dev librsvg2-dev"
else
NS_GTK_DEB="libgtk2.0-dev librsvg2-dev"
fi
# apt get commandline to install necessary dev packages
ns-apt-get-install()
{
LIBCURL_OPENSSL_CONFLICTS="$(/usr/bin/apt-cache show libcurl4-openssl-dev | grep Conflicts | grep -o libssl1.0-dev)"
if [ "x${LIBCURL_OPENSSL_CONFLICTS}" != "x" ]; then
NS_DEV_DEB="${NS_DEV_DEB} libssl-dev"
elif /usr/bin/apt-cache show libssl1.0-dev >/dev/null 2>&1; then
NS_DEV_DEB="${NS_DEV_DEB} libssl1.0-dev"
else
NS_DEV_DEB="${NS_DEV_DEB} libssl-dev"
fi
sudo apt-get install $(echo ${NS_DEV_DEB} ${NS_TOOL_DEB} ${NS_GTK_DEB})
}
# packages for yum installer RPM based systems (tested on fedora 20)
NS_DEV_YUM_RPM="git gcc pkgconfig expat-devel openssl-devel gperf libcurl-devel perl-Digest-MD5-File libjpeg-devel libpng-devel"
NS_TOOL_YUM_RPM="flex bison"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_YUM_RPM="gtk3-devel librsvg2-devel"
else
NS_GTK_YUM_RPM="gtk2-devel librsvg2-devel"
fi
# yum commandline to install necessary dev packages
ns-yum-install()
{
sudo yum -y install $(echo ${NS_DEV_YUM_RPM} ${NS_TOOL_YUM_RPM} ${NS_GTK_YUM_RPM})
}
# packages for dnf installer RPM based systems (tested on fedora 25)
NS_DEV_DNF_RPM="java-1.8.0-openjdk-headless gcc clang pkgconfig libcurl-devel libjpeg-devel expat-devel libpng-devel openssl-devel gperf perl-HTML-Parser"
NS_TOOL_DNF_RPM="git flex bison ccache screen"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_DNF_RPM="gtk3-devel"
else
NS_GTK_DNF_RPM="gtk2-devel"
fi
# dnf commandline to install necessary dev packages
ns-dnf-install()
{
sudo dnf install $(echo ${NS_DEV_DNF_RPM} ${NS_TOOL_DNF_RPM} ${NS_GTK_DNF_RPM})
}
# packages for zypper installer RPM based systems (tested on openSUSE leap 42)
NS_DEV_ZYP_RPM="java-1_8_0-openjdk-headless gcc clang pkgconfig libcurl-devel libjpeg-devel libexpat-devel libpng-devel openssl-devel gperf perl-HTML-Parser"
NS_TOOL_ZYP_RPM="git flex bison gperf ccache screen"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_ZYP_RPM="gtk3-devel"
else
NS_GTK_ZYP_RPM="gtk2-devel"
fi
# zypper commandline to install necessary dev packages
ns-zypper-install()
{
sudo zypper install -y $(echo ${NS_DEV_ZYP_RPM} ${NS_TOOL_ZYP_RPM} ${NS_GTK_ZYP_RPM})
}
# Packages for Haiku install
# Haiku secondary arch suffix:
# empty for primary (gcc2 on x86) or "_x86" for gcc4 secondary.
HA=_x86
NS_DEV_HPKG="devel:libcurl${HA} devel:libpng${HA} devel:libjpeg${HA} devel:libcrypto${HA} devel:libiconv${HA} devel:libexpat${HA} cmd:pkg_config${HA} cmd:gperf html_parser"
# pkgman commandline to install necessary dev packages
ns-pkgman-install()
{
pkgman install $(echo ${NS_DEV_HPKG})
}
# MAC OS X
NS_DEV_MACPORT="git expat openssl curl libjpeg-turbo libpng"
ns-macport-install()
{
PATH=/opt/local/bin:/opt/local/sbin:$PATH sudo /opt/local/bin/port install $(echo ${NS_DEV_MACPORT})
}
# packages for FreeBSD install
NS_DEV_FREEBSDPKG="gmake curl"
# FreeBSD package install
ns-freebsdpkg-install()
{
pkg install $(echo ${NS_DEV_FREEBSDPKG})
}
# generic for help text
NS_DEV_GEN="git, gcc, pkgconfig, expat library, openssl library, libcurl, perl, perl MD5 digest, libjpeg library, libpng library"
NS_TOOL_GEN="flex tool, bison tool"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_GEN="gtk+ 3 toolkit library, librsvg2 library"
else
NS_GTK_GEN="gtk+ 2 toolkit library, librsvg2 library"
fi
# Generic OS package install
# looks for package managers and tries to use them if present
ns-package-install()
{
if [ -x "/usr/bin/zypper" ]; then
ns-zypper-install
elif [ -x "/usr/bin/apt-get" ]; then
ns-apt-get-install
elif [ -x "/usr/bin/dnf" ]; then
ns-dnf-install
elif [ -x "/usr/bin/yum" ]; then
ns-yum-install
elif [ -x "/bin/pkgman" ]; then
ns-pkgman-install
elif [ -x "/opt/local/bin/port" ]; then
ns-macport-install
elif [ -x "/usr/sbin/pkg" ]; then
ns-freebsdpkg-install
else
echo "Unable to determine OS packaging system in use."
echo "Please ensure development packages are installed for:"
echo ${NS_DEV_GEN}"," ${NS_TOOL_GEN}"," ${NS_GTK_GEN}
fi
}
###############################################################################
# Setup environment
###############################################################################
# find which command used to find everything else on path
if [ -x /usr/bin/which ]; then
WHICH_CMD=/usr/bin/which
else
WHICH_CMD=/bin/which
fi
# environment parameters
# The system doing the building
if [ "x${BUILD}" = "x" ]; then
BUILD_CC=$(${WHICH_CMD} cc)
if [ $? -eq 0 ];then
BUILD=$(cc -dumpmachine)
else
echo "Unable to locate a compiler. Perhaps run ns-package-install"
return 1
fi
fi
# Get the host build if unset
if [ "x${HOST}" = "x" ]; then
if [ "x${TARGET_ABI}" = "x" ]; then
HOST=${BUILD}
else
HOST=${TARGET_ABI}
fi
else
HOST_CC_LIST="/opt/netsurf/${HOST}/cross/bin/${HOST}-cc /opt/netsurf/${HOST}/cross/bin/${HOST}-gcc ${HOST}-cc ${HOST}-gcc"
for HOST_CC_V in $(echo ${HOST_CC_LIST});do
HOST_CC=$(${WHICH_CMD} ${HOST_CC_V})
if [ "x${HOST_CC}" != "x" ];then
break
fi
done
if [ "x${HOST_CC}" = "x" ];then
echo "Unable to execute host compiler for HOST=${HOST}. is it set correctly?"
return 1
fi
HOST_CC_MACHINE=$(${HOST_CC} -dumpmachine 2>/dev/null)
if [ "${HOST_CC_MACHINE}" != "${HOST}" ];then
echo "Compiler dumpmachine differs from HOST setting"
return 2
fi
NS_ENV_CC="${HOST_CC}"
export NS_ENV_CC
unset HOST_CC_LIST HOST_CC_V HOST_CC HOST_CC_MACHINE
fi
# set up a default target workspace
if [ "x${TARGET_WORKSPACE}" = "x" ]; then
TARGET_WORKSPACE=${HOME}/dev-netsurf/workspace
fi
# set up default parallelism
if [ "x${USE_CPUS}" = "x" ]; then
NCPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null)
NCPUS="${NCPUS:-1}"
NCPUS=$((NCPUS * 2))
USE_CPUS="-j${NCPUS}"
fi
# The GTK version to build for (either 2 or 3 currently)
if [ "x${NETSURF_GTK_MAJOR}" = "x" ]; then
NETSURF_GTK_MAJOR=2
fi
# report to user
echo "BUILD=${BUILD}"
echo "HOST=${HOST}"
echo "TARGET_WORKSPACE=${TARGET_WORKSPACE}"
echo "USE_CPUS=${USE_CPUS}"
export PREFIX=${TARGET_WORKSPACE}/inst-${HOST}
export BUILD_PREFIX=${TARGET_WORKSPACE}/inst-${BUILD}
export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}::
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PREFIX}/lib
export PATH=${PATH}:${BUILD_PREFIX}/bin
export NETSURF_GTK_MAJOR
# make tool
MAKE=make
# NetSurf GIT repositories
NS_GIT="git://git.netsurf-browser.org"
# Buildsystem: everything depends on this
NS_BUILDSYSTEM="buildsystem"
NS_TOOLS=""
NS_FRONTEND_LIBS=""
BUILD_TARGET="${TARGET:-netsurf}"
case "$BUILD_TARGET" in
libhubbub)
NS_INTERNAL_LIBS="libparserutils"
;;
libdom)
NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub"
;;
libcss)
NS_INTERNAL_LIBS="libwapcaplet libparserutils"
;;
netsurf)
# internal libraries all frontends require (order is important)
NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub libdom libcss libnsgif libnsbmp libutf8proc libnsutils libnspsl libnslog"
# add target specific libraries
case "${HOST}" in
i586-pc-haiku)
# tools required to build the browser for haiku (beos)
NS_TOOLS="nsgenbind"
# libraries required for the haiku target abi
NS_FRONTEND_LIBS="libsvgtiny"
;;
*arwin*)
# tools required to build the browser for OS X
NS_TOOLS=""
# libraries required for the Darwin target abi
NS_FRONTEND_LIBS="libsvgtiny libnsfb"
;;
arm-unknown-riscos|arm-riscos-gnueabi*)
# tools required to build the browser for RISC OS
NS_TOOLS="nsgenbind"
# libraries required for the risc os target abi
NS_FRONTEND_LIBS="libsvgtiny librufl libpencil librosprite"
;;
*-atari-mint)
# tools required to build the browser for atari
NS_TOOLS=""
# libraries required for the atari frontend
NS_FRONTEND_LIBS=""
;;
ppc-amigaos)
# default tools required to build the browser
NS_TOOLS="nsgenbind"
# default additional internal libraries
NS_FRONTEND_LIBS="libsvgtiny"
;;
m68k-unknown-amigaos)
# default tools required to build the browser
NS_TOOLS="nsgenbind"
# default additional internal libraries
NS_FRONTEND_LIBS="libsvgtiny"
;;
*-unknown-freebsd*)
# tools required to build the browser for freebsd
NS_TOOLS=""
# libraries required for the freebsd frontend
NS_FRONTEND_LIBS=""
# select gnu make
MAKE=gmake
;;
*)
# default tools required to build the browser
NS_TOOLS="nsgenbind"
# default additional internal libraries
NS_FRONTEND_LIBS="libsvgtiny libnsfb"
;;
esac
;;
esac
export MAKE
################ Development helpers ################
# git pull in all repos parameters are passed to git pull
ns-pull()
{
for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do
echo -n " GIT: Pulling ${REPO}: "
if [ -f "${TARGET_WORKSPACE}/${REPO}/.git/config" ]; then
(cd ${TARGET_WORKSPACE}/${REPO} && git pull $*; )
else
echo "Repository not present"
fi
done
}
# clone all repositories
ns-clone()
{
SHALLOW=""
SKIP=""
while [ $# -gt 0 ]
do
case "$1" in
-d | --deps-only) SKIP="${BUILD_TARGET}"
shift
;;
-s | --shallow) SHALLOW="--depth 1"
shift
;;
-*) echo "Error: Unknown option: $1" >&2
exit 1
;;
*) # No more options
break
;;
esac
done
mkdir -p ${TARGET_WORKSPACE}
for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_RISCOS_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do
[ "x${REPO}" != "x${SKIP}" ] || continue
echo -n " GIT: Cloning ${REPO}: "
if [ -f ${TARGET_WORKSPACE}/${REPO}/.git/config ]; then
echo "Repository already present"
else
(cd ${TARGET_WORKSPACE} && git clone ${SHALLOW} ${NS_GIT}/${REPO}.git; )
fi
done
# put current env.sh in place in workspace
if [ "x$NS_BROWSER" = "x" ]; then
if [ ! -f "${TARGET_WORKSPACE}/env.sh" -a -f ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ]; then
cp ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ${TARGET_WORKSPACE}/env.sh
fi
fi
}
# issues a make command to all libraries
ns-make-libs()
{
for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS}); do
echo " MAKE: make -C ${REPO} $USE_CPUS $*"
${MAKE} -C ${TARGET_WORKSPACE}/${REPO} HOST=${HOST} $USE_CPUS $*
if [ $? -ne 0 ]; then
return $?
fi
done
}
# issues make command for all tools
ns-make-tools()
{
for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_TOOLS}); do
echo " MAKE: make -C ${REPO} $USE_CPUS $*"
${MAKE} -C ${TARGET_WORKSPACE}/${REPO} PREFIX=${BUILD_PREFIX} HOST=${BUILD} $USE_CPUS $*
if [ $? -ne 0 ]; then
return $?
fi
done
}
# issues a make command for framebuffer libraries
ns-make-libnsfb()
{
echo " MAKE: make -C libnsfb $USE_CPUS $*"
${MAKE} -C ${TARGET_WORKSPACE}/libnsfb HOST=${HOST} $USE_CPUS $*
}
# pulls all repos and makes and installs the libraries and tools
ns-pull-install()
{
ns-pull $*
ns-make-tools install
ns-make-libs install
}
# Passes appropriate flags to make
ns-make()
{
${MAKE} $USE_CPUS "$@"
}