# file : odb/buildfile # copyright : Copyright (c) 2009-2018 Code Synthesis Tools CC # license : GNU GPL v3; see accompanying LICENSE file define plugin: libs plugin{*}: bin.lib.prefix = # No lib prefix. plugin{*}: backlink = true # Backlink in forwarded configs (next to exe). # For now we use the .so extension everywhere except Windows (see # plugin_path() in odb.cxx for details). # if ($cxx.target.class != 'windows') plugin{*}: extension = so # By default install the plugin next to the driver. # # On Windows this is the only sane option where we want the plugin (odb.dll) # to go into bin/ since failed that we won't be able to find libraries we # depend on. # # On other platforms another option is to install into the GCC's plugin # directory. This way the same driver can be used with multiple GCC versions # and is something that distributions packagers sometimes want to do. # # So at some point we should also make it configurable, including support for # installing into GCC's plugin directory. # # NOTE: see ODB_GCC_PLUGIN_DIR when adding this support. # plugin{*}: install = bin/ # Unless cross-compiling, pass the C++ compiler's recall path as g++ name. At # some point we should also make it configurable. # gxx_name = ($cxx.target != $build.host ? g++ : $recall($cxx.path)) gxx_name = $regex.replace($gxx_name, '\\', '\\\\') # Escape back slashes. import libs = libcutl%lib{cutl} import libs += libstudxml%lib{studxml} ./: exe{odb} plugin{odb} # We need to make driver depend on plugin but not link it so that when, for # example, driver is imported, plugin is updated as well. # # We, however, don't want to install via the driver since the same driver # build could be used with multiple plugin builds (e.g., for different GCC # versions, which is something distribution packagers sometimes want to do). # @@ For this we will have to wait for operation-specific values support. # exe{odb}: cxx{odb} exe{odb}: libus{odb}: bin.whole = false exe{odb}: plugin{odb}: include = adhoc plugin{odb}: libus{odb} # On Windows we have to link the import stub. # if ($cxx.target.system == 'mingw32') plugin{odb}: cxx.libs += $plugin_dir/cc1plus.exe.a # # On Mac OS we have to allow undefined symbols. # elif ($cxx.target.system == 'darwin') plugin{odb}: cxx.loptions += -undefined dynamic_lookup libus{odb}: {hxx ixx txx cxx}{** -odb -options} {hxx ixx cxx}{options} $libs cxx.poptions += "-I$plugin_dir/include" "-DODB_GXX_NAME=\"$gxx_name\"" cxx.poptions += -DODB_BUILD2 # @@ TMP while supporting other build systems. # Don't install any of the plugin's headers. # {hxx ixx txx}{*}: install = false # Generated options parser. # # @@ TMP: currently generated code is committed to allow building from git. # if $cli.configured { cli.cxx{options}: cli{options} cli.options += --include-with-brackets --include-prefix odb \ --guard-prefix ODB --generate-file-scanner --generate-specifier \ --generate-modifier --generate-description --suppress-undocumented \ --cxx-prologue '#include ' # Include the 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). # cli.cxx{*}: dist = true cli.cxx{*}: clean = ($src_root != $out_root) # We keep the generated code in the repository so copy it back to src in # case of a forwarded configuration. # cli.cxx{*}: backlink = overwrite }