# file : bdep/buildfile # license : MIT; see accompanying LICENSE file # @@ ODB: these are ODB changelogs that are both generated and stored in the # repository (what if src != out?). Will need to think how to handle # them properly (always generate in src_base?). # define xml: file xml{*}: extension = xml import libs = libbpkg%lib{bpkg} import libs += libbutl%lib{butl} import libs += libodb%lib{odb} import libs += libodb-sqlite%lib{odb-sqlite} # @@ Why don't we generate these with wildcard patterns (and rules below with # a for-loop)? # options_topics = \ bdep-options \ common-options \ project-options \ help-options \ new-options \ init-options \ sync-options \ fetch-options \ status-options \ ci-options \ release-options \ publish-options \ deinit-options \ config-options \ test-options \ update-options \ clean-options help_topics = projects-configs argument-grouping default-options-files ./: exe{bdep}: {hxx ixx txx cxx}{+bdep} libue{bdep} libue{bdep}: {hxx ixx txx cxx}{** -bdep \ -{$options_topics} \ -{$help_topics} \ -*-odb \ -version \ -**.test...} \ {hxx ixx cxx}{$options_topics} \ {hxx cxx}{$help_topics} \ {hxx ixx cxx}{project-odb database-views-odb} \ {hxx}{version} \ $libs \ xml{*} hxx{version}: in{version} $src_root/manifest # Unit tests. # exe{*.test}: { test = true install = false } for t: cxx{**.test...} { d = $directory($t) n = $name($t)... ./: $d/exe{$n}: $t $d/{hxx ixx txx}{+$n} $d/testscript{+$n} $d/exe{$n}: libue{bdep}: bin.whole = false } # Build options. # obj{utility}: cxx.poptions += -DBDEP_EXE_PREFIX='"'$bin.exe.prefix'"' \ -DBDEP_EXE_SUFFIX='"'$bin.exe.suffix'"' # Pass the copyright notice extracted from the LICENSE file. # copyright = $process.run_regex( \ cat $src_root/LICENSE, \ 'Copyright \(c\) (.+) \(see the AUTHORS and LEGAL files\)\.', \ '\1') obj{bdep}: cxx.poptions += -DBDEP_COPYRIGHT=\"$copyright\" # For now assume this is a staged toolchain if we are building with the staged # build system (see build.version.stage for details on the final plan). # if $build.version.stage cxx.poptions += -DBDEP_STAGE # Disable "unknown pragma" warnings. # switch $cxx.class { case 'msvc' cxx.coptions += /wd4068 case 'gcc' cxx.coptions += -Wno-unknown-pragmas } # Make sure backtrace includes function names. # if ($cxx.target.class == 'linux' && $cc.stdlib == 'glibc') cxx.loptions += -rdynamic # @@ TMP work around what looks like Clang bug #45021 (first triggered with # Clang 13.0.0). # if ($cxx.id == 'clang' && $cxx.target.system == 'win32-msvc') { if ($regex.find_match($cc.coptions $cxx.coptions, '-O[23]')) obj{new}: cxx.coptions += -O1 } # Generated options parser. # if $cli.configured { # General topics and common options. # cli.cxx{common-options}: cli{common} cli.cxx{project-options}: cli{project} cli.cxx{bdep-options}: cli{bdep} # Command. # cli.cxx{help-options}: cli{help} cli.cxx{new-options}: cli{new} cli.cxx{init-options}: cli{init} cli.cxx{sync-options}: cli{sync} cli.cxx{fetch-options}: cli{fetch} cli.cxx{status-options}: cli{status} cli.cxx{ci-options}: cli{ci} cli.cxx{release-options}: cli{release} cli.cxx{publish-options}: cli{publish} cli.cxx{deinit-options}: cli{deinit} cli.cxx{config-options}: cli{config} cli.cxx{test-options}: cli{test} cli.cxx{update-options}: cli{update} cli.cxx{clean-options}: cli{clean} # Help topics. # cli.cxx{projects-configs}: cli{projects-configs} cli.cxx{argument-grouping}: cli{argument-grouping} cli.cxx{default-options-files}: cli{default-options-files} # Option length must be the same to get commands/topics/options aligned. # cli.options += --std c++11 -I $src_root --include-with-brackets \ --include-prefix bdep --guard-prefix BDEP \ --cxx-prologue "#include " --cli-namespace bdep::cli \ --generate-vector-scanner --generate-file-scanner --generate-group-scanner \ --keep-separator --generate-specifier --generate-modifier \ --generate-description --generate-parse --generate-merge \ --page-usage 'bdep::print_$name$_' --ansi-color --ascii-tree \ --include-base-last --suppress-undocumented --option-length 25 cli.cxx{common-options}: cli.options += --short-usage --long-usage # Both. cli.cxx{bdep-options}: cli.options += --short-usage cli.options += --long-usage # All other pages -- long usage. cli.cxx{new-options}: cli.options += \ --cxx-prologue "#include " cli.cxx{ci-options}: cli.options += \ --cxx-prologue "#include " cli.cxx{release-options}: cli.options += \ --cxx-prologue "#include " # Avoid generating CLI runtime and empty inline file for help topics. # cli.cxx{projects-configs}: cli.options += --suppress-cli --suppress-inline cli.cxx{argument-grouping}: cli.options += --suppress-cli --suppress-inline cli.cxx{default-options-files}: cli.options += --suppress-cli --suppress-inline # 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 clean = ($src_root != $out_root) } }