diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2022-09-12 15:37:40 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2022-09-12 20:17:08 +0300 |
commit | b5778fbc764cb72dcc2ec2fa72209b969f266d69 (patch) | |
tree | bd3ad93462c17ec47f3f521948720c65a3216e2f /odb/mysql/buildfile | |
parent | 2831d7278e9849abb4e110e69bfb43c2ef8f3ee6 (diff) |
Use ad hoc recipe to compile options.cli file
Diffstat (limited to 'odb/mysql/buildfile')
-rw-r--r-- | odb/mysql/buildfile | 104 |
1 files changed, 74 insertions, 30 deletions
diff --git a/odb/mysql/buildfile b/odb/mysql/buildfile index 2796103..65631cb 100644 --- a/odb/mysql/buildfile +++ b/odb/mysql/buildfile @@ -1,15 +1,18 @@ # file : odb/mysql/buildfile # license : GNU GPL v2; see accompanying LICENSE file +define cli: file +cli{*}: extension = cli + import int_libs = libodb%lib{odb} import int_libs += ($client_lib == 'mysql' \ ? libmysqlclient%lib{mysqlclient} \ : libmariadb%lib{mariadb}) -lib{odb-mysql}: {hxx ixx txx cxx}{* -version-build2} {hxx}{version-build2} \ - details/{hxx ixx txx cxx}{* -options} details/{hxx ixx cxx}{options} \ - details/build2/{h}{*} \ +lib{odb-mysql}: {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 @@ -56,36 +59,77 @@ if $version.pre_release else lib{odb-mysql}: bin.lib.version = @"-$version.major.$version.minor" -# Generated options parser. +develop = $config.libodb_mysql.develop + +## Consumption build ($develop == false). +# + +# Use pregenerated versions in the consumption build. +# +lib{odb-mysql}: 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) + # -details/ +## + + +## Development build ($develop == true). +# + +lib{odb-mysql}: 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 { - if $cli.configured - { - cli.cxx{options}: cli{options} - - cli.options += --include-with-brackets --include-prefix odb/mysql/details \ ---guard-prefix LIBODB_MYSQL_DETAILS --generate-file-scanner \ ---cli-namespace odb::mysql::details::cli --long-usage --generate-specifier \ ---no-combined-flags - - # Include generated cli files into the distribution and don't remove them - # when cleaning in src (so that clean results in a state identical to - # distributed). But don't install their headers since they are only used - # internally in the database implementation. - # - cli.cxx{*}: - { - dist = true - clean = ($src_root != $out_root) - install = false - } - } - else - # No install for the pre-generated case. - # - hxx{options}@./ ixx{options}@./: install = false + install = false + dist = ($develop ? details/pregenerated/odb/mysql/details/ : false) + + # Symlink the generated code in src for convenience of development. + # + backlink = true } +% +if $develop +{{ + options = --include-with-brackets --include-prefix odb/mysql/details \ + --guard-prefix LIBODB_MYSQL_DETAILS --generate-file-scanner \ + --cli-namespace odb::mysql::details::cli --long-usage \ + --generate-specifier --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/mysql/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/mysql/ subdirectory of, say, /usr/include/ # recreating subdirectories. |