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
|
# file : libcurl/buildfile
# license : curl License; see accompanying COPYING file
# Version script.
#
define vsc: file
vsc{*}: extension = vers
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)
vsc{libcurl}: lib/in{libcurl}
{
in.symbol = '@'
CURL_LT_SHLIB_VERSIONED_FLAVOUR = 'OPENSSL_'
}
# It seems that for earlier versions of clang the __has_include_next() macro
# is broken in the -frewrite-includes mode. So, in particular, the following
# fragment of llvm-6.0's stdatomic.h:
#
# #if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>)
# # include_next <stdatomic.h>
# #else
# ...
# typedef _Atomic(_Bool) atomic_bool;
# ...
# #endif
#
# expands into:
#
# #if __STDC_HOSTED__ && (1)/*__has_include_next(<stdatomic.h>)*/
# #if 0 /* expanded by -frewrite-includes */
# # include_next <stdatomic.h>
# #endif /* expanded by -frewrite-includes */
# # 31 "/usr/lib/llvm-6.0/lib/clang/6.0.0/include/stdatomic.h" 3
# # 32 "/usr/lib/llvm-6.0/lib/clang/6.0.0/include/stdatomic.h" 3
# #else
# ...
# typedef _Atomic(_Bool) atomic_bool;
# ...
# #endif
#
# This ends up with no atomic_* types defined, etc.
#
# Thus, we enable reprocessing for the source files which (indirectly) include
# <stdatomic.h> for Clang versions prior to 7.0.
#
if ($c.id == 'clang' && $c.version.major < 7)
lib/obj{easy version}: cc.reprocess = true
# Build options.
#
c.poptions += -DBUILDING_LIBCURL -DHAVE_CONFIG_H \
-DOS="\"$c.target\"" -DVERSION="\"$version.project_id\""
if! $windows
c.poptions += -DCURL_HIDDEN_SYMBOLS
switch $tclass, $tsys
{
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). There are still some warnings left that
# appear for certain platforms/compilers. We pass them through but disable
# treating them as errors.
#
c.coptions += -Wno-all -Wno-extra -Wno-deprecated-declarations -Wno-error
}
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 += -pthread
}
case 'macos'
{
# Note that upstream generates the libcurl-symbols.expsym file on MacOS
# and passes it to linker via the -exported_symbols_list option. This
# looks redundant, since the __visibility__("default") attribute is also
# used for the API function declarations. Thus, we don't bother
# generating/passing the exported symbol list file.
#
c.libs += -framework CoreFoundation \
-framework SystemConfiguration \
-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/
|