aboutsummaryrefslogtreecommitdiff
path: root/odb/sqlite/buildfile
blob: d2da43f82de3ff27621a03bad16e8588b758c1d7 (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
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
# file      : odb/sqlite/buildfile
# license   : GNU GPL v2; see accompanying LICENSE file

define cli: file
cli{*}: extension = cli

import int_libs  = libodb%lib{odb}
import int_libs += libsqlite3%lib{sqlite3}

lib{odb-sqlite}: {hxx ixx txx cxx}{* -version-build2} {hxx}{version-build2} \
         details/{hxx ixx txx cxx}{* -options}                              \
  details/build2/{h}{*}                                                     \
                 $int_libs

# 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-build2}: in{version-build2} $src_root/manifest
hxx{version-build2}:
{
  dist  = true
  clean = ($src_root != $out_root)
}

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

obja{*}: cxx.poptions += -DLIBODB_SQLITE_STATIC_BUILD
objs{*}: cxx.poptions += -DLIBODB_SQLITE_SHARED_BUILD

# Export options.
#
lib{odb-sqlite}:
{
  cxx.export.poptions = "-I$out_root" "-I$src_root" -DLIBODB_SQLITE_BUILD2
  cxx.export.libs = $int_libs
}

liba{odb-sqlite}: cxx.export.poptions += -DLIBODB_SQLITE_STATIC
libs{odb-sqlite}: cxx.export.poptions += -DLIBODB_SQLITE_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{odb-sqlite}: bin.lib.version = @"-$version.project_id"
else
  lib{odb-sqlite}: bin.lib.version = @"-$version.major.$version.minor"

develop = $config.libodb_sqlite.develop

## Consumption build ($develop == false).
#

# Use pregenerated versions in the consumption build.
#
lib{odb-sqlite}: details/pregenerated/{hxx ixx cxx}{**}: include = (!$develop)

if! $develop
  cxx.poptions =+ "-I($src_base/details/pregenerated)" # Note: must come first.

# Don't install pregenerated headers since they are only used internally in
# the database implementation (also below).
#
details/pregenerated/{hxx ixx}{*}: install = false

# Distribute pregenerated versions only in the consumption build.
#
details/pregenerated/{hxx ixx cxx}{*}: dist = (!$develop)

#
##

## Development build ($develop == true).
#

lib{odb-sqlite}: details/{hxx ixx cxx}{options}: include = $develop

if $develop
  import! [metadata] cli = cli%exe{cli}

# In the development build distribute regenerated {hxx ixx cxx}{options},
# remapping their locations to the paths of the pregenerated versions (which
# are only distributed in the consumption build; see above). This way we make
# sure that the distributed files are always up-to-date.
#
<details/{hxx ixx cxx}{options}>: details/cli{options} $cli
{
  install = false
  dist    = ($develop ? details/pregenerated/odb/sqlite/details/ : false)

  # Symlink the generated code in src for convenience of development.
  #
  backlink = true
}
%
if $develop
{{
  options = --include-with-brackets --include-prefix odb/sqlite/details  \
            --guard-prefix LIBODB_SQLITE_DETAILS --generate-file-scanner \
            --cli-namespace odb::sqlite::details::cli --long-usage       \
            --no-combined-flags

  $cli $options -o $out_base/details/ $path($<[0])

  # If the result differs from the pregenerated version, copy it over.
  #
  d = [dir_path] $src_base/details/pregenerated/odb/sqlite/details/

  if diff $d/options.hxx $path($>[0]) >- && \
     diff $d/options.ixx $path($>[1]) >- && \
     diff $d/options.cxx $path($>[2]) >-
    exit
  end

  cp $path($>[0]) $d/options.hxx
  cp $path($>[1]) $d/options.ixx
  cp $path($>[2]) $d/options.cxx
}}

# Install into the odb/sqlite/ subdirectory of, say, /usr/include/
# recreating subdirectories.
#
install_include = [dir_path] include/odb/sqlite/

{hxx ixx txx}{*}:
{
  install         = $install_include
  install.subdirs = true
}

# We want these to be picked up whether LIBODB_SQLITE_BUILD2 is defined or not.
#
hxx{version}@./:             install = false
hxx{version-build2}:         install = $install_include/version.hxx
hxx{version-build2-stub}@./: install = $install_include/version-build2.hxx

details/build2/
{
  h{*}: install = false

  if ($cxx.target.system == 'win32-msvc')
  {
    h{config-vc}@./:      install = $install_include/details/
    h{config-vc-stub}@./: install = $install_include/details/build2/config-vc.h
  }
  else
  {
    h{config}@./:      install = $install_include/details/
    h{config-stub}@./: install = $install_include/details/build2/config.h
  }
}