aboutsummaryrefslogtreecommitdiff
path: root/libbutl/buildfile
blob: feb2f96710be7d2c338313ee17d1a4b7da841d5e (plain)
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
# file      : libbutl/buildfile
# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

# This library was modularized using the Modules TS semantics (with support
# for dual, module/header consumption) which was subsequently partially
# dismantled. We, however, kept some of the changes in anticipation that they
# would be useful when attempting to modularize using the merged modules
# semantics. Specifically, there are currently headers with both .mxx and .hxx
# extensions and the code is littered if the #if __cpp_[lib_]modules_ts
# blocks.
#
# @@ If/when going back to using mxx{}, make sure to cleanup explicit .hxx.
#
lib{butl}: {hxx ixx txx cxx}{** -uuid-* +uuid-io -win32-utility} \
           hxx{**.hxx -uuid-*.hxx +uuid-io.hxx -win32-utility.hxx \
               -version.hxx} hxx{version}

tclass = $cxx.target.class
tsys   = $cxx.target.system

linux   = ($tclass == 'linux')
macos   = ($tclass == 'macos')
windows = ($tclass == 'windows')
freebsd = ($tsys == 'freebsd')

mingw = ($tsys == 'mingw32')

# Exclude these from compilation on non-Windows targets.
#
lib{butl}: hxx{win32-utility.hxx} cxx{win32-utility}: include = $windows

# Our C-files are included into sha256.cxx (sha256c.c) and timestamp.cxx
# (strptime.c timelocal.h timelocal.c), so treat them as files exclude from
# the compilation.
#
lib{butl}: file{*.c *.h}

# Platform-specific UUID implementations.
#
lib{butl}: cxx{uuid-linux}:   include = $linux
lib{butl}: cxx{uuid-macos}:   include = $macos
lib{butl}: cxx{uuid-windows}: include = $windows
lib{butl}: cxx{uuid-freebsd}: include = $freebsd

if $linux
  cxx.libs += -ldl
elif $macos
  cxx.libs += -framework CoreFoundation
elif $windows
  cxx.libs += ($mingw ? -lrpcrt4 : rpcrt4.lib)
elif $freebsd
  cxx.libs += -lexecinfo

# Include the generated version header into the distribution (so that we don't
# pick up an installed one) and don't remove it when cleaning in src (so that
# clean results in a state identical to distributed).
#
hxx{version.hxx}: in{version} $src_root/manifest
hxx{version.hxx}:
{
  dist  = true
  clean = ($src_root != $out_root)
}

# Build options.
#
cxx.poptions =+ "-I$out_root" "-I$src_root"

obja{*} bmia{*}: cxx.poptions += -DLIBBUTL_STATIC_BUILD
objs{*} bmis{*}: cxx.poptions += -DLIBBUTL_SHARED_BUILD

# Additional system libraries.
#
if $windows
  cxx.libs += ($mingw ? -limagehlp : imagehlp.lib)
else
  cxx.libs += -lpthread

# Export options.
#
lib{butl}: cxx.export.poptions = "-I$out_root" "-I$src_root"

liba{butl}: cxx.export.poptions += -DLIBBUTL_STATIC
libs{butl}: cxx.export.poptions += -DLIBBUTL_SHARED

# For pre-releases use the complete version to make sure they cannot be used
# in place of another pre-release or the final version. See the version module
# for details on the version.* variable values.
#
if $version.pre_release
  lib{butl}: bin.lib.version = @"-$version.project_id"
else
  lib{butl}: bin.lib.version = @"-$version.major.$version.minor"

# Install into the libbutl/ subdirectory of, say, /usr/include/
# recreating subdirectories.
#
{hxx ixx txx}{*}:
{
  install         = include/libbutl/
  install.subdirs = true
}