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
|
# file : libcurl/buildfile
# license : curl License; see accompanying COPYING file
# Version script.
#
define vsc: file
vsc{*}: extension = vers
# Exported symbols.
#
define esm: file
esm{*}: extension = expsym
import imp_libs = libssl%lib{ssl}
import imp_libs += libcrypto%lib{crypto}
import imp_libs += libz%lib{z}
lib{curl}: {h c}{**} $imp_libs
tclass = $c.target.class
tsys = $c.target.system
linux = ($tclass == 'linux')
bsd = ($tclass == 'bsd')
macos = ($tclass == 'macos')
windows = ($tclass == 'windows')
libs{curl}: vsc{libcurl}: include = ($linux || $bsd ? adhoc : false)
libs{curl}: esm{libcurl-symbols}: include = ($macos ? adhoc : false)
vsc{libcurl}: lib/in{libcurl}
{
in.symbol = '@'
CURL_LT_SHLIB_VERSIONED_FLAVOUR = 'OPENSSL_'
}
# Build options.
#
c.poptions += -DBUILDING_LIBCURL -DHAVE_CONFIG_H \
-DOS="\"$c.target\"" -DVERSION="\"$version.project_id\""
if! $windows
c.poptions += -DCURL_HIDDEN_SYMBOLS
# Note that the upstream package uses the -pthread compiler/linker option on
# Linux and FreeBSD. The option is unsupported by build2 so we pass
# -D_REENTRANT and -lpthread preprocessor/linker options instead.
#
switch $tclass, $tsys
{
case 'linux' | 'bsd'
c.poptions += -D_REENTRANT
case 'windows', 'win32-msvc'
c.poptions += -DWIN32
}
c.poptions =+ "-I$src_base" "-I$src_base/include" "-I$src_base/lib"
obja{*}: c.poptions += -DCURL_STATICLIB
if! $windows
c.coptions += -fvisibility=hidden
switch $c.class
{
case 'gcc'
{
# Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem
# to care about these and it is not easy to disable specific warnings in a
# way that works across compilers/version (some -Wno-* options are only
# recognized in newer versions).
#
c.coptions += -Wno-all -Wno-extra -Wno-deprecated-declarations
}
case 'msvc'
{
# Disable warnings that pop up with /W3.
#
c.coptions += /wd4028 /wd4996
}
}
switch $tclass, $tsys
{
case 'linux' | 'bsd'
{
# Make sure all symbols are resolvable.
#
c.loptions += -Wl,--no-undefined
c.loptions += "-Wl,--version-script=$out_base/libcurl.vers"
c.libs += -lpthread
}
case 'macos'
{
c.loptions += "-Wl,-exported_symbols_list,$src_base/libcurl-symbols.expsym"
# @@ TMP Until erroneous -framework option suppression is fixed in build2.
#
# c.libs += -framework CoreFoundation -framework Security
c.libs += -Wl,-framework,CoreFoundation -Wl,-framework,Security
}
case 'windows', 'mingw32'
{
c.loptions += -Wl,--enable-auto-image-base
c.libs += -lws2_32 -lcrypt32
}
case 'windows'
{
c.libs += ws2_32.lib crypt32.lib normaliz.lib advapi32.lib
}
}
# Export options.
#
lib{curl}: cc.export.poptions = "-I$src_base/include"
liba{curl}: cc.export.poptions += -DCURL_STATICLIB
# See bootstrap.build for details.
#
if $version.pre_release
lib{curl}: bin.lib.version = @"-$version.project_id"
else
lib{curl}: bin.lib.version = @"-$abi_version_major" linux@"$abi_version"
# Install headers from the include/curl/ subdirectory only.
#
h{*}: install = false
include/curl/h{*}: install = include/curl/
|