From adb5186a59a19581a3c34fb00bdb7cf1907bf796 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 12 Sep 2022 16:33:57 +0300 Subject: Use ad hoc recipe to compile options.cli file --- odb/mssql/buildfile | 103 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 30 deletions(-) (limited to 'odb/mssql/buildfile') diff --git a/odb/mssql/buildfile b/odb/mssql/buildfile index 98a8a13..f498ee7 100644 --- a/odb/mssql/buildfile +++ b/odb/mssql/buildfile @@ -1,6 +1,9 @@ # file : odb/mssql/buildfile # license : ODB NCUEL; see accompanying LICENSE file +define cli: file +cli{*}: extension = cli + import int_libs = libodb%lib{odb} # On Windows ODBC is a pre-installed system library so we pass it to the @@ -11,9 +14,9 @@ imp_libs = if ($cc.target.class != 'windows') import imp_libs = libunixodbc%lib{odbc} -lib{odb-mssql}: {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-mssql}: {hxx ixx txx cxx}{* -version-build2} {hxx}{version-build2} \ + details/{hxx ixx txx cxx}{* -options} \ + details/build2/{h}{*} \ $imp_libs $int_libs # Include the generated version header into the distribution (so that we don't @@ -57,36 +60,76 @@ if $version.pre_release else lib{odb-mssql}: bin.lib.version = @"-$version.major.$version.minor" -# Generated options parser. +develop = $config.libodb_mssql.develop + +## Consumption build ($develop == false). +# + +# Use pregenerated versions in the consumption build. +# +lib{odb-mssql}: 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-mssql}: 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/cli{options} $cli { - if $cli.configured - { - cli.cxx{options}: cli{options} - - cli.options += --include-with-brackets --include-prefix odb/mssql/details \ ---guard-prefix LIBODB_MSSQL_DETAILS --generate-file-scanner \ ---cli-namespace odb::mssql::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/mssql/details/ : false) + + # Symlink the generated code in src for convenience of development. + # + backlink = true } +% +if $develop +{{ + options = --include-with-brackets --include-prefix odb/mssql/details \ + --guard-prefix LIBODB_MSSQL_DETAILS --generate-file-scanner \ + --cli-namespace odb::mssql::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/mssql/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/mssql/ subdirectory of, say, /usr/include/ # recreating subdirectories. -- cgit v1.1